Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 - cохранение данных программы в hex-файле по указанному адресу
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Sprite
Доброго времени суток!

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

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

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

Этот текст потом можно найти в бинарнике считанном из контроллера.
Sprite
Цитата(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 в поисках этих строк?
DASM
Цитата(Sprite @ Aug 1 2018, 07:48) *
Спасибо!
А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?

const __attribute__((section(".LOC_DATA"))) char my_date[] = " date:" __DATE__;
и в файле линкера создать секцию по нужному адресу .LOC_DATA Это GCC
У RealView есть __attribute__((at(0xXXXXXXX))); . У других компилеров тоже должно быть что-то подобное
jcxz
Цитата(Sprite @ Aug 1 2018, 07:48) *
А можно уложить эти данные по определенному адресу?

Можно, если прочитать мануал на свой компилятор.
IAR:
__root char const __codeSignature[] @ ".codeSignature" = "версия"; и прописывание в icf-файле в какой регион класть данную секцию .codeSignature
или
__root char const __codeSignature[] @ 0x00ADRESS = "версия";
Но первый вариант лучше.
A.Lex
Цитата(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};
jcxz
Цитата(A.Lex @ Aug 1 2018, 11:11) *
Для L151 когда-то делал так (EEPROM):

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

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

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

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

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

В свойствах проекта на закладке Target можно изменить компилятор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.