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

Вступление

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

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

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

Первое с чего следует начать – это импорт существующих проектов. CodeRed поставляется с примерами, кроме того, NXP на своем сайте публикует примеры работы со своими контроллерами. Грех будет не воспользоваться всем этим добром.
Приступим. На панели Quickstart Panel выбираем Import Example project(s).

Либо же на тулбаре нажимаем соответствующую кнопку

В поле 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’

Либо нажав кнопку отладки в тулбаре

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

Отладка

Самая святая-святых процесса разработки. Самая главная и ресурсоемкая его составляющая. И поскольку в отладке вам предстоит провести большую часть своего времени, то следует подойти к изучению имеющихся средств со всей ответственностью.
В режиме отладки компоновка среды разработки несколько меняется. Появляется окно отладки с отображением стека вызовов, и курсор устанавливается на первую инструкцию в функции 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 карточек) и прочего.

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

Как-то резко всё закончилось. Но добавить мне больше нечего. Так что давайте на этом завершим первый урок. Попробуйте все приведённые действия повторить самостоятельно.
Ссылки на материалы приведены в анонсе.
  • 0
  • 06 сентября 2011, 12:42
  • angel5a

Комментарии (25)

RSS свернуть / развернуть
ЭКСпорт это когда из программы что-то выгружается. Вы же наоборот подгружаете готовое, а это ИМпорт. Даже интерфейс среды толсто намекает об этом: «IMPORT Example project(s).»
0
  • avatar
  • kest
  • 06 сентября 2011, 16:29
Да, прошу прощения, 2 раза ошибся.
0
Ссылку на CodeBase не подкинете?
0
  • avatar
  • John
  • 06 сентября 2011, 18:35
Обновил в посте, добавил в список ссылок в анонсе.
0
Connect to a process – нам не нужно.

Disconnect – нам не нужно.

Drop to Frame – нам не надо.
Лол. И все же, что делает Drop to Frame?

Алсо добавь нормальный скрин всего окна среды в режиме разработки и в режиме отладки.
А вообще, CodeRed отталкивает заточенностью под LPC и тем, что это платный продукт, сделанный на свободных GCC-ARM и Eclipse.
0
  • avatar
  • Vga
  • 06 сентября 2011, 18:44
В заголовок статьи допишите, пжл, по какой теме уроки
0
  • avatar
  • Deer
  • 06 сентября 2011, 21:35
При всем уважении к автору — но както суховато получилось.
По ссылке есть вполне нормальные видеоуроки, где красиво и наглядно показаны все этапы стартапа (правда на буржуйском, но так все понимают куда сунулись :) ).
+1
Остальные уроки будут изложены в том же самом ключе и то же по-русски. Для знающих английский хватит и предоставляемой NXP документации (тут они молодцы, постарались на славу). В добавок есть ещё жменька ресурсов, например adafruits ведёт вики. Но всё это по английски, и не все способны воспринять изложенный там материал. Я описал на сколько смог подробно и доступно, как материал «улучшить» я не вижу.
За предоставленную ссылку спасибо, добавлю в список ссылок.
0
Включусь и я в этот поток!
получил LPCxpresso 1114 таргер
тоесть полный отстой но уже арм…
но не в этом суть… скачал кодеред зарегил выбираю всё как по вашему уроку но у меня в примерах нигде нет lpc1343_lib вот ну нигде не упоминается… откуда ж она берется? а для 1114 тож наверное чтото есть типа StdPeriphDrv от STM…

впринципе появляются некоторые либы но… если пользоваться темплейт импорт визард…
0
Для вашей платы надо использовать примеры важей платы. Русполагаются они в Examples\NXP\LPC1000\LPC11xx\ соответственно и библиотека у вас очевидно LPC11xx_Lib должна называться. Я не зря отмечал что использую LPCXpresso на базе LPC1343.
0
ненене ну причём тут моя плата… в моей именно плате есть другой прикол — там есть заготовка с хмл файлом нажимаеш смарт визард и он типа сам настраивает проект добьавляет нужные библиотеки и т.д.
но я пробывал изначально повторить Ваши действия и у меня почему-то ничего не получилось… ну нет у меня ни в одном археве из всей папки екземплов такой библиотеки… чтото у кого-то изменилось или они знали куда какая плата ушла и мне дали скачать другой кодеред? :)))
0
Вполне возможно кодеред обновили. Новую версию я не смотрел, нет пока возможности скачать. По этой причине я указывал свою версию среды.
0
(мораль: не фиг жать кнопки яки угорелый). Устраняем причины, и повторяем действие.

Самокритика или для примера? :)
0
  • avatar
  • DVF
  • 12 сентября 2011, 22:54
Наблюдения за другими. Народ если в первые пол секунды ничего не произошло, начинает бешенно кликать на всё подряд.
Сам столкнулся с такой ошибкой, когда не завершив один сеанс отладки, вносил изменения и запускал второй. Но тут как повезёт, если успеешь первый завершить — всё норм. не успеешь — ошибка :)
0
здраствуйте
не подскажете у меня ноут с виндой 7(32) и повторяя ваш урок он мне выдает ошибку
Errors exit in a required project Continue lanch? программа LPCXpresso v4.0.6_152
установил этуже программу на другой ноут с виндой XP ни каких проблем все получилось.
я думаю что винда 7 блокируе. как это исправить. спасибо.
0
  • avatar
  • free
  • 19 сентября 2011, 21:31
Ошибка эта значит что «Проект не был скомпилирован из-за ошибок, но есть более ранняя провильно собранная версия, желаете ли вы её собрать ?»
Мосмотрите в окне Problems какие ошибки указаны. Вообще довольно странно что вы не смогли собрать пример. Должно быть вы просто в коде внесли лишние символы. Семёрка тут не должна быть виновницей. Хотя на всякий случай можно для вашей папки с проектами изменить права доступа. Самое простое — разрешить полный доступ для всех.
Компьютер на котором возникла ошибка не состоит случаем в домене?
0
на счет домена я незнаю. а проблема разрешил так я поменял путь к папке.
а за советы спасибо.
0
  • avatar
  • free
  • 22 сентября 2011, 21:16
Я хотел бы спросить: каким образом можно посмотреть содержимое библиотек, чтобы использовать прописанные в них функции, просмотра их параметров?
Например, библиотека «timer32.h» и функция, принадлежащая ей «init_timer32(0, TIME_INTERVAL)» (взято из примера «blinky» для lpcexpresso c МК lpc11xx). Хотелось бы знать, какие параметры можно будет вводить в эту функцию, в каких пределах из допустимо изменять. Аналогично и для других библиотечных функций.
Или подскажите, где этот материал можно найти.
Спасибо.
0
Мм… «Урок 3» по LPCXpresso почти полностью исчерпал мой вопрос) Спасибо)
0
Да не за что. Обращайтесь :)
0
Вопрос к автору: В статье с такой легкостью написано:

«Что ж, нам осталось подключить нашу плату LPCXpresso к USB порту компьютера и выбрать в панели Quickstart panel появившийся пункт Debug ‘LPCXpresso1343_blinky’ Либо нажав кнопку отладки в тулбаре… Среда начнет компиляцию проектов и запустит отладку.
Если получите сообщение, что отладочный модуль не найден, то либо вы просто не подключили плату к компьютеру, либо же уже был запущен другой сеанс отладки на подключенном модуле (мораль: не фиг жать кнопки яки угорелый). Устраняем причины, и повторяем действие.»

Предполагается подключение только самой платы LPC1343 по USB или к плате должен быть подключен JTAG отладчик? Если использование JTAG не предполагается, то каким типом устройства плата должна быть подключена к компу (что должно быть написано в диспетчере устройств и какой драйвер нужен для платы?!). Я подключаю плату к USB воткнув перемычку BLD_E (плата опознается компом как флешка с файлом firmware.bin) — это я так понимаю режим обновления прошивки, соответственно если убрать перемычку и сбросить программу (нажав кнопку Reset) то включится режим выполнения программы (вот тут по идее наверное и надо осуществлять отладку, только вот как… в диспетчере устройств не вижу ничего (ни HID устройства никакого нового, даже ничего похожего...)). Соответственно и LPCExpresso выдает ошибку «No emulator or board available» как быть?

Заранее Спасибо.

PS: яки угорелый на кнопки не жму, всё последовательно делаю… Плата LPC1343 ОС: Windows XP SP2
0
Предполагается подключение только самой платы LPC1343 по USB или к плате должен быть подключен JTAG отладчик?
Речь идет о LPC Expresso, а на ней отладчик встроенный. Так что к компу подключается именно он. Дрова вероятно должны идти с CodeRed, если только он не опознается как стандартный класс.
0
Т.е. использовать среду разработки LPC Expresso с платой LPC-P1343 www.olimex.com/dev/lpc-p1343.html (проц тоже LPC1343) не получится( пичаль( Спасибо.
0
Значит, у тебя именно эта плата, а не LPC Expresso?
Насколько я вижу, к ней нужен внешний JTAG-отладчик. Вполне можно отлаживать в CodeRed, если в качестве оного отладчика использовать LPC-Link (в том числе думаю можно и тот, что на LPC Expresso).
Можно использовать и другой отладчик. Нинай правда будет ли его поддерживать CodeRed, да и лицуха на нее продается вместе с LPC Expresso. Но всегда можно заюзать и другую среду разработки — Keil там, IAR, CooCox или еще какую на эклипсе. Могу предложить собрать CoLink, CoLinkEX или J-Link. Можно и купить их, у китайцев например.
0
Если кому-нибудь поможет, то советую устанавливать IDE LPCXpresso (в моём случае LPCXpresso v4.0.6_152) в папку, в названии которой нет пробелов. Симптомы: при запуске программа ругается на отсутствие «Vendors» и не создаются проекты.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.