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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Работа с константами в CodeVision
Apollo
сообщение Jul 10 2007, 20:15
Сообщение #1


Участник
*

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



Подскажите как указать компилятору на размещение константы в нужном адресе во FLASH в CodeVision?
Go to the top of the page
 
+Quote Post
zhevak
сообщение Jul 11 2007, 05:38
Сообщение #2


Знающий
****

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



Цитата(Apollo @ Jul 11 2007, 02:15) *
Подскажите как указать компилятору на размещение константы в нужном адресе во FLASH в CodeVision?


Никак.
Зачем тебе это? Фёмвеа защитить что-ли хочешь?


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
jasper
сообщение Jul 11 2007, 06:26
Сообщение #3


Народный чинитель
***

Группа: Участник
Сообщений: 415
Регистрация: 15-07-05
Пользователь №: 6 811



В WinAVR можно.
Go to the top of the page
 
+Quote Post
pokos
сообщение Jul 11 2007, 06:34
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445



Чото я не пойму, что тут имеется в виду под константами. Вообще, константы используются только на этапе компиляции. Поэтому они нигде не размещаются. #define - это команда препроцессору С, вообще-то.
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 11 2007, 06:50
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



ничто не мешает обращаться к нужному адресу через указатель.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jul 11 2007, 07:22
Сообщение #6


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(pokos @ Jul 11 2007, 14:34) *
Чото я не пойму, что тут имеется в виду под константами. Вообще, константы используются только на этапе компиляции. Поэтому они нигде не размещаются. #define - это команда препроцессору С, вообще-то.

#define это макрос для препроцессора. Но ни что не мешает использовать подобное выражение const unsigned char ABC; при этом в СИ это будет обыкновенная переменная, но защищенная от записи и разместиться она в ОЗУ. СИ++ по возможности уже постарается не занимать память под константу, если это возможно.
В случае CodeVision делается примерно так __flash (или flash) тип_переменной имя_переменной. Подобная переменная будет размещена во FLASH памяти.
Какой смысл размещать что-то по определенному адресу, не знаю... Наверно проще потом указатель взять от такой переменной.
Вот здесь довольно интересные сведения и ссылка на хорошую книжку по СИ/СИ++. Очень рекомендую!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
pokos
сообщение Jul 11 2007, 07:33
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445



Ага. Если про то, что называется константами в CV, так оно в хелпе написано:

Constants are stored in FLASH memory, to specify this you must use the flash or const keywords.
Constant expressions are automatically evaluated during compilation.
Example:

flash int integer_constant=1234+5;
flash char char_constant=’a’;
flash long long_int_constant1=99L;
flash long long_int_constant2=0x10000000;
flash int integer_array1[]={1,2,3};
/* The first two elements will be 1 and 2,
the rest will be 0 */
flash int integer_array2[10]={1,2};
flash int multidim_array[2,3]={{1,2,3},{4,5,6}};
flash char string_constant1[]=”This is a string constant”;
const char string_constant2[]=”This is also a string constant”;

Constants can’t be declared inside functions.
Go to the top of the page
 
+Quote Post
Apollo
сообщение Jul 11 2007, 08:48
Сообщение #8


Участник
*

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



Цитата(pokos @ Jul 11 2007, 10:33) *
Ага. Если про то, что называется константами в CV, так оно в хелпе написано:


Это я читал, но в том-то и дело, что о способе размещения констант по определённому адресу ничего не написано. Упоминается лишь оператор @ для указания адреса в ОЗУ.



Цитата(zhevak @ Jul 11 2007, 08:38) *
Никак.
Зачем тебе это? Фёмвеа защитить что-ли хочешь?


Нет. Просто есть загрузчик написаный ранее и расположенный в конце FLASH, а также есть перед загрузчиком область памяти основной программы с некими нужными коэффициентами - константами, используемыми МК в работе. Константы олжны находиться в определённой странице FLASH так, чтобы при обновлении ПО загрузчиком можно было отдельно перезаписать только страницу с константами. Сейчас я пишу основную программу, которая должна считывать эти константы из FLASH. Проблема в том как их разместить начинаяс нужного адреса.
В АСМе проблем не было. просто указывал типа .org 0x0123 и всё, после этой строчки можно было обьявлять строку байт, а вот в CodeVision я не нашёл ничего по этому поводу. Выходит какой-то недоделышь этот CVAVR?
Go to the top of the page
 
+Quote Post
zhevak
сообщение Jul 11 2007, 09:23
Сообщение #9


Знающий
****

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



Ой!

Уважаемый, Вы пожалуйста не сердитесь на нас, на прожженых паяльниками и дебаггерами, а поясните цель своего весьма экстравагантного подхода. Возможно, Ваша проблема (ради которой нужно размещать константу только по указанному заранее адресу во флеш-памяти) будет решена более простым способом.

Или делайте как уже тут ранее предлагали: обращайтесь к константе через указатель на нее. А адрес памяти, где она будет размещена, оставьте на откуп компилятору/линковщику.

Ну, еще как не гарантированный вариант: попробуйте поиграться с ассемблерным файлом, который CV всегда создает при компиляци проекта. Поправьте этот файл ручками так, как Вам надо, и отдайте его на "съедение" какому-либо ассемблеру.

Цитата(Apollo @ Jul 11 2007, 14:48) *
Нет. Просто есть загрузчик написаный ранее и расположенный в конце FLASH, а также есть перед загрузчиком область памяти основной программы с некими нужными коэффициентами - константами, используемыми МК в работе. Константы олжны находиться в определённой странице FLASH так, чтобы при обновлении ПО загрузчиком можно было отдельно перезаписать только страницу с константами. Сейчас я пишу основную программу, которая должна считывать эти константы из FLASH. Проблема в том как их разместить начинаяс нужного адреса.


Хм... задача.

Если это действительно константы, то какая разница, на каком адресе они сидят при компиляции новой версии? Значения констант изначально опредены в программе. Если прога претерпевает изменения и ее новую версию нужно заново "залить" в МК, то и заливайте ее вместе с теми же констаттами. Пусть они находятся по другим адресам. Минусы -- ну чуть больше нужно будет времени на программирование.

Если констант не очень много, может воспользоваться внутренним EEPROM? Если много -- внешний подвесить (SPI или I2C).

Цитата
В АСМе проблем не было. просто указывал типа .org 0x0123 и всё, после этой строчки можно было обьявлять строку байт, а вот в CodeVision я не нашёл ничего по этому поводу. Выходит какой-то недоделышь этот CVAVR?


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


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jul 11 2007, 09:27
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



CVAVR недоделышь ... всё больше в этом убеждаюсь.

Была заморочка ... делал так:
В cvavr.exe заменяете avrasm2.exe на avrasm2.bat и рядом с ним кладете avrasm2.bat, в котором вызываете уже сам exe-файл ... этому батнику передается куча параметров ...
Так вот. Из батника перед асмомо вызывал утилиту ... не помню названия, которая заменяла строки определенных коментов на нужные доп. асм-вставки ... получалось очень даже прикольно smile.gif

Но так я делал, ибо задачка была почти сделана и переписывать под другой компилятор было лень ... теперь вот WinAvr колупаю.
Go to the top of the page
 
+Quote Post
pokos
сообщение Jul 11 2007, 09:30
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445



Если я правильно понял, то нужно прикрутить новую программу к существующему загрузчику?
Кстати, а почему загрузчик находится не в области загрузчика?
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jul 11 2007, 09:39
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



_____
P.S.
Если вы возмущены, кто это недоделыш ... то спешу исправится ... он хорош ... для начала ... может я просто уже подрос немного .. вот он и кажется таким smile.gif




Цитата
а также есть перед загрузчиком область памяти основной программы с некими нужными коэффициентами

Загрузчик, видать, на своем месте ... константы ПЕРЕД загрузчиком.
Go to the top of the page
 
+Quote Post
pokos
сообщение Jul 11 2007, 10:02
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 270
Регистрация: 29-06-06
Пользователь №: 18 445



Цитата(AndryG @ Jul 11 2007, 13:39) *
Загрузчик, видать, на своем месте ... константы ПЕРЕД загрузчиком.

Тогда непонятно беспокойство. zhevak всё прекрасно написал.
Go to the top of the page
 
+Quote Post
Apollo
сообщение Jul 11 2007, 10:24
Сообщение #14


Участник
*

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



Цитата(zhevak @ Jul 11 2007, 13:23) *
Ну, еще как не гарантированный вариант: попробуйте поиграться с ассемблерным файлом, который CV всегда создает при компиляци проекта. Поправьте этот файл ручками так, как Вам надо, и отдайте его на "съедение" какому-либо ассемблеру.

А, кстати, идея! Но к сожалению этот продукт я должен отдать другим людям и объяснять им в описании как надо лечить кривизну CVAVR не очень красиво. Им нужно написать тупо, чтобы изменить то-то надо залезть туда-то и потом откомпилировать.



Цитата(zhevak @ Jul 11 2007, 13:23) *
Хм... задача.

Если это действительно константы, то какая разница, на каком адресе они сидят при компиляции новой версии? Значения констант изначально опредены в программе. Если прога претерпевает изменения и ее новую версию нужно заново "залить" в МК, то и заливайте ее вместе с теми же констаттами. Пусть они находятся по другим адресам. Минусы -- ну чуть больше нужно будет времени на программирование.


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

Сообщение отредактировал Apollo - Jul 11 2007, 10:26
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jul 11 2007, 11:13
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



А как можно перелить ПО, не переливая константы. если они будут в проекте с ПО?

Может разделить Вашу задачу на ТРИ части:
загрузчик - залили и забыли
константы - проект представляет из себя просто набор констант
ПО - основная программа, в которой к константам обращаемся через указатели.

Это я к чему .. просто порылся в CVAVR ... нашел параметр RESETVECTOR в файле проекта.
Попробуйте сделать проект для меги16-загрузчик ... и посмотреть параметры в файле проекта ... может еще что найдете.

А может вообще вынести константы с проекта и "набивать" их редактируя файл для прошивки?

если константы должны изменятся юзерами ... может им простейшую программку-конфигуратор на комп надо?

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

мало инфы ... давайте подробней о загрузчике и константах .. кто они и для кого.
Go to the top of the page
 
+Quote Post

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

 


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


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