Разработка для STM32F4Discovery с помощью mbed в QtCreator

В последнее время библиотека mbed набирает обороты. Одновременно с этим у замечательного C/C++ IDE от команды Qt средства работы с голым железом достигли нового уровня. Осторожно, много картинок (меньше 1Мб).


Читать дальше

mbed LPC1768 + IAR + CMSIS-DAP (шаблон проекта)



Всем привет!

Думаю что тем, кто среди вас является поклонниками IAR и у кого внезапно завалялся mbed LPC1768 (он же mbed обыкновенный), может пригодиться шаблон, который я состряпал и оформил на днях.

Почему рабочий и такой весь распрекрасный mbed может внезапно заваляться? Ну хотя-бы потому, что он, сикут эт ардуинус вульгарис, не поддерживает нормальную отладку из коробки со своим онлайн-компилятором. Именно поэтому он завалялся и у меня, после того, как я с ним наигрался. Что уж поделать — жирую я, привык к нормальной отладке :)

Так вот, относительно недавно у mbed было феерическое обновление прошивки интерфейса, в которую добавили поддержку CMSIS-DAP. Кто следит за событиями и в теме — тот знает. Кто не следит и не в теме — это такой специальный стандарт, разработанный ARM, который описывает универсальный отладчик.
Таким образом, mbed получил возможность полноценно отлаживаться по евойному USB проводочку, что есть очень хорошо. Но бида заключалась в том, что на тот момент, когда я обновил свой mbed и решил испробовать этот функционал, единственной средой, которая поддерживала CMSIS-DAP была среда Keil MDK (кто бы сомневался!). Я далеко не фанат этой среды, но чисто для интереса, поставил ее и решил попробовать. Действительно, отладка работала и делала это очень хорошо. Тем не менее, MDK я удолил, а все попытки узнать что-то про поддержку CMSIS-DAP у IAR приводили ко вполне обоснованным предположениям, что IAR тесно повязан с Segger и такую поддержку реализует не скоро. Если вообще реализует. По крайней мере интернеты были именно такого мнения и настроя.

Но на днях, обновив IAR на относительно последний, я узрел, что чудо свершилось! Поддержка CMSIS-DAP появилась и в IAR. Естественно, я сразу же начал запиливать блинки, который можно было бы отлаживать на mbed в IAR'е. Очень помогло то, что все библиотеки mbed с некоторого времени лежат с открытыми исходниками — это замечательно. Тем не менее, после создания и первичной настройки/нафаршировки проекта, простой блинки не то чтобы отлаживаться, он и компилироваться-то не особо хотел. Вот тут-то и начались грабли.
Проблемы компиляции были решены небольшим допилом mbed'овской либы. Также, либа была немного реструктурирована для упрощения. Был убран либовский CMSIS, ибо в IAR есть возможность подключить встроенный. После этих шаманств дело пошло, блинки загружался и работал нормально. Но вот отлаживаться упорно не хотел.
В результате долгих мудовых рыданий была обнаружена совершенно неочевидная вещь, связанная со скриптом линкера, о которой, походу, никто не в курсе. По всей видимости, это такая специфическая особенность работы связки mbed, IAR и CMSIS-DAP. Дело в том, что если оставить скрипты линкера как у всех, в частности, начало региона ROM в 0x00000000, то программа успешно компилируется, запускается и работает, но вот отлаживаться (именно в IAR'e) не желает — отладка жутко глючит и проц периодически ресетится и валится. Я так и не понял с чем это связно, но мне кажется, что это всяко связано с механизмом защиты кода NXP. Поэтому, ставим начало региона ROM в 0x00000300 (за областью защиты) и радуемся — отладка начинает работать как часы. Вот так.
Было еще несколько разных мелких нюансов, которые я причесал в шаблоне, и которые уже не упомню. Но тем не менее, можете качать на здоровье и пользоваться. Вполне себе мило и работает.

Да. Вот еще что. У IAR'a то-ли такая специфическая реализация CMSIS-DAP, то-ли просто баг на первой версии библиотеки поддержки этого типа отладчиков, то-ли просто какая-то несовместимость с mbed, но просто так, через механизмы отладки, загрузить прошивку в mbed не получается. Вообще никак. Загрузка только ручками на диск mbed, как обычно.
На самом деле это не сильно большая проблема, т.к. решается она просто — в свойствах проекта задается команда автоматического копирования исполняшки на диск mbed после сборки, а в свойствах отладки ставится галка, что загрузку производить не надо. Вот и все. Процедура работы при этом такая: собираем исполняшку (она автоматически грузится на диск mbed), жмем на mbed кнопу reset (исполняшка шьется в контроллер), жмем отладку в IAR, отлаживаем. В общем-то, не сильно много неудобств. Но я на всякий случай написал в суппорт mbed об этой шняге — посмотрим, что они ответят.