LPCXpresso Урок 1. Изучаем примеры. Введение в среду разработки.

Вступление

Этот первый урок в рамках курса для новичков желающих ознакомится с семейством контроллеров LPC1xxx, и LPC1343 в первую очередь, так как именно её я и буду рассматривать. Ознакомимся со средой CodeRed, предоставляемой для работы с отладочной платой LPCXpresso.

При покупке LPCXpresso вы получите «купон» с кодом для регистрации одноименной среды от CodeRed. Скачать её можно с сайта http://lpcxpresso.code-red-tech.com/LPCXpresso/ после регистрации (моя версия 3.5.0 которую и рекомендую к использованию, но на момент написания статьи доступна уже 4.2). Процесс её установки я описывать не буду, это повествование о знакомстве с контроллерами, а не урок по работе в ОС Windows. В картинках процесс установки и активации изложен в документе LPCXpresso Getting Started.pdf

Импорт примеров

Первое с чего следует начать – это импорт существующих проектов. CodeRed поставляется с примерами, кроме того, NXP на своем сайте публикует примеры работы со своими контроллерами. Грех будет не воспользоваться всем этим добром. Приступим.

На панели Quickstart Panel выбираем Import Example project(s):
Панель быстрого старта
Либо же на тулбаре нажимаем соответствующую кнопку
Кнопка импорта на toolbar'е

В поле Project arcive указываете путь к *.zip файлу примера. Начнем, пожалуй, с Examples\NXP\LPC1000\LPC13xx\LPCXpresso1343.zip. Выбираем и ждем Next >. Нам будет предложено, какие из имеющихся в архиве проектов следует импортировать. Выбираем:

  • CMSISv1p30_LPC13xx – будем считать, что это базовая библиотека и без неё ничего не работает.
  • LPC13xx_Lib – библиотека для работы с периферией на контроллере LPC1343. Реализация не полная и возможно не самая удачная, но зато оно работает сразу.
  • LPCXpresso1343_blinky – мигаем светодиодом.

Жмем Finish и получаем результат:
Окно дерева проектов

Запуск примера

Что ж, нам осталось подключить нашу плату LPCXpresso к USB порту компьютера и выбрать в панели Quickstart panel появившийся пункт Debug ‘LPCXpresso1343_blinky’
Панель быстрого старта для проекта
Либо нажав кнопку отладки в тулбаре
Кнопка запуска отладки проекта на toolbar'е
Среда начнет компиляцию проектов и запустит отладку.

Если получите сообщение, что отладочный модуль не найден,
Сообщение об ошибки подключения к плате LPCXpresso
то либо вы просто не подключили плату к компьютеру, либо же уже был запущен другой сеанс отладки на подключенном модуле (мораль: не фиг жать кнопки яки угорелый). Устраняем причины, и повторяем действие.

Отладка

Самая святая-святых процесса разработки. Самая главная и ресурсоемкая его составляющая. И поскольку в отладке вам предстоит провести большую часть своего времени, то следует подойти к изучению имеющихся средств со всей ответственностью.

В режиме отладки компоновка среды разработки несколько меняется. Появляется окно отладки с отображением стека вызовов, и курсор устанавливается на первую инструкцию в функции main().
Окно среды в режиме отладки

Управление в режиме отладки осуществляется панелью в окне Debug:
Кнопки управления процессом отладки
перечислю функции всех кнопок по очереди:

  1. Remove All Terminated Launches – удаляет из окна отладки записи о завершенных сеансах отладки. «Удаляет мусор» так сказать. Полезно. А главное нажимать её безопасно в любое время – ничего не испортите.
  2. Connect to a process – нам не нужно.
  3. Restart – начать отладку с начала. Иными словами нажать Reset. Полезно если не надо менять прошивку. Доступно только если отладка приостановлена (стоит пауза).
  4. Resume (F8) – продолжить выполнение/выйти из приостановленного состояния (снять паузу).
  5. Suspend – приостановить выполнение (поставить на паузу). Если вдруг программа зависла, можно узнать, где именно. Курсор будет установлен на следующую исполняемую инструкцию.
  6. Terminate (Ctrl + F2) – завершить процесс отладки. Среда вернется обратно в режим разработки, а железка продолжит выполнять загруженную в неё программу. Это важно помнить.
  7. Disconnect – нам не нужно.
  8. Step into (F5) – сделать шаг с входом в функцию. Если в очередной строке есть вызов функции, то мы перейдем внутрь этой функции.
  9. Step over (F6) – сделать шаг без входа в функцию. Если в очередной строке есть вызов функции, то она будет полностью выполнена «за один шаг» (не такт процессора, а шаг отладки – не путайте). Курсор же будет установлен на следующую строку.
  10. Step Return (F7) – выйти из функции. Выполнение будет продолжено до возврата из текущей функции. Полезно что бы ни выполнять по шагам каждую строчку функции, если нам она больше не интересна.
  11. Drop to Frame – нам не надо.
  12. Instruction stepping mode – нам не понадобится. Позволяет проводить выполнение каждой инструкции процессора по отдельности.
  13. Refresh – обновить информацию.
Кнопки 14, 15, 16 думаю и сами поймете.

Собственно теперь можно нажать <F8> Resume и программа начнет выполняться, а светодиод на плате вместо тусклого свечения начнет мигать. При выборе <Ctrl>+<F2> Terminate программа в контроллере так же продолжит выполнение, только мы больше не сможем повлиять на ход её выполнения до запуска нового сеанса отладки. Но для более любознательных рекомендуется нажать <F5> Step into и увидеть первый камень тех, кто не читает мануалы:

void GPIOInit( void )
{
  /* Enable AHB clock to the GPIO domain. */
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);
}

Вот оно великое! Разрешение тактирования портов ввода-вывода. Без установки этого бита, никакие операции вывода в порт не отразились бы на физических уровнях ножек контроллера. В прочем об этом вы уже могли читать у DI HALT’а и не только.

В режиме пошаговой отладки в проекте примера вы можете ознакомиться со всей последовательностью действий, которые были выполнены для работы примера. Где, что и как было сделано. Вообще отладка хорошее средство не только для поиска ошибок, но и для изучения.

Библиотеки

При пошаговой отладке вы могли обнаружить весь ужас функции GPIOSetDir. И наверняка задались вопросом «почему так сложно и непонятно». Суть в том, что GPIOSetDir – это библиотечная функции. Она написана для вас, что бы вы ей пользовались. А использовать её крайне легко и понятно:

  // Set port for LED to output
  GPIOSetDir( LED_PORT, LED_BIT, 1 );

Задача библиотеки «скрыть» низкий уровень, оставив для разработчика простой и понятный интерфейс для выполнения задачи. Это хорошо и это полезно. Не спешите делать своё «крутое» и «мегаоптимальное». Вы всегда сможете это сделать. Другой момент – вам предоставляют уже готовое средство, для использования которого вам не нужно знать ровным счетом ничего, про регистры контроллера, внутреннее устройство памяти и прочее. Вы берёте инструмент и начинаете им работать. Вам не надо быть гуру, для того, что бы начать писать свои рабочие проекты. Библиотека от NXP позволяет вам приступить к изучению платформы. Пользуйтесь ею.

Так же отмечу проект CodeBase. Он представляет собой переписанную библиотеку NXP и на мой взгляд больше подходит для изучения, т.к. в ней «магические числа» заменены именованными константами. Те же строки включения тактирования портов ввода-вывода выглядят следующим образом:

  /* Enable AHB clock to the GPIO domain. */
  SCB_SYSAHBCLKCTRL |= (SCB_SYSAHBCLKCTRL_GPIO);

Во-первых, вам уже не надо думать, что означает 1<<6 и почему используется именно такое значение. Во-вторых, в именах констант заложено ещё и имя регистра, для которого константа предназначена. В-третьих, имена легче читаются.

Вообще всё это субъективно. Кому-то удобнее одно, кому-то другое. Я для изучения использую обе библиотеки. NXP – так как она написана «по юзер мануалу», CodeBase – так как в ней убрана «магия». Кроме того, в CodeRed есть готовые библиотеки для подключения дисплеев, памяти (в том числе и SD карточек) и прочего.

В качестве завершения

Как-то резко всё закончилось. Но добавить мне больше нечего. Так что давайте на этом завершим первый урок. Попробуйте все приведённые действия повторить самостоятельно.

Ссылки на материалы приведены в анонсе.

Hosted by uCoz