На главную, Операционные системы реального времени (ОСРВ)
В этом документе пойдет речь о развертывании пакета ChibiStudio на Windows платформе.
ChibiStudio является готовым пакетом включающем все необходимое для начала разработки Вашего проекта с использованием ChibiOS. Скачать ChibiStudio можно с официального сайта проекта: chibios.org На данный момент актуальная версия (прямая ссылка): ChibiStudio_Windows_Preview21.7z (433.56MB)
После скачивания архив нужно распаковать в удобное для Вас место. Я предпочитаю размещать в корневом каталоге диска, например c:\Chibios\
Для запуска ChibiStudio нужно воспользоваться одним из ярлыков вида «Chibi Studio GCC x.x.lnk» (в данном случае «Chibi Studio GCC 5.4.lnk» или «Chibi Studio GCC 7.0.lnk»). Разница между ними в версии используемого компилятора GCC. После запуска, откроется обычное окно Eclipse
Слева расположена «рабочая область» - Project Explorer. По умолчанию открывается пользовательская рабочая область «workspace_user». Для начала работы с ChibiOs она не очень удобна. Поэтому переключимся на другую рабочую область, с уже подключенными проектами примеров/ Для этого нужно выбрать меню File→Switch Workspace→C:\ChibiStudio\workspace191\ В данном случае будет использоваться версия ChibiOs 19.1.
Окно программы закроется и спустя несколько секунд программа перезапустится с использованием выбранной «рабочей области»:
В окне «Project Explorer» присутствует список проектов примеров работы с ChibiOs под различные микроконтроллеры и отладочные платы.
Теперь можно создать свой проект. Удобно сделать это на базе подходящего примера. Допустим, у нас есть отладочная плата STM32L-DISCOVERY и нас интересует проект с низким энергопотреблением, т.е. с использованием ChibiOs-Nil.
Наш проект создан и размещается в каталоге c:\ChibiStudio\workspace191\ю В принципе, проект готов для компиляции и запуска, но я предпочитаю выполнить еще ряд дополнительных настроек.
Если открыть папку проекта, то мы увидим что ее содержимое несколько отличается от того что отображается в окне «Project Explorer».
В частности, в ней отсутствуют каталоги board и os. Если в «Project Explorer», в проекте, щелкнуть правой кнопкой мыши на папке os и выбрать меню «Properties», то мы увидим что это виртуальная папка:
Т.е. она ссылается на код ChibiOs расположенный в C:\ChibiStudio\chibios191\os
Аналогично, папка board ссылается на C:\ChibiStudio\chibios191\os\hal\boards\ST_STM32L_DISCOVERY на эту же папку ссылается и исходный проект примера и, возможно, другие примеры. Т.е. если мы внесем какие-то изменения в board.c или board.h они отразятся на всех проектах. Поэтому, нужно скопировать содержимое ST_STM32L_DISCOVERY в наш проект, в папку board.
Теперь нужно удалить виртуальную папку board из проекта. Для этого, нажать на ней правой кнопкой мыши и выбрать «Delete». На запрос «Действительно хотите удалить» ответить «Да». Будет удалена только виртуальная папка из нашего проекта. С папкой на которую она ссылается ничего не произойдет!
После удаления виртуальной папки board Еклипс автоматически добавит в проект локальную папку board.
Теперь нужно скорректировать Makefile чтобы при компиляции также использовались наши локальные файлы board.h/board.c. Открыть Makefile и найти следующие строки:
# Imported source files and paths. CHIBIOS := ../../.. CONFDIR := ./cfg BUILDDIR := ./build DEPDIR := ./.dep # Licensing files. include $(CHIBIOS)/os/license/license.mk # Startup files. include $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32l1xx.mk # HAL-OSAL files (optional). include $(CHIBIOS)/os/hal/hal.mk include $(CHIBIOS)/os/hal/ports/STM32/STM32L1xx/platform.mk include $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY/board.mk include $(CHIBIOS)/os/hal/osal/nil/osal.mk # RTOS files (optional). include $(CHIBIOS)/os/nil/nil.mk include $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v7m.mk # Auto-build files in ./source recursively. include $(CHIBIOS)/tools/mk/autobuild.mk # Other files (optional). #include $(CHIBIOS)/test/lib/test.mk #include $(CHIBIOS)/test/nil/nil_test.mk #include $(CHIBIOS)/test/oslib/oslib_test.mk
и заменить выделенные строки на
CHIBIOS := ../../chibios191(т.к. изменился относительный путь к расположению файлов ChibiOs) и
include ./board.mk
Затем открыть файл board.mk
# List of all the board related files. BOARDSRC = $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY/board.c # Required include directories BOARDINC = $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY # Shared variables ALLCSRC += $(BOARDSRC) ALLINC += $(BOARDINC)и отредактировать его следующим образом:
# List of all the board related files. BOARDSRC = ./board/board.c # Required include directories BOARDINC = ./board # Shared variables ALLCSRC += $(BOARDSRC) ALLINC += $(BOARDINC)
Теперь все готово для компиляции и сборки проекта. Для этого можно воспользоваться соответствующей кнопкой на панели инструментов:
Если в проекте будут созданы несколько конфигураций, то можно выбрать нужную воспользовавшись стрелкой справа от кнопки. Запустится процесс сборки проекта. Результат процесса будет отображаться внизу в окне «Console»
В случае успеха, лог будет оканчиваться примерно такими строками:
Linking build/ch.elf Creating build/ch.hex Creating build/ch.bin Creating build/ch.dmp Creating build/ch.list text data bss dec hex filename 4868 0 16384 21252 5304 build/ch.elf Done 11:10:23 Build Finished (took 53s.911ms)
Теперь проект готов к загрузке в микроконтроллер и запуску.
Прежде чем продолжить, нужно убедиться что у нас открыт только наш проект. Конфигурации отладчика запоминаются в проекте и, если открыто несколько проектов, то будут отображаться все конфигурации и есть вероятность отредактировать «не свою». В окне «Project Explorer» просматриваем список проектов и закрываем ненужные (все кроме нашего). Закрыть проект можно щелкнув на нем правой кнопкой мыши и выбрав меню «Close Project».
Затем выбрать пункт «External Tools Configuration…»
Откроется диалоговое окно «External Tools Configuration». В этом окне конфигурируется служба OpenOCD для работы с аппаратным отладчиком. Здесь уже существует несколько конфигураций под различные типы отладчиков. Нас интересует ST-Link. Выбрав конфигурацию под ST-Link, видим следующую картину:
Тут, в качестве конфигурации целевого процессора, указано «$(file_prompt)». Это означает, что при запуске службы будет выдано предложение выбрать файл целевого процессора. Файлы с описанием целевых процессоров находятся в каталоге c:\ChibiStudio\tools\openocd\scripts\target\. Поэтому меняем строку «Arguments» следующим образом (ключ «-f»):
-c "telnet_port 4444" -s "/ChibiStudio/tools/openocd/scripts" -f "/interface/stlink.cfg" -f "/ChibiStudio/tools/openocd/scripts/target/stm32l1.cfg"Теперь можно запустить службу нажатием кнопки Run Если все прошло нормально, то в окне «Console» выйдет лог вида:
Open On-Chip Debugger 0.10.0+dev-00746-g8f518d359 (2019-03-14-17:18) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'. adapter speed: 300 kHz adapter_nsrst_delay: 100 Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD none separate Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections Info : clock speed 300 kHz Info : STLINK V2J25S0 (API v2) VID:PID 0483:3748 Info : Target voltage: 0.000000 Error: target voltage may be too low for reliable debugging Info : stm32l1.cpu: hardware has 6 breakpoints, 4 watchpoints Info : Listening on port 3333 for gdb connections
Если переключиться на Перспективу «Debug», то в окне «Debug» увидим запущенную службу:
Теперь необходимо настроить собственно отладчик оболочки. Для этого, в панели инструментов нужно выбрать пункт «Debug Configuration…» как показано ниже:
Откроется одноименное диалоговое окно. В нем, слева в списке, нужно выбрать тип нужной отладки. В нашем случае - «GDB Hardware Debugging». Щелкнуть на нем правой кнопкой мыши и выбрать «New».
Будет создана новая конфигурация отладчика. Теперь нужно прописать для нее нужные настройки, как показано на скриншотах ниже:
По умолчанию, после старта. отладка начинается с 0-го адреса (с таблицы векторов прерываний). Если нет необходимости в отладке ассемблерного Startup файла, можно настроить чтоб, после запуска, отладчик сразу останавливался на точке входа в функцию main(). Для этого нажно добавить следующие парамеры на закладке Startup:
Не забываем после редактирования параметров нажимать кнопку «Apply»
По окончании конфигурирования, можно запустить процесс отладки нажатием кнопки «Debug» (помним, что служба OpenOCD у нас уже запущена)