CMSIS2000
0.0.7
|
Создание нового проекта происходит путём составления файла CMakeLists.txt.
Настройка готового проекта под микроконтроллер и плату производится путём запуска утилиты CMAKE перед компиляцией проекта c указанием трёх основных параметров-переменных:
Примеры проектов с CMAKE могут быть найдены в директориях :
Рассмотрим пример запуска системы CMAKE в командной строке –
слудуюшая строка:
указывает CMAKE файл с правилами для компиляции под МК ARM
устанавливает марку микроконтроллера
задаёт имя платы
указывает что программа должна быть размещена во FLASH! см. Выбор варианта сборки
устанавливает для CMAKE вариант для генерации файлов. Возможно Вам подойдут варианты:
Дополнительные опции к CMAKE устанавливают тип сборки Релиз/Отладка
Вариант сборки указывается в опцией -DLINKAGE="вариант сборки". Существует три варианта сборки:
FLASH – образ программы располагается во FLASH, программа выполняется из FLASH, секции данных и некоторый код(.text.ram_code) загружаются во внутреннюю RAM
RAM – образ программы располагается во FLASH, секция постоянных данных (.rodata) и некоторый код (.text.rom_code) располагается во FLASH , секции кода и данных загружаются во внутреннюю RAM
ONE_SECT – весь образ программы располагается в виде одной секции, которая располагается по умолчанию во внутренней RAM. Начало секции и длина задаётся, переменными ONE_SEC_START и ONE_SEC_LENGTH.
\сode -DLINKAGE=ONE_SECT -DONE_SEC_START=0xa0400000 -DONE_SEC_LENGTH=0x10000
Каждый вариант сборки порождает свой скрипт сборки (FLASH.ld, ONE.ld, RAM.ld).
устанавливает марку микроконтроллера, создаёт файл mcu_id.h c указанием типа ядра процессора, модели контроллера
устанавливает плату на которой установлен микроконтроллер, ищет в папке bsp файл с именем EA_v1_1 и создаёт файл bsp_board_def.h, в который вставляет строку include "bps_board_EA_v1_1" добавляет опцию -D_HASBSPBRD=1 к компилятору.
Можно указать дополнительные опции сборки для компилятора С. Данный пример задаёт оптимизацию по размеру.
Также поддерживаются переменные на каждый тип языка COMMON_C_FLAGS, COMMON_CXX_FLAGS, COMMON_ASM_FLAGS , и COMMON_LD_FLAGS для сборки.
Указатель стека устанавливается на конец памяти чипа. Для подробной информации См. файл файл линкера и файл запуска на ассемблере.
Переменная STARTAP_INIT_STACK_FILE_H – указывает на файл с настройками размеров стеков, по умолчанию используется startup_lpc_stack_generic.h.in
Убирает -ffunction-sections -fdata-sections из опций компиляции
Режим запуска функции main – это состояние регистр статуса в момент запуска main. Функция main() может быть запущена в различном режиме (USER,SYSTEM,SWI).
определяет значение регистра статуса. По умолчанию задано как MODE_SYS, однако если установлена переменная TARGET_HAS_RTOS, то значение устанавливается в (MODE_SVC|I_BIT|F_BIT), что запрещает прерывания до запуска планировщика. Переменная TARGET_HAS_RTOS устанавливается автоматический в 1 если в корне проекта или на уровень выше или на два уровня выше по директории есть файл "FreeRTOSConfig.h" или "iConfig.h"
Язык cmake – lisp-подобный язык. Переменные устанавливаются с помощью команды set. Регистр команд не важен.
Значение переменной получается с помощью фигурных скобок как в Bash в отличие от круглых скобок в Makefiles. Переменные в CMAKE являются списками то есть могут содержать много элементов.
В CMAKE поддерживает if() else() endif() как в bash. Поддерживаются макросы и функции.
Операция конкатенации производиться следующим образом:
Файл CMakeLists.txt для CMAKE содержит :
Пример файла CMakeLists.txt из Device/NXP/LPC2xxx/templates/empty_main/cmake
Пример файла CMakeLists.txt из Device/NXP/Drivers/Examples/UART/Interrupt/GCC_CMAKE
Для изучающих английский комментарии излишни!
Система создаёт в пути запуска служебные файлы (CMakeCache.txt, Makefile) и директорию CMakeFiles. Директория CMakeFiles используется для сборки и хранения всех промежуточных результатов, таким образом, в пути основных исходников все ''мусорные'' файлы (*.obj, *.o, *.d и т. д.) не создаются.
При создании проекта для CodeBlocks в список целей автоматически включаются все библиотеки и исполняемые файлы. К сожалению при кросс-компиляции для CodeBlock не указывается компилятор, поэтому рекомендую перед изменением компилятора проекта с MinGW на ARM копировать создаваемый проект *.cbp в *2.cbp.