LPCXpresso Урок 2. Создание проекта. Классика моргания светодиодом.
В этом уроке рассмотрены базовые сведения по созданию своего проекта в среде от CodeRed с использованием CMSIS. Учимся мигать светодиодом самостоятельно.
Урок является частью учебного курса.
Примеры это конечно хорошо, но надо же и самим что-то писать.
Создание проекта
Всё в той же панели Quickstart Panel выбираем New project... и в нем проект на C для NXP.
Спросите «Почему не C++ ?» Что ж. Ответа тут два: «А в халявной версии С++ не поддерживается» и естественно «для наших целей достаточно С».
Далее всё до безобразия просто. Указываем имя проекта (пусть будет blinky) в поле Project name жмем Next>. Выбираем LPC1343, так как пишем для него и снова Next>.
И тут самое главное. Ставим флажок Use CMSIS peripheral header files and initialization code (что такое CMSIS описывал DI HALT). И жмем Finish.
После этих манипуляций у нас будет готовый к запуску проект. Только вот суть его в ожидании в бесконечном цикле. Приступим к наполнению.
Знаток кода
Я уже не представляю среды без «Знатока кода». Без него и в блокноте набирать можно, и среда не нужна. Тут он, правда, числится под именем Content Assist, но не суть важно.
Вызывается знаток кода нажатием клавиш <Ctrl>+<пробел>.
Зачем он нужен? Допустим, вы не помните точного названия функции, но помните первые пару символов. Набираете в окне редактора то, что знаете и нажимаете <Ctrl>+<Space>. И вам будет представлен список всех функций и переменных, с описанием их типов, и define’ов начинающихся с данной последовательности. При этом регистр не имеет значения для знатока кода (но не для компилятора).
Можете полистать список и изучить что в нем есть. Посмотреть тип параметров для функции, или просто выбрать нужный вам элемент и нажать <Enter>. Выбранное имя будет подставлено в окне редактирования.
Если же вариант завершения для набираемой последовательности только один, то он будет подставлен сразу, без окна выбора.
Всё это удобно и для быстрого набора. Что бы ни набирать длинное имя функции полностью, с риском опечататься, можете воспользоваться знатоком кода.
Так же знаток кода позволяет просмотреть все поля структур/объектов. Знаток кода вызывается автоматически, с некоторой задержкой, после набора точки ‘.’ или стрелки ‘->’ после имени объекта. Можно, например, получить доступ к полям структуры нулевого порта ввода-вывода:
Вообще средство заслуживает, что бы его использовали. А когда начнете им пользоваться, сами поймете почему.
Набираем код
Редактируем файл main.c до получения следующего:
#ifdef __USE_CMSIS
#include "LPC13xx.h"
#endif
// TODO: insert other include files here
// TODO: insert other definitions and declarations here
void delay_ms(int ms) {
while(ms--) {
volatile int i = 5000;
while(i--);
}
}
int main(void) {
// TODO: insert code here
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); // подаем такты на порт ввода вывода
LPC_GPIO0->DIR |= (1<<7); // настраиваем PIO0.7 на вывод (светодиод LPCXpresso)
while(1) {
LPC_GPIO0->DATA |= (1<<7); // подаем на светодиод единицу
delay_ms(500);
LPC_GPIO0->DATA &= ~(1<<7); // подаем на светодиод нуль
delay_ms(500);
}
return 0 ;
}
Здесь мы написали свою функцию задержки, воспользовались услугами знатока кода, что бы узнать какие есть регистры у порта ввода-вывода и подсмотрели из примера как инициализировать порты правильно. В коде имеются магические константы, но ничего, потерпим. Самого кода-то кот наплакал, да и комментарии имеются.
Собираем проект
Сборка проекта будет запущена автоматически при запуске отладки, но можно её вызвать и самостоятельно, выбрав в Quickstart panel пункт Build ‘blinky’ [Debug] (где blinky это имя проекта). Либо же воспользовавшись кнопкой Build All на тулбаре:
И если всё прошло хорошо, то вы получите результат:
Получаем 2644 байт[1][2] кода и можем приступать к отладке, которая уже была описана.
Ошибки сборки
Если же что-то пошло не так, то компилятор (или линкер) вас обругают. Все ошибки сборки проекта удобно подсвечиваются в окне редактора и дереве проектов:
Так же можно открыть окно ошибок из меню Windows -> Show View -> Other… и в группе General выбрать Problems. Получите окно со сводкой всех ошибок:
Ну а далее всё просто. Смотрите на что ругается и ищите, что вы сделали не так.
В качестве заключения
Надеюсь, что изложенный материал был понятен. В прикрепленном файле содержится мой проект (со всеми результатами компиляции). Но для того что бы вы поняли материал, вам не следует его использовать, а требуется выполнить описанные действия самостоятельно (и желательно несколько раз). Чем лучше вы знаете среду разработки, тем легче сам процесс разработки. И хорошо, что бы вам не приходилось каждый раз, при выполнении какого-либо действия, лезть в шпаркалки.
Файлы: blinky_gpio.zip
[1] Полученный вами размер не обязательно совпадет с приведённым мною. Размер будет зависеть от версии компилятора, библиотек и прочего. Цифра дана лишь в качестве ориентира.
[2] Так же не следует напрямую сравнивать её с размерами кода в AVR и прочих мк. Это разные семейства и разные возможности. Да, на авр аналогичный код занял бы байт 40, Но! При увеличение кода размер выростет так же "экспоненциально". Тут же присутствует много библиотечного кода с инициализацией и настройкой, который свойственен большим проектам, в итоге рости размер будет не столь быстро. Одна и та же программа (по возможностям) на LPC может занимать как больше места на чем на AVR, так и меньше (например работа с картами памяти SD/MMC с файловой системой FAT).