|
Отладка проекта с частью данных в EEPROM, Прошивка I²C EEPROM через LPX210x через JTAG? |
|
|
|
Apr 18 2009, 16:43
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
Всем салют! Есть нетривиальная задача: существенная часть RO данных выгружена во внешнюю память. Для справки, это псевдографические меню и строковые литералы (типа const char []), которые юзер видит, когда коннектиться к железяке через терминал.
Как отлаживать такой проект? Напрашивается сама собой идея: делается отдельный проект, в котором компилируются все строки, потом программатором или бутлоадером (я использую второй вариант) заливается в EPROM, затем в основном проекте пишется хедер файл, в котором дефайнятся адреса, куда эти строки легли в EPROM.
Неудобно. Много ручной работы.
Можно вставить данные в основной проект и написать на дельфях или плюсах примочку, которая после сборки, но перед дебагом, будет парсить линкеровский map и загружать из параллельно сформированного HEXа через бутлоадер эти данные, а уж потом будет запущен дебаггер, который "в подготовленной почве" запустит отладку. Эта идея самая привлекательная, но есть одна неприятность - дебаггер "видит" эти лишние данные и пытается их тоже как-то грузить через JTAG, в результате чего имеется масса предупреждений. причём в стандартном FLASH лоадере прописано ограничение на адреса 0000-7FFF, но похоже это загрузчик игнорирует.
Третий путь (самый правильный и долгий) - написать свой FLASH лоадер, но я не нашёл пока нигде Jlink'овскую dll и соответствующий хедер. Лицензия у сеггера стоит 495 баков за SDK, и я тоже пока как-то не совсем готов выложить эти денежки.
Какие идеи?
Сообщение отредактировал IgorMarx - Apr 18 2009, 17:39
|
|
|
|
|
 |
Ответов
|
Apr 19 2009, 09:15
|

Участник

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268

|
KRS, спасибо за подсказку. Действительно, это IAR, и я обнаружил в папке установки всё необходимое для написания flash loader под эту задачу, и покупать SDK не придётся (львиную долю работы выполнил сам IAR). А вот с опциями линкера пока не совсем понятно. Конкретной директивы вроде "не грузить в озу или флэш" я не нашёл. Однако путь похоже есть. Данные поместил в отдельную секцию (.map файл):
define region ROM_region = mem:[from 0x00000044 to 0x00006FFF]; define region EXTFLASH_region = mem:[from 0x00008000 to 0x00017FFF]; place in EXTFLASH_region { section EXT_FLASH};
испоьзование (.c файл):
#pragma location="EXT_FLASH" const char foo[] ="foo"; // size up to 64 kb
Линкер генерирует данные для инициализации секции EXT_FLASH и пытается разместить их в ROM (не умещается), если только не использовать директиву
do not initialize { section EXT_FLASH};
В последнем случае в генерируемом дополнительном HEX данные есть (что уже хорошо - можно шить бутлоадером, как перед отладкой, так и в релизе), и стандартный flashloader не ругается, что не может загрузить данные в область несуществующую, в общем-то, область 0x00008000.
Осталось только, собственно, сделать как разжёвано во FlashLoaderGuide.pdf. Единственные непонятный вопрос - а найдёт ли flashloader данные, имеющие отношение к директиве do not initialize.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|