реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Отладка проекта с частью данных в EEPROM, Прошивка I²C EEPROM через LPX210x через JTAG?
IgorMarx
сообщение Apr 18 2009, 16:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 18 2009, 20:22
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А какую среду вы используете?

Обычно такие данные складываются в отдельный сегмент/секцию. Потом можно из полученного после сборки файла вытащить эту скецию для прошивки во внешнее пзу. (метод зависит от среды/линкера).
Так же линкеру сообщается что эту секцию прошивать во флешь и грузить в озу не надо.

Как пример можно посмотреть IAR для AVR и как там реализованы константные данные в EEPROM ( их можно получить в виде отдельного HEX файла).

Если потом не использовать переменные в этой секции напярмую, а передавать их адрес специальным функциям можно все свести в один проект.




Да по поводу FlashLoader
если вы используете IAR - там есть framework и примеры flashloaderов.
И вы можете написать свой flashloader, который будет при запуске отладки шить и внтуреннюю флешь и внешнюю... (причем из разных файлов можно). Flashloader у IAR может считать любой файл с компа ( не IAR сообщает лоадеру куда чего шить, а лоадер запрашивает у IAR файл, читает его и пишет куда хочет...)
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Apr 19 2009, 09:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 19 2009, 10:23
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(IgorMarx @ Apr 19 2009, 13:15) *
Осталось только, собственно, сделать как разжёвано во FlashLoaderGuide.pdf. Единственные непонятный вопрос - а найдёт ли flashloader данные, имеющие отношение к директиве do not initialize.

Специально для flash loadera IAR делает файл в формате IAR Simple Code, куда вытаскиваются данные для флеша из соотв. секций.
Вам наверное надо сделать второй файл для EEPROM, можно например в postbuild добавить. Там есть специальная утилита которая из ELF файлов выдергивает секции... В HELP у IAR было, так же можно посмотреть как IAR стандартно spile code для флешлоадера генерит и добавить по аналогии второй файл.

Только что бы 2 файла шил флешлоадер придется фреймворк доработать, он под одни файл заточен. Стандартный флешлоадер пишется очень быстро ( грубо говоря только функцию записи байта во флеш написать)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 20:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016