yakuzaa 0 7 марта, 2011 Опубликовано 7 марта, 2011 · Жалоба Привет всем! Есть девайс на STM32, обновление прошивки происходит с SD карты. Обновляется бинарником, сгенерированными ИАРом. Как в бинарник включить в начало какое-нибудь слово (или дату компиляции прошивки), которое было-бы для моего девайса уникальным? спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 8 марта, 2011 Опубликовано 8 марта, 2011 · Жалоба Может стоит уже за художественное цитирование документации и даташитов плату брать? :rolleyes: Открываем файл x:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\doc\EWARM_DebuggingGuide.ENU.pdf и ищем раздел Descriptions of predefined preprocessor symbols (стр.346). Читаем там про __BUILD_NUMBER__, __DATE__ и __TIME__. Далее открываем x:\Program Files\IAR Systems\Embedded Workbench 6.0\arm\doc\EWARM_IDEGuide.ENU.pdf на стр.44 и читаем. USING PRE- AND POST-BUILD ACTIONS If necessary, you can specify pre-build and post-build actions that you want to occur before or after the build. The Build Actions dialog box—available from the Project menu—lets you specify the actions required. For detailed information about the Build Actions dialog box, see Build actions options, page 189. Using pre-build actions for time stamping You can use pre-build actions to embed a time stamp for the build in the resulting binary file. Follow these steps: 1 Create a dedicated time stamp file, for example, timestamp.c and add it to your project. 2 In this source file, use the preprocessor macros __TIME__ and __DATE__ to initialize a string variable. 3 Choose Project>Options>Build Actions to open the Build Actions dialog box. 4 In the Pre-build command line text field, specify for example this pre-build action: "touch $PROJ_DIR$\timestamp.c" You can use the open source command line utility touch for this purpose or any other suitable utility which updates the modification time of the source file. 5 If the project is not entirely up-to-date, the next time you use the Make command, the pre-build action will be invoked before the regular build process. Then the regular build process must always recompile timestamp.c and the correct timestamp will end up in the binary file. If the project already is up-to-date, the pre-build action will not be invoked. This means that nothing is built, and the binary file still contains the timestamp for when it was last built. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 8 марта, 2011 Опубликовано 8 марта, 2011 · Жалоба Привет всем! Есть девайс на STM32, обновление прошивки происходит с SD карты. Обновляется бинарником, сгенерированными ИАРом. Как в бинарник включить в начало какое-нибудь слово (или дату компиляции прошивки), которое было-бы для моего девайса уникальным? спасибо Я устанавливаю все нужные константы после таблицы векторов: В файле cstartup.s /******************************************************************************* Exception vectors & startup code *******************************************************************************/ #define ASSEMBLER_INCLUDE #include "app_cfg.h" MODULE ?cstartup SECTION IRQ_STACK:DATA:NOROOT(2) SECTION FIQ_STACK:DATA:NOROOT(2) SECTION SVC_STACK:DATA:NOROOT(2) SECTION ABT_STACK:DATA:NOROOT(2) SECTION UND_STACK:DATA:NOROOT(2) SECTION C_STACK:DATA:NOROOT(3) /******************************************************************************* Def's *******************************************************************************/ /* Mode, correspords to bits 0-5 in CPSR */ #define ARM_MODE_BITS 0x1F #define ARM_MODE_USR 0x10 #define ARM_MODE_FIQ 0x11 #define ARM_MODE_IRQ 0x12 #define ARM_MODE_SVC 0x13 #define ARM_MODE_ABT 0x17 #define ARM_MODE_UND 0x1B #define ARM_MODE_SYS 0x1F /* Irq's bits in CPSR */ #define ARM_CPSR_I_DIS 0x80 #define ARM_CPSR_F_DIS 0x40 /******************************************************************************* *******************************************************************************/ SECTION .vectors:CODE:NOROOT(2) PUBLIC __program_start PUBLIC __sw_version EXTERN AT91_CPU_UndefHandler EXTERN AT91_CPU_SWIHandler EXTERN AT91_CPU_PREFHandler EXTERN AT91_CPU_DATAHandler EXTERN AT91_CPU_FIQHandler CODE32 /* ARM mode */ /* Vectors */ /* CPU */ __program_start: LDR PC, = __cstartup /* Branch to low level init code */ LDR PC, __cpu_undef_handler /* Branch to undefined instruction handler */ LDR PC, __cpu_swi_handler /* Branch to software interrupt handler */ LDR PC, __cpu_pref_handler /* Branch to prefetch handler */ LDR PC, __cpu_data_handler /* Branch to data abort handler */ LDR PC, = __cstartup /* Branch to startup code - reserved vector */ LDR PC, = __irq_handler /* Branch to IRQ handler */ LDR PC, __cpu_fiq_handler /* Branch to FIQ handler */ __cpu_undef_handler: DCD AT91_CPU_UndefHandler __cpu_swi_handler: DCD AT91_CPU_SWIHandler __cpu_pref_handler: DCD AT91_CPU_PREFHandler __cpu_data_handler: DCD AT91_CPU_DATAHandler __cpu_fiq_handler: DCD AT91_CPU_FIQHandler /******************************************************************************* Application version. Address = __programm_start + (13 * 4) = 52 *******************************************************************************/ __sw_version: DCD APP_CFG_SW_VERSION __sw_name: DCD APP_CFG_SW_NAME /******************************************************************************* Handles incoming interrupt requests by branching to the corresponding handler, as defined in the AIC. Supports interrupt nesting. *******************************************************************************/ __irq_handler: ...................... ...................... ...................... В файле конфигурации приложения: #ifndef APP_CFG_H #define APP_CFG_H #include <ioat91sam7s64.h> /* Link CPU */ /******************************************************************************* Configs *******************************************************************************/ /* Board version */ #define APP_CFG_BOARD_VERSION 2 /* This software version */ #define APP_CFG_SW_VERSION 0x00110210 /* Year, Month, Day */ /* This software name */ #define APP_CFG_SW_NAME "My Device" ...................... ...................... ...................... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 8 марта, 2011 Опубликовано 8 марта, 2011 · Жалоба А еще неплохо прочитать раздел 30.2 Reference Manual на STM32. Про Unique Device ID. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба А еще неплохо прочитать раздел 30.2 Reference Manual на STM32. Про Unique Device ID. Причем здесь ID-шник чипа? я говорю про "магический" нумбер, записываемый в файл-бинарник при компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 9 марта, 2011 Опубликовано 9 марта, 2011 · Жалоба Как в бинарник включить в начало какое-нибудь слово (или дату компиляции прошивки), которое было-бы для моего девайса уникальным? Я вас неправильно понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yakuzaa 0 23 марта, 2011 Опубликовано 23 марта, 2011 · Жалоба Я вас неправильно понял? немного да... уникальным для данной модели устройства. Впрочем проблемку решил по простецки: добавляю вначало бинарника слово *TIFLO*, а загрузчик проверяет бинарник на наличие этого слова в бинарнике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KSN 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба 1. А есть способ во время компиляции выводить в окно сообщений компилятора значения __BUILD_NUMBER__, __DATE__ и __TIME__? 2. Подскажите документ, в котором описана работа с "PRE- AND POST-BUILD ACTIONS": команды, синтаксис и т.п. Может быть есть примеры, которые можно принять на вооружение. У IAR-а написано, что есть такой инструмент, а как им пользоваться - не нашел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба 1. А есть способ во время компиляции выводить в окно сообщений компилятора значения __BUILD_NUMBER__, __DATE__ и __TIME__? 2. Подскажите документ, в котором описана работа с "PRE- AND POST-BUILD ACTIONS": команды, синтаксис и т.п. Может быть есть примеры, которые можно принять на вооружение. У IAR-а написано, что есть такой инструмент, а как им пользоваться - не нашел. 1. У IAR есть расширение: директива препроцессора #warning, с её помощью можно выдавать сообщения. 2. arm/doc/EWARM_IDEGuide.ENU.pdf не менее полезны также EWARM_DevelopmentGuide.ENU.pdf EWARM_DebuggingGuide.ENU.pdf Если пользуетесь системой контроля версий, то можно возложить эти задачи на неё. SVN, например, умеет выполнять подстановку ключевых слов, заменяя $Date$ на дату а $Revision$ на номер ревизии. Есть специальная утилита для этого, её можно или запускать как PrebuildAction или поручить эту работу самой SVN. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба SVN, например, умеет выполнять подстановку ключевых слов, заменяя $Date$ на дату а $Revision$ на номер ревизии. Есть специальная утилита для этого, её можно или запускать как PrebuildAction или поручить эту работу самой SVN. Можно подробней об этом? Как называется утилита? И знаете ли вы что-то подобное для GIT, я уже пару лет не использую SVN. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KSN 0 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба 1. У IAR есть расширение: директива препроцессора #warning, с её помощью можно выдавать сообщения. Сейчас и пользуюсь #warning, но в нем надо явно указывать то, что хочу выводит. А хочу вроде такого: #define FIRMWARE "1.2.3.4" #warning FIRMWARE и чтобы выводилось 1.2.3.4, а не FIRMWARE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 8 февраля, 2013 Опубликовано 8 февраля, 2013 · Жалоба Можно подробней об этом? Как называется утилита? И знаете ли вы что-то подобное для GIT, я уже пару лет не использую SVN. Утилита называется SubWCRev, входит в состав TortoiseSVN. Для git вроде бы полагается использовать git describe. Кстати, в SVN приятно то, что код ревизии - это просто число, причём оно со временем только увеличивается. Это в отличие от git. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться