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

 
 
 
Reply to this topicStart new topic
> STM32 - cохранение данных программы в hex-файле по указанному адресу
Sprite
сообщение Aug 1 2018, 03:09
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Доброго времени суток!

Камень: stm32f407. Нужно сохранить информацию о версии прошивки в самом файле прошивки (hex), желательно по указанному адресу, чтобы ее потом можно было извлечь. Возможно ли это?
Информация о версии определяется в тексте программы (на данный момент просто дефайном).

Заранее спасибо!
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Aug 1 2018, 03:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Я вот такую конструкцию использую(Keil):

const char my_date[] = " date:" __DATE__;
const char my_time[] = " time:" __TIME__;
const char my_ver[] = " ver.:3.30";

Этот текст потом можно найти в бинарнике считанном из контроллера.
Go to the top of the page
 
+Quote Post
Sprite
сообщение Aug 1 2018, 04:48
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Цитата(HardEgor @ Aug 1 2018, 10:36) *
Я вот такую конструкцию использую(Keil):

const char my_date[] = " date:" __DATE__;
const char my_time[] = " time:" __TIME__;
const char my_ver[] = " ver.:3.30";

Этот текст потом можно найти в бинарнике считанном из контроллера.

Спасибо!
А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 1 2018, 05:42
Сообщение #4


Гуру
******

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



Цитата(Sprite @ Aug 1 2018, 07:48) *
Спасибо!
А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?

const __attribute__((section(".LOC_DATA"))) char my_date[] = " date:" __DATE__;
и в файле линкера создать секцию по нужному адресу .LOC_DATA Это GCC
У RealView есть __attribute__((at(0xXXXXXXX))); . У других компилеров тоже должно быть что-то подобное
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 1 2018, 07:32
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Sprite @ Aug 1 2018, 07:48) *
А можно уложить эти данные по определенному адресу?

Можно, если прочитать мануал на свой компилятор.
IAR:
__root char const __codeSignature[] @ ".codeSignature" = "версия"; и прописывание в icf-файле в какой регион класть данную секцию .codeSignature
или
__root char const __codeSignature[] @ 0x00ADRESS = "версия";
Но первый вариант лучше.
Go to the top of the page
 
+Quote Post
A.Lex
сообщение Aug 1 2018, 08:11
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 138
Регистрация: 27-12-11
Пользователь №: 69 107



Цитата(Sprite @ Aug 1 2018, 07:48) *
Спасибо!
А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?

Для L151 когда-то делал так (EEPROM):
const uint16_t CalibrTable[10]__attribute__((at(DATA_EEPROM_START_ADDR))) = {0x0582,0x0B04,0x1096,0x1608,0x1B8A,0x210C,0x268E,0x2C10,0x3192,0x3714};
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 1 2018, 08:52
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(A.Lex @ Aug 1 2018, 11:11) *
Для L151 когда-то делал так (EEPROM):

Для L151 или чего другого - без разницы. Вопрос тут не про использованный МК, а про использованный компилятор. Который ТС не озвучил.
Причём тут вообще какой МК???
Go to the top of the page
 
+Quote Post
Sprite
сообщение Aug 2 2018, 03:07
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Цитата(jcxz @ Aug 1 2018, 15:52) *
Для L151 или чего другого - без разницы. Вопрос тут не про использованный МК, а про использованный компилятор. Который ТС не озвучил.

Проект разрабатывается в Keil uVision v5.2
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 2 2018, 07:48
Сообщение #9


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

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Sprite @ Aug 2 2018, 06:07) *
Проект разрабатывается в Keil uVision v5.2

В keil 5 можно можно использовать как минимум три тулчейна: два от ARM (v5 и новый v6) и халявный GCC. В каждом эта "проблема" решается немного по-разному.
Если используется штатный компилятор Keil, то у него очень развитый help, прямо на сайте ARM или встроенный хэлп в keil.
Также эта "проблема", ставшая уже махровым баяном, неоднократно поднималась на этом форуме. Пройдите поиском.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Sprite
сообщение Aug 2 2018, 09:53
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414



Цитата(Forger @ Aug 2 2018, 14:48) *
В keil 5 можно можно использовать как минимум три тулчейна: два от ARM (v5 и новый v6) и халявный GCC. В каждом эта "проблема" решается немного по-разному.
Если используется штатный компилятор Keil, то у него очень развитый help, прямо на сайте ARM или встроенный хэлп в keil.
Также эта "проблема", ставшая уже махровым баяном, неоднократно поднималась на этом форуме. Пройдите поиском.
Спасибо за подробный и развернутый ответ! biggrin.gif

Компилятор ARM v5

Go to the top of the page
 
+Quote Post
HardEgor
сообщение Aug 2 2018, 15:02
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Sprite @ Aug 2 2018, 16:53) *
Компилятор ARM v5

В свойствах проекта на закладке Target можно изменить компилятор.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 01:55
Рейтинг@Mail.ru


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