Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расширенное использование IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
grisha_scorpion
Имеется следующая задача: собрать проект при котором требуется к формируемому бинарному файлу добавить в конец заголовок из 256 байт. Причем в заголовок требуется поместить инфу формируемую при сборке(дата сборки, время сборки, размер и тд). Так же в заголовок надо поместить инфу из двух файлов version.inf и device.inf То есть на выходе будем иметь следующий файл ИТОГ.bin = file.bin + заголовок. Посоветуйте как это реализовать в IARе, чтоб при выполнении make у меня автоматом всё формировалось.
megajohn
попробовать Pre- and Post-build
http://supp.iar.com/Support/?note=99436&from=note+28924
grisha_scorpion
Цитата(megajohn @ Oct 9 2013, 14:12) *
попробовать Pre- and Post-build
http://supp.iar.com/Support/?note=99436&from=note+28924

Посмотрел. Спасибо.Я так понял нужно будет использовать bat файл, в котором определить последовательность действий:
- запуск еще одной программы, которая будет из исходного бинарного файла делать расширенный с заголовком.

А как всё таки передавать такие данные как __DATE__ ,__TIME__ в программу?

В Post-build command line указать ссылку на bat файл, а в bat файле прописать вот так(proga.exe __DATE__ __TIME__)?
megajohn
__TIME__ это компиляторное служебное слово и в BAT думаю не не пройдет =)
я бы разместил __DATE__ и __TIME__ по фиксированному адресу в флеши ( иар это позволяет )
и мелкая утилитка, которая и формирует заголовок исходя из размера и вставляет __DATE__ и __TIME__ из прошивы
grisha_scorpion
Цитата(megajohn @ Oct 9 2013, 15:54) *
__TIME__ это компиляторное служебное слово и в BAT думаю не не пройдет =)
я бы разместил __DATE__ и __TIME__ по фиксированному адресу в флеши ( иар это позволяет )
и мелкая утилитка, которая и формирует заголовок исходя из размера и вставляет __DATE__ и __TIME__ из прошивы

А если сделать вот так:
В IARe в Post-build command line указать: proga.exe __DATE__ __TIME__
Так тоже не пройдет?
grisha_scorpion
Кто подскажет как внешней программе передать данные о времени и дате сборки проекта в IAR?
SSerge
Цитата(grisha_scorpion @ Oct 9 2013, 22:38) *
Кто подскажет как внешней программе передать данные о времени и дате сборки проекта в IAR?

Судя по предыдущим сообщениям Вы свою проблему почти решили.
Нужный блок данных формировать как константные данные в отдельном с-файле, размещать их в отдельной секции и объяснить линкеру что эту секцию следует разместить после всех остальных.

Осталось только прочитать раздел "Using pre-build actions for time stamping" из файла EWARM_IDEGuide.ENU.pdf, чтобы дата и время всегда были текущими, а не из предыдущей компиляции.

Данные из другого файла можно преобразовать в сишный текст скриптом или программами из набора srecord и вставить с помощью #include.
grisha_scorpion
Цитата(SSerge @ Oct 9 2013, 19:36) *
Судя по предыдущим сообщениям Вы свою проблему почти решили.
Нужный блок данных формировать как константные данные в отдельном с-файле, размещать их в отдельной секции и объяснить линкеру что эту секцию следует разместить после всех остальных.

Осталось только прочитать раздел "Using pre-build actions for time stamping" из файла EWARM_IDEGuide.ENU.pdf, чтобы дата и время всегда были текущими, а не из предыдущей компиляции.

Данные из другого файла можно преобразовать в сишный текст скриптом или программами из набора srecord и вставить с помощью #include.

Как указать в icf файле чтоб моя секция разместилась в конце бинарника? Именно в конце бинарника, а не в конце региона.
V_N
Вот здесь все написано http://microsin.ru/content/view/1141/44/
SSerge
Цитата(grisha_scorpion @ Oct 10 2013, 14:46) *
Как указать в icf файле чтоб моя секция разместилась в конце бинарника? Именно в конце бинарника, а не в конце региона.

Простейший способ
place in ROM_region { readonly, last section My_footer};

в коде нужно будет указать размещение
#pragma location = "My_footer"
или через @"My_footer"

Если добавить ещё и #pragma section = "My_footer"
то можно будет получить указатель на начало секции __segment_begin("My_footer")

Мне ещё нужно было выравнивание на границу 256 байт, поэтому немного сложнее:
в коде
Код
#pragma section = "My_footer"
#pragma location = "My_footer"
//#pragma data_alignment=256
const char device_id_string[] = "device_id_string";
char * ggg = (char*)__segment_begin("My_footer");

в icf файле
Код
place in ROM_region   { last block ggg with alignment = 256 { section  My_footer }, readonly};

в доке EWARM_DevelopmentGuide.ENU.pdf это называется "extended-selector" и "inline-block-def"
grisha_scorpion
Цитата(V_N @ Oct 10 2013, 12:26) *
Вот здесь все написано http://microsin.ru/content/view/1141/44/

Спасибо очень познавательно. А как можно реализовать подобное, но еще добавить размер полученного бинарного файла(прошивки)?
grisha_scorpion
Цитата(SSerge @ Oct 10 2013, 12:49) *
Простейший способ
place in ROM_region { readonly, last section My_footer};

Я так понял это будет работать в случае если: initialize by copy { readwrite }

Но в моем случае(initialize by copy { readonly, readwrite }) ваша реализация ( place in ROM_region { readonly, last section VERSION}; ) не работает.
kolobok0
Цитата(grisha_scorpion @ Oct 9 2013, 19:38) *
Кто подскажет как внешней программе передать данные о времени и дате сборки проекта в IAR?


у вас пост билд отрабатывает на момент окончания сборки(сразу после неё).
строковые команды
date /T
time /T

спасут отца русской демократии.
grisha_scorpion
Цитата(kolobok0 @ Oct 11 2013, 14:54) *
у вас пост билд отрабатывает на момент окончания сборки(сразу после неё).
строковые команды
date /T
time /T

спасут отца русской демократии.

можно как то подробней расписать ваше сказанное?
KRS
Цитата(grisha_scorpion @ Oct 15 2013, 19:37) *
можно как то подробней расписать ваше сказанное?

куда уж подробнее то, это стандартные cmd команды...
(только date может конфликтовать с mingw)
kolobok0
Цитата(grisha_scorpion @ Oct 15 2013, 19:37) *
можно как то подробней расписать ваше сказанное?


Насколько я понял из постов, Вам необходимо получить на этапе компиляции дату и время для вставки в полученный бинарь.
(по кайней мере Ваш вопрос: "как внешней программе передать данные о времени и дате сборки проекта в IAR?")

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

Можно и пре-билдом. Сфорировать ответы данных утилит с помощью конвеера в каждый свой маленький файлик, а из сырцов инклюдами заюзать это значение.

Или ещё просче. Если сформировать из командной строки строки типа
#define <ваша метка времени> __TIME__
#define <ваша метка даты> __DATE__

то думаю вставив такой файлик через инклюд, и заюзав ваши метки, вы получите время и дату создания этого внешнего файлика, т.е. дату и время отработки пре-билда, т.е. время компиляции...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.