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

 
 
 
Reply to this topicStart new topic
> Как включить версию прошивки в бинарник?
Ivan Kuznetzov
сообщение Mar 7 2011, 21:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



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

спасибо


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 8 2011, 01:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Может стоит уже за художественное цитирование документации и даташитов плату брать? rolleyes.gif Открываем файл
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.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Mar 8 2011, 04:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Ivan Kuznetzov @ Mar 8 2011, 04:22) *
Привет всем! Есть девайс на 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"
......................
......................
......................


--------------------
Go to the top of the page
 
+Quote Post
Nixon
сообщение Mar 8 2011, 07:54
Сообщение #4


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



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


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Mar 9 2011, 17:05
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Цитата(Nixon @ Mar 8 2011, 12:54) *
А еще неплохо прочитать раздел 30.2 Reference Manual на STM32. Про Unique Device ID.

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


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
Nixon
сообщение Mar 9 2011, 20:05
Сообщение #6


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Цитата(Ivan Kuznetzov @ Mar 7 2011, 23:22) *
Как в бинарник включить в начало какое-нибудь слово (или дату компиляции прошивки), которое было-бы для моего девайса уникальным?

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


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Ivan Kuznetzov
сообщение Mar 23 2011, 16:04
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798



Цитата(Nixon @ Mar 10 2011, 01:05) *
Я вас неправильно понял?

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


--------------------
Разработчик
Go to the top of the page
 
+Quote Post
KSN
сообщение Feb 8 2013, 04:36
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



1. А есть способ во время компиляции выводить в окно сообщений компилятора значения __BUILD_NUMBER__, __DATE__ и __TIME__?
2. Подскажите документ, в котором описана работа с "PRE- AND POST-BUILD ACTIONS": команды, синтаксис и т.п. Может быть есть примеры, которые можно принять на вооружение. У IAR-а написано, что есть такой инструмент, а как им пользоваться - не нашел.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Feb 8 2013, 09:05
Сообщение #9


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(KSN @ Feb 8 2013, 11:36) *
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.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
uriy
сообщение Feb 8 2013, 10:07
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
SVN, например, умеет выполнять подстановку ключевых слов, заменяя $Date$ на дату а $Revision$ на номер ревизии.
Есть специальная утилита для этого, её можно или запускать как PrebuildAction или поручить эту работу самой SVN.
Можно подробней об этом? Как называется утилита? И знаете ли вы что-то подобное для GIT, я уже пару лет не использую SVN.
Go to the top of the page
 
+Quote Post
KSN
сообщение Feb 8 2013, 11:01
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Цитата(SSerge @ Feb 8 2013, 16:05) *
1. У IAR есть расширение: директива препроцессора #warning, с её помощью можно выдавать сообщения.

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

и чтобы выводилось 1.2.3.4, а не FIRMWARE
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 8 2013, 11:03
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(uriy @ Feb 8 2013, 14:07) *
Можно подробней об этом? Как называется утилита? И знаете ли вы что-то подобное для GIT, я уже пару лет не использую SVN.

Утилита называется SubWCRev, входит в состав TortoiseSVN.
Для git вроде бы полагается использовать git describe.
Кстати, в SVN приятно то, что код ревизии - это просто число, причём оно со временем только увеличивается. Это в отличие от git.
Go to the top of the page
 
+Quote Post

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

 


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


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