Перейти к содержанию
    

Как включить версию прошивки в бинарник?

Привет всем! Есть девайс на STM32, обновление прошивки происходит с SD карты. Обновляется бинарником, сгенерированными ИАРом. Как в бинарник включить в начало какое-нибудь слово (или дату компиляции прошивки), которое было-бы для моего девайса уникальным?

 

спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может стоит уже за художественное цитирование документации и даташитов плату брать? :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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет всем! Есть девайс на 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"
......................
......................
......................

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще неплохо прочитать раздел 30.2 Reference Manual на STM32. Про Unique Device ID.

Причем здесь ID-шник чипа? я говорю про "магический" нумбер, записываемый в файл-бинарник при компиляции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как в бинарник включить в начало какое-нибудь слово (или дату компиляции прошивки), которое было-бы для моего девайса уникальным?

Я вас неправильно понял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вас неправильно понял?

немного да... уникальным для данной модели устройства.

Впрочем проблемку решил по простецки: добавляю вначало бинарника слово *TIFLO*, а загрузчик проверяет бинарник на наличие этого слова в бинарнике.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. А есть способ во время компиляции выводить в окно сообщений компилятора значения __BUILD_NUMBER__, __DATE__ и __TIME__?

2. Подскажите документ, в котором описана работа с "PRE- AND POST-BUILD ACTIONS": команды, синтаксис и т.п. Может быть есть примеры, которые можно принять на вооружение. У IAR-а написано, что есть такой инструмент, а как им пользоваться - не нашел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SVN, например, умеет выполнять подстановку ключевых слов, заменяя $Date$ на дату а $Revision$ на номер ревизии.

Есть специальная утилита для этого, её можно или запускать как PrebuildAction или поручить эту работу самой SVN.

Можно подробней об этом? Как называется утилита? И знаете ли вы что-то подобное для GIT, я уже пару лет не использую SVN.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. У IAR есть расширение: директива препроцессора #warning, с её помощью можно выдавать сообщения.

Сейчас и пользуюсь #warning, но в нем надо явно указывать то, что хочу выводит. А хочу вроде такого:

#define FIRMWARE "1.2.3.4"
#warning FIRMWARE

и чтобы выводилось 1.2.3.4, а не FIRMWARE

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно подробней об этом? Как называется утилита? И знаете ли вы что-то подобное для GIT, я уже пару лет не использую SVN.

Утилита называется SubWCRev, входит в состав TortoiseSVN.

Для git вроде бы полагается использовать git describe.

Кстати, в SVN приятно то, что код ревизии - это просто число, причём оно со временем только увеличивается. Это в отличие от git.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...