|
|
  |
Сохранить номер версии в прошивке |
|
|
|
Jul 24 2008, 17:30
|
Участник

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

|
Подскажите пож. кто как хранит номер версии программы в прошивке. EEPROM наверное недолго сохранит.
|
|
|
|
|
Jul 24 2008, 18:13
|
Участник

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

|
Цитата(Rst7 @ Jul 24 2008, 21:52)  А в чем проблемы? Я пользуюсь вытаскиванием номера ревизии с SVN и вставкой его просто в текстовую строку. А можно и в виде числа сделать. Версия не исходников , а версия прошивки -чтобы можно было считать программатором прошивку и понять какая версия у меня тут зашита.
|
|
|
|
|
Jul 24 2008, 18:20
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Rst7 @ Jul 25 2008, 00:14)  Это пофиг, эти символы универсальные. Я знаю  PROGMEM не универсальный:-)) Цитата(krik @ Jul 25 2008, 00:13)  Версия не исходников , а версия прошивки -чтобы можно было считать программатором прошивку и понять какая версия у меня тут зашита. Ну, считаете программатором прошивку, а в ней строчка "v.12.33.55".
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 24 2008, 18:29
|
Участник

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

|
Цитата(AHTOXA @ Jul 24 2008, 22:11)  Если устроит дата/время компиляции, то можно так: Код const char version[] PROGMEM = "super-puper-proggae"__DATE__", "__TIME__; (это для winavr) Примерно так и думал, только наверное добавить надо бы volatile. Спасибо всем.
|
|
|
|
|
Jul 24 2008, 21:29
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(singlskv @ Jul 25 2008, 00:35)  А можно услышать более подробно как Вы это делаете с SVN автоматически ? Просто с SVN только начал работать и не хочу изобретать велосипед... Keyword Substitution http://svnbook.red-bean.com/nightly/ru/svn...l.keywords.htmlЦитата(zltigo @ Jul 25 2008, 00:45)  volatile константа - тогда еще добавить еще чего попало, например соли, перца, ладана...  . Ничего смешного. const - указывает компилятору что переменную нельзя изменять. volatile - указывает что переменная может меняться сама. Например. Возмем регистр ICR - Input Capture Register Обьявим его так (он должен быть объявлен через указатели, давайте для простоты это упустем) volatile const unsigned int ICR; Он должен быть volatile, потому что его значение может измениться в любой момент и нельзя чтобы компилятор оптимизировать чтение из него. Но с другой стороны запись в него опасна, поэтому пускай компилятор ругается если я в программе напишу ICR = 0x55AA; ведь такими действиями я могу затереть значение записанное туда при захвате. С помощью записи можно написать более безопасный код. Еще, правда на SDCC для 51 код: code _AT_(0x3000) volatile const char Kf = 10; res = ADC * Kf; Корректировочную константу Kf я разместил во флеш, чтобы можно было ее менять при программировании контроллера, и установил ей начальное значение которое почти всегда меня устраивало. Но если не применить к Kf модификатор volatile то оптимизатор сгенерирует код который не будет брать значение записанное по адресу 0x3000, а всегда будет умножать на 10. Анатолий.
Сообщение отредактировал aesok - Jul 24 2008, 21:41
|
|
|
|
|
Jul 24 2008, 21:40
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aesok @ Jul 24 2008, 23:29)  Ничего смешного. const - указывает компилятору что переменную нельзя изменять. volatile - указывает что переменная может меняться сама. В указаном мною совершенно конкретном случае объявляем стоку во flash, которая "может меняться сама". Вы правы - ничего смешного - впору плакать  от бездумного шаманства с применением каких попало квалификаторов. Цитата volatile - указывает что переменная может меняться сама. Очень односторонняя трактовка..
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 24 2008, 21:43
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(zltigo @ Jul 25 2008, 01:40)  В указаном мною совершенно конкретном случае объявляем стоку во flash, которая "может меняться сама". Вы правы - ничего смешного - впору плакать  . Неа, дописал в предыдущем посте пример с флеш. Конечно со строками врятли компилятор заоптимизирует до ошибок. Анатолий.
Сообщение отредактировал aesok - Jul 24 2008, 21:59
|
|
|
|
|
Jul 24 2008, 22:02
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(aesok @ Jul 24 2008, 23:43)  Неа, дописал в предыдущем посте пример с флеш. Сильно гипотетическая вещь с высосанными из пальца проблемами возможными только, если вдруг под копию константы компилятор в безраздельное пользование выделит регистр. Не думаю, что Ваша программа состоит их нескольких строк - по этой причине для регистров найдутся более полезные применения. Еще раз напоминаю, что указывал не на неприемлимость сочетания квалификаторов "вообще", а на бездумность применения в совершенно конкретном случае.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 24 2008, 23:02
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(krik @ Jul 24 2008, 21:13)  чтобы можно было считать программатором прошивку и понять какая версия у меня тут зашита. А другим способом нельзя? Ну например, чтобы устройство само написало свой номер прошивки куда надо. Вы, собираетесь к каждому пользователю вашего устройства с программатором ходить? Вообще достаточно написать: Код #define VERSION "v.x.x.x"
printf(VERSION); и все, считав весь дамп програматором, обязательно найдете строку версии, без каких либо муторных объявлений во флеш или eeprom. Автоматически найти и прочитать версию - тоже никаких проблем -искать в дампе сигнатуру "v.<любая цифра>." Сам применяю несколько иную схему. Предполагается использвание бутлоадера, и единственным способом которым можно достучаться к PROM МК является общение с ним. Есть программа которая конвертирует hex, axf, elf и т.п. в зашифрованный bin, и позволяет создать служебную страничку бутлоадера, где размещается версия прошивки, дата и время конвертации, класс бутлоадера для которого предназначена прошивка (по классам бутлоадера у меня определяется тип железа), строка пользователя, где русским языком можно написать краткий коментарий, поясняющий что это за прошивка (без блужданий по цифрам версий), и т.п. Т.е. на выходе получается бинарник с прицепленной служебной информацией по требуемому адресу для конкретного бутлоадера. И есть другая программа, которая общается с бутлоадерами, для заливки, проверки и обновления прошивок. Открывает ранее созданные файлы-прошивки. Показывает их служебную информацию - что за прошивка, когда создана, для какого железа и т.п. Соединяется с бутлоадером устройства, запрашивает его класс. Ну а дальше уже можно и читать и писать (если прошивка подходит к этому устройству). И на экране сразу видно и версии и даты как залитой так и той, что пытаются зашить, прошивок, и русским языком коментарии по которым видно чем они отличаются. Если подбить сказанное, версию я добавляю внешней программой в уже откомпилированный бинарник. На мой взгляд, такой подход самый простой в использовании (один раз написать программу, и потом пользовать ее для любого проекта), универсален - нет привязок к процу и к проекту, сокращает риск возможных ошибочных версий - т.к. версия задается ровно перед релизом.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|