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

STM32 - cохранение данных программы в hex-файле по указанному адресу

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

 

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

Информация о версии определяется в тексте программы (на данный момент просто дефайном).

 

Заранее спасибо!

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


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

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

 

const char my_date[] = " date:" __DATE__;

const char my_time[] = " time:" __TIME__;

const char my_ver[] = " ver.:3.30";

 

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

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


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

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

 

const char my_date[] = " date:" __DATE__;

const char my_time[] = " time:" __TIME__;

const char my_ver[] = " ver.:3.30";

 

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

Спасибо!

А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?

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


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

Спасибо!

А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?

const __attribute__((section(".LOC_DATA"))) char my_date[] = " date:" __DATE__;

и в файле линкера создать секцию по нужному адресу .LOC_DATA Это GCC

У RealView есть __attribute__((at(0xXXXXXXX))); . У других компилеров тоже должно быть что-то подобное

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


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

А можно уложить эти данные по определенному адресу?

Можно, если прочитать мануал на свой компилятор.

IAR:

__root char const __codeSignature[] @ ".codeSignature" = "версия"; и прописывание в icf-файле в какой регион класть данную секцию .codeSignature

или

__root char const __codeSignature[] @ 0x00ADRESS = "версия";

Но первый вариант лучше.

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


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

Спасибо!

А можно уложить эти данные по определенному адресу? Или придется пробегать весь hex в поисках этих строк?

Для L151 когда-то делал так (EEPROM):

const uint16_t CalibrTable[10]__attribute__((at(DATA_EEPROM_START_ADDR))) = {0x0582,0x0B04,0x1096,0x1608,0x1B8A,0x210C,0x268E,0x2C10,0x3192,0x3714};

 

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


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

Для L151 когда-то делал так (EEPROM):

Для L151 или чего другого - без разницы. Вопрос тут не про использованный МК, а про использованный компилятор. Который ТС не озвучил.

Причём тут вообще какой МК???

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


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

Для L151 или чего другого - без разницы. Вопрос тут не про использованный МК, а про использованный компилятор. Который ТС не озвучил.

Проект разрабатывается в Keil uVision v5.2

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


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

Проект разрабатывается в Keil uVision v5.2

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

Если используется штатный компилятор Keil, то у него очень развитый help, прямо на сайте ARM или встроенный хэлп в keil.

Также эта "проблема", ставшая уже махровым баяном, неоднократно поднималась на этом форуме. Пройдите поиском.

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


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

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

Если используется штатный компилятор Keil, то у него очень развитый help, прямо на сайте ARM или встроенный хэлп в keil.

Также эта "проблема", ставшая уже махровым баяном, неоднократно поднималась на этом форуме. Пройдите поиском.

Спасибо за подробный и развернутый ответ! :biggrin:

 

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

arm.png

 

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


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

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

В свойствах проекта на закладке Target можно изменить компилятор.

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


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

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

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

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

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

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

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

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

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

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