|
Работа с константами в CodeVision |
|
|
|
Jul 11 2007, 11:54
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 10-07-07
Из: Москва
Пользователь №: 29 044

|
Цитата(AndryG @ Jul 11 2007, 15:13)  А как можно перелить ПО, не переливая константы. если они будут в проекте с ПО?
Может разделить Вашу задачу на ТРИ части: загрузчик - залили и забыли константы - проект представляет из себя просто набор констант ПО - основная программа, в которой к константам обращаемся через указатели. Хочу сделать первичную прошивку, которая будет зашиваться при изготовлении устройства и иметь в себе все три части: приложение, константы и загрузчик. Цитата(AndryG @ Jul 11 2007, 15:13)  А может вообще вынести константы с проекта и "набивать" их редактируя файл для прошивки?
если константы должны изменятся юзерами ... может им простейшую программку-конфигуратор на комп надо? Возможно придётся поступить так. Цитата(AndryG @ Jul 11 2007, 15:13)  мало инфы ... давайте подробней о загрузчике и константах .. кто они и для кого. Константы нужны для подстройки АЦП, так скажем вывод их на ноль. Собранная и обработанная информация будет передаваться по сети (неважно какой) и по этой же сети нужно при необходимости обновлять приложение или подстраивать АЦП меняя только константы.
|
|
|
|
|
Jul 11 2007, 12:25
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(Apollo @ Jul 11 2007, 17:54)  Хочу сделать первичную прошивку, которая будет зашиваться при изготовлении устройства и иметь в себе все три части: приложение, константы и загрузчик. Возможно придётся поступить так. Константы нужны для подстройки АЦП, так скажем вывод их на ноль. Собранная и обработанная информация будет передаваться по сети (неважно какой) и по этой же сети нужно при необходимости обновлять приложение или подстраивать АЦП меняя только константы. Не-е, что-то я не очень понимаю. 1. Почему нельзя использовать ЕЕПРОМ для этих констант? 2. А изначально константы уже прошиты уже где-то во флешке? Или это есть самая первая прошивка МК? Для самой первой прошивки, я думаю, пойдет сособ корреции HEX-файла ручкам. Достаточно один раз это сделать. Потом прошить и забыть про эти константы. А обращение к ним из программы осуществлять по указателю. 3. Рассмотрите такой вариант: чем отличается загрузчик от основной проги, кроме того, что она сидит на других адресах и стартует немного по другому? Может быть научить загрузчик отличать код программы от кода констант, т.е. прогу он прошьет в одно место, а константы отправит в другое?
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Jul 11 2007, 13:03
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Apollo @ Jul 11 2007, 14:54)  Слушайте сюда. Есть у меня решение вашей проблемы, не требует шаманства с ассемблерным файлом, но требует использования инлайнового асма, и вообще выглядит ужасно. Вот пример размещения асм-функции по определенному адресу: Код #asm .CSEG Magic: ;****Store current address location .org (0x17F2>>1) LDI R16,1500/100 RET .org (0x17F6>>1) LDI R16,900/100 RET
.org (0x17FA>>1) LDI R16,600/100 RET .org Magic;****Restore address location #endasm Я вам даю идею, вы ее развиваете дальше. Естественно, что точно также соответствующими директивами можно разместить не только код, но и данные. Вам осталось только разобраться, как объявить в этом асм-коде видимую из С-кода метку и как присвоить эту метку константному указателю на структуру. А впрочем и это не нужно - адрес вам известен. Минус - работа через указатель. Не знаю, насколько хорошо CV оптимизирует константные указатели. Возможно, что обрамив объявление вашей константы в Код #asm .CSEG Magic: ;****Store current address location .org FREQ_0 #endasm
и
#asm .org Magic;****Restore address location #endasm вам удастся разместить и саму структуру и таким образом обойтись без указателя.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 11 2007, 14:09
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 10-07-07
Из: Москва
Пользователь №: 29 044

|
Спасибо всем! В общем решил .asm файл, полученный при компиляции дополнять ассемблерными вставками в начале с определениями и инклудами и в конце с константами и загрузчиком. В общем получилось так-как хотелось, но конечно криво всё это.
|
|
|
|
|
Jul 11 2007, 16:28
|

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

|
Цитата(Apollo @ Jul 11 2007, 13:24)  Эти константы нужно будет считывать и загрузчиком (находящемся в области загрузчика) и из основной программы. Поэтому их адрес должен быть неизменен, так как загрузчик меняться не будет. При перезаливке ПО через загрузчик возможны варианты, когда полностью переписывается и ПО и область констант, а возможен вариант, когда переписывается только ПО. Но адрес констант должен быть один и тот же Я поступил иначе, я не стал встраивать никаких левых констант в программу прошивки, т.к. программ может быть много, размер флеша в разных кристалах разный, и можно просто механически промазать с адресами. Написал прогу, которая любую откомпилированную программу (.hex) перепаковывает в бинарник и добаляет страничку информации для бутлоадера. Страничка это конечно не главное (в ней хранится CRC всей прошивки, версия программы, тип железа, дата создания и т.п.), основная функция этой программы - зашифровать бинарник, чтобы его можно было свободно высылать пользователям. В этой программе я и задаю все требующиеся константы для бутлоадера.
|
|
|
|
|
Jul 11 2007, 16:48
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 10-07-07
Из: Москва
Пользователь №: 29 044

|
Это я тоже применю, но на следующих этапах разработки продукта. На этом этапе хотелось просто скомпилировать всё одновременно, вот и налетел на такую проблемку.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|