Настройка Eclipse Mars под STM32

eclipse-800x188Установка и настройка Eclipse под свою плату с нуля.
Скачиваем и устанавливаем последнии версии приведенного ниже списка:

Это базовый набор ПО для работы. Далее несколько плагинов для Eclipse которыми я лично пользуюсь, искать в Marketplace по названию:

  • Eclipse Color Theme – понятно из названия
  • MercurialEclipse – управление репозиториями Hg
  • Embedded Systems Register View – просмотр регистров микроконтроллера

По установки основных компонентов проблем возникнуть не должно, Eclipse устанавливается в режиме разработчика C/C++. Драйверы для вашего дебаггера уже должны быть установлены.

Тонкая настройка Eclipse

Первое что хочется включить – сохранение при компиляции
Preferences -> General -> Workspace – [V] Save automatically before build

Далее если используете темную тему Eclipse:
Preferences -> General -> Appearance – Theme – Dark

И свою цветовую схему:
Preferences -> General -> Appearance -> Color Theme – Zenburn (например)

То предварительно необходимо включить Oomph recorder, т.к. частое явление что после перезапуска слетает цветовая схема на ту, что по умолчанию при включенной теме Dark. Включаем Oomph:
Preferences -> Oomph -> Setup Tasks -> Preference Recorder – [V] Record into
Только после этого устанавливаем тему Dark, а потом идем в Color Theme и ставим свою цветовую схему и применяем. По выходу из настроек Oomph предложит записать их – соглашаемся. Если перезапустить Eclipse через некоторое время настройки прогрузятся и все станет на свои места.

Также можно включить поддержку комментариев doxygen. Она только добавляет небольшое удобство при комментировании, но комментарии как в IntelliSense потом не отображаются в сплывающих сообщениях 😦 (boot to the dev.head!)
Preferences -> C/C++ -> Editor – Documentation tool comments – Doxygen

Автоматический запуск Debug конфигурации
Preferences -> Run/Debug -> Launching – Launch Operation – [V] Always launch the previously launched application

Создаем проект

File -> New -> C project
Здесь выбираем расположение и имя проекта. В окне ProjectType выбираем соответствующую серию процессоров Executable – STM32Fxxx. Toolchains – Cross ARM GCC
Жмем далее и вводим информацию о выбранном чипе, например я выбрал STM32F072CB 128kB flash & 16kB RAM – все эти данные вводим в таблицу
Content – empty – это нас не интересует
System calls – по своему усмотрению, я не использую – freestanding
Trace output – аналогично, если используете трассировку через SWO то включаем
Чекбоксы по своему желанию.
setupcpu
Далее предлагают выбрать названия для папок, потом конфигурации Debug/Release, и в конце нам предлагают указать Toolchain path (arm-none-eabi-gcc), если путь автоматически не заполнен, то надо указать вручную, чтото вроде
“C:/Program Files (x86)/GNU Tools ARM Embedded/<version>/bin”

hierarchyПолучаем перед глазами проект с поддержкой Trace для stm studio, stdperiphlib и системные cmsis файлы. Я лично не фанат отдельного распихивания .h и .c  файлов, поэтому все родное старательно объединяется в единые папки и получается такой базовый набор:

После такого перетасовывания естественно все ссылки сбиваются и необходимо заного настроить проект, заодно и разберемся как это делается вообще. Также бывает  что *.c и *.h файлы добавленные в проект распознаются как для языка c++, от этого ломается процесс компиляции. Чтобы это исправить, в Project-> Properties -> C/C++ General -> File Types – Use project settings и добавьте файлы *.c и *.h как C source / C header file. Либо в глобальных настройках workspace, но тогда это повлияет на все проекты.

Потом заходим в настройки папки code, например, которая раньше называлась src, в C/C++ Build убираем галочку Exclude resource from build, это позволяет компилировать все содержимое папки, и над ней появляется значек “c” как на папке system. Пропишем пути к библиотекам, в настройках проекта C/C++ General -> Path and Symbols – > Includes
Вверху Configuration – All configurations, теперь можно менять пути. Удаляем все родные и добавляем как на картинке для всех Languages, приминительно к моим названиям, для ваших названий подставьте соответственно.includeВо вкладке Symbols указываются дефайны используемые при компиляции. Вкладка Library Path должна содержать папку со скриптами *.ld, обычно это папка ldscripts. Во вкладке Source Location указываем все корневые папки где будут находится исходные коды, в своем случае я добавил еще папку code.
После этих операций проект готов к компиляции, но осталось еще выстрелить себе в ногу.
Все настройки компилятора находятся в настройках проекта -> C/C++ Build -> Settings. Стоит учесть что все пути Include добавляются сюда автоматически из настроек Paths and Symbols.

Попробуйте запустить компиляцию Ctrl+B. Проект должен собраться без ошибок.

Стреляем в ногу Отладка и прошивка

debugconfig

Заходим в настройки Debug configurations и создаем новую настройку в пункте GDB OpenOCD Debugging под названием Demo Compile-Debug

Вкладка Main:
В поле C/C++ Application жмем кнопку Search Project и выбираем наш единственный скомпилированный “xxx.elf” файл, в итоге получится чтото вроде “Debug/Demo.elf”
Build configuration – use active
[V] Enable auto build

Вкладка Debugger:
Тут все немного сложнее становится, необходимо указать пути к типу дебаггера(interface) и к процессору (target). Конфиг файлы находятся по пути %Program Files%\Eclipse\OpenOCD\<version>\scripts
Первое что рекомендую сделать – немного подшаманить stm32f0x.cfg:
Закомментировать все строки adapter_khz 1000 добавив вначале #. Это позволит из eclipse настроить скорость передачи данных.
Допустим я использую st-link v2 и процессор stm32f072, интерфейс SWD без пина RST, в настройках пишу:

-f interface/stlink-v2.cfg -f target/stm32f0x.cfg -c “adapter_khz 2000;set WORKAREASIZE 0x2000;reset_config none separate”

Остальное оставляю по умолчанию.

Вкладка Startup:
[V] Initial Reset
Пустое окно комманд
[ ] Enable ARM semihosting – я не использую
[V] Load symbols
[V] Use project binary
[V] Load executable
[V] Use project binary
[V] Set breakpoint at “main”
[V] Continue

Вкладка Common
[V] Save as Shared file – сохранить настройку отладчика в папке проекта. После этого он появится в Project explorer

Apply!
Отладчик подготовлен. Теперь его можно нажать Debug и проект запустится. Это что касается запуска дебага с предварительной прошивкой процессора, а что если надо отладить уже работающий процессор?

Отладка без прошивки и без сброса

Возвращаемся в Debug configurations и копируем только что созданный Demo Compile-Debug, переименовав в Demo Run-Debug

Вкладка Startup:
Убираем галочку Initial Reset и в окне комманд пишем:
monitor halt
stepi
Убираем галочку с Load executable
Убираем Pre-run/Restart reset
Убираем Set breakpoint at

Тадам! При запуске отладки данным способом процессор не будет прошиваться и сбрасываться, что позволит поймать даже самые трудноуловимые баги 🙂 Однако elf файл должен совпадать с тем софтом что зашит в чип, иначе могут не совпасть адреса переменных.

Прошивка без отладки

extoolcongТеперь самое интересное – как прошить без запуска отладчика. Для этого нам понадобяться External Tools, заходим в External Tools Configuration – создаем новую конфигурацию. Например Demo_Run и пишем:
Location: ${openocd_path}/${openocd_executable}
Working Directory -> Browse Workspace -> выбираем свой проект, у меня Demo, в итоге получилось ${workspace_loc:/Demo}
Arguments: с небольшими изменениями настройка запуска прошиватора:

-f interface/stlink-v2.cfg -f target/stm32f0x.cfg -c “adapter_khz 4000;init; reset init; flash write_image erase Debug/Demo.hex; reset run; shutdown;”

Жирным шрифтом указан путь к файлу прошивки (hex или elf, не важно), укажите свое название. (товарищи, кто знает как указывать эти файлы через Variables чтоб не надо было каждый раз создавать конфигурацию под каждый проект?)

Во вкладке Build указываем Build before launch – Specific project – выберите ваш проект

Во вкладке Common – Save as – Shared file -> Browse -> выберите текущий проект (\Demo)
Display in favorites menu ставим галочку.

Готово! Теперь если нажать на список External Tools, там будет находится Debug_Run. Жмем, компилируется, прошивается, запускается!

Hints ‘n Tips

Если парсер ругается Error’ами на то что не найдены какиенибудь дефайны или переменные, но проект компилируется и работает успешно, попробуйте провести переиндексацию проекта – ПКМ по папке проекта -> Index -> Rebuild

Очистку проекта можно также выполнить через контекстное меню -> Clean project

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s