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

 
 
 
Reply to this topicStart new topic
> Сохранить номер версии в прошивке
krik
сообщение Jul 24 2008, 17:30
Сообщение #1


Участник
*

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



Подскажите пож. кто как хранит номер версии программы в прошивке. EEPROM наверное недолго сохранит.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 24 2008, 17:52
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



А в чем проблемы? Я пользуюсь вытаскиванием номера ревизии с SVN и вставкой его просто в текстовую строку. А можно и в виде числа сделать.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 24 2008, 18:11
Сообщение #3


фанат дивана
******

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



Если устроит дата/время компиляции, то можно так:

Код
const char version[] PROGMEM = "super-puper-proggae"__DATE__", "__TIME__;


(это для winavr)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
krik
сообщение Jul 24 2008, 18:13
Сообщение #4


Участник
*

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



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

Версия не исходников , а версия прошивки -чтобы можно было считать программатором прошивку и понять какая версия у меня тут зашита.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jul 24 2008, 18:14
Сообщение #5


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(AHTOXA @ Jul 24 2008, 21:11) *
(это для winavr)

Это пофиг, эти символы универсальные.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 24 2008, 18:20
Сообщение #6


фанат дивана
******

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



Цитата(Rst7 @ Jul 25 2008, 00:14) *
Это пофиг, эти символы универсальные.


Я знаюsmile.gif PROGMEM не универсальный:-))

Цитата(krik @ Jul 25 2008, 00:13) *
Версия не исходников , а версия прошивки -чтобы можно было считать программатором прошивку и понять какая версия у меня тут зашита.


Ну, считаете программатором прошивку, а в ней строчка "v.12.33.55".


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
krik
сообщение Jul 24 2008, 18:29
Сообщение #7


Участник
*

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



Цитата(AHTOXA @ Jul 24 2008, 22:11) *
Если устроит дата/время компиляции, то можно так:

Код
const char version[] PROGMEM = "super-puper-proggae"__DATE__", "__TIME__;


(это для winavr)

Примерно так и думал, только наверное добавить надо бы volatile.
Спасибо всем.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 24 2008, 20:27
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



А я указываю в виде текста. Без генерации компилятором. При этом программу пишу общую если есть модификации железа (что часто бывает при длительном выпуске). То есть например плата версии 1 процессор м88, а версия программы 1.15. Если при этом есть связь с внешним миром (например 232), то обязательно данная инфа может быть получена извне. Если какие-то ресурсы переменные (например объём установленной внешней EEPROM), то этот объём автоматически определяется на этапе инициализации оборудования и может быть выданн по запросу. То есть всё это не ведёт к изменению версии прошивки.

Для чего это делаю? Для того чтобы была одна самая последняя версия для одного и того же устр-ва вне зависимости от аппаратной реализации (при возможности естественно). Например выявлен скрытый мелкий хомут или добавлено возможностей в программу - всё это можно зашить и в предыдущую реализацию железа.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 24 2008, 20:35
Сообщение #9


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



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

А можно услышать более подробно как Вы это делаете с SVN автоматически ?
Просто с SVN только начал работать и не хочу изобретать велосипед...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 24 2008, 20:45
Сообщение #10


Гуру
******

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



Цитата(krik @ Jul 24 2008, 20:29) *
Примерно так и думал, только наверное добавить надо бы volatile.

volatile константа - тогда еще добавить еще чего попало, например соли, перца, ладана... smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 24 2008, 21:29
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 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 константа - тогда еще добавить еще чего попало, например соли, перца, ладана... smile.gif.


Ничего смешного.

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
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 24 2008, 21:40
Сообщение #12


Гуру
******

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



Цитата(aesok @ Jul 24 2008, 23:29) *
Ничего смешного.
const - указывает компилятору что переменную нельзя изменять.
volatile - указывает что переменная может меняться сама.

В указаном мною совершенно конкретном случае объявляем стоку во flash, которая "может меняться сама". Вы правы - ничего смешного - впору плакать sad.gif от бездумного шаманства с применением каких попало квалификаторов.
Цитата
volatile - указывает что переменная может меняться сама.

Очень односторонняя трактовка..


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 24 2008, 21:43
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(zltigo @ Jul 25 2008, 01:40) *
В указаном мною совершенно конкретном случае объявляем стоку во flash, которая "может меняться сама". Вы правы - ничего смешного - впору плакать sad.gif.


Неа, дописал в предыдущем посте пример с флеш.

Конечно со строками врятли компилятор заоптимизирует до ошибок.

Анатолий.

Сообщение отредактировал aesok - Jul 24 2008, 21:59
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 24 2008, 22:02
Сообщение #14


Гуру
******

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



Цитата(aesok @ Jul 24 2008, 23:43) *
Неа, дописал в предыдущем посте пример с флеш.

Сильно гипотетическая вещь с высосанными из пальца проблемами возможными только, если вдруг под копию константы компилятор в безраздельное пользование выделит регистр. Не думаю, что Ваша программа состоит их нескольких строк - по этой причине для регистров найдутся более полезные применения. Еще раз напоминаю, что указывал не на неприемлимость сочетания квалификаторов "вообще", а на бездумность применения в совершенно конкретном случае.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 24 2008, 23:02
Сообщение #15


кекс
******

Группа: Свой
Сообщений: 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, и позволяет создать служебную страничку бутлоадера, где размещается версия прошивки, дата и время конвертации, класс бутлоадера для которого предназначена прошивка (по классам бутлоадера у меня определяется тип железа), строка пользователя, где русским языком можно написать краткий коментарий, поясняющий что это за прошивка (без блужданий по цифрам версий), и т.п. Т.е. на выходе получается бинарник с прицепленной служебной информацией по требуемому адресу для конкретного бутлоадера.

И есть другая программа, которая общается с бутлоадерами, для заливки, проверки и обновления прошивок.
Открывает ранее созданные файлы-прошивки. Показывает их служебную информацию - что за прошивка, когда создана, для какого железа и т.п.
Соединяется с бутлоадером устройства, запрашивает его класс. Ну а дальше уже можно и читать и писать (если прошивка подходит к этому устройству). И на экране сразу видно и версии и даты как залитой так и той, что пытаются зашить, прошивок, и русским языком коментарии по которым видно чем они отличаются.

Если подбить сказанное, версию я добавляю внешней программой в уже откомпилированный бинарник. На мой взгляд, такой подход самый простой в использовании (один раз написать программу, и потом пользовать ее для любого проекта), универсален - нет привязок к процу и к проекту, сокращает риск возможных ошибочных версий - т.к. версия задается ровно перед релизом.
Go to the top of the page
 
+Quote Post

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

 


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


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