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 об этой шняге — посмотрим, что они ответят.
Файлы в топике: IAR_mbed_LPC1768_v1.zip

Комментарии (14)

RSS свернуть / развернуть
Я далеко не фанат этой среды
А чем она не нравится?
0
  • avatar
  • Vga
  • 06 июня 2013, 10:54
Не нравится.
0
Но можешь чуть подробнее, что именно не нравится? Мне, например, не особо обе среды нравятся, хотя кейл я нахожу чуть лучше — у него лучше функциональность редактора кода.
0
Ну просто не нравится. Смотрю я на него, и не нравится он мне. Можно считать это моими тараканами :) А может, я просто привык к IAR. Тем более, что и для STM8, и для MSP430, и для 8051 я тоже пишу в IAR.
+1
Vga, как только этот мудрый человек скажет, что именно ему не нравится в Keil, тут развернется такая полемика ;)
+5
В том числе. Холивары нам тут совершенно ник чему :)
0
Это да. Хотя холивар я не хочу разжигать, как ни странно — просто любопытно. Но и избежать этого может оказаться проблематично)
0
Няшненько.
А никому мбед не нужен? 20 баксов+доставка. У меня все равно без дела валяется
0
Автору — он во вкус вошел ))
0
А че, я б вду… взял, в смысле. Окромя того, что это mbed (что кому-то может нравиться, а кому-то и нет), это еще и просто хорошая мини-борда с хорошим кристаллом.
0
Надо? Могу оформить.
0
Надо, надо. Сколько в сумме получится? И вообще, давайте тогда дальше спишемся по мылу, тут все-таки не место для такого оффтопа ;)
Мыло мое написано тут: darksimpson.com/
0
… с какой версии ИАР появился CMSIS-DAP?
0
Что-то типа с 6.50, вроде как…
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.