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

 
 
> CodeVision массив по конкретному адресу, Как расположить проинициализированный массив в памяти по нужному адрес
InvisibleFed
сообщение Jun 30 2008, 03:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 401
Регистрация: 18-11-06
Из: Хабаровск
Пользователь №: 22 469



Здравствуйте. Есть массив (табличный метод расчета кцк). Не могу в CodeVision разместить его по нужному адресу. Например:

Код
char array[5] = {0x12, 0x34, 0x45, 0x56, 0x67};

Хочу чтобы лежал он с адреса 0x100:

Код
char array[5] = {0x12, 0x34, 0x45, 0x56, 0x67} @0x100; // не помогает

Куда только эти @0x100 я не ставил. Хотя вот так пишут в хелпе:

Код
char a@0x100;

... и все пашет. А с инициализацией нивкакую...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VDG
сообщение Jun 30 2008, 11:43
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Цитата(InvisibleFed @ Jun 30 2008, 07:51) *
Не могу в CodeVision разместить его по нужному адресу.

и не сможете. Компилятор этому не обучен.

Цитата(vet @ Jun 30 2008, 14:13) *
предваряйте определение переменной директивой #asm(".org 0x100").
все последующие переменные разместятся выше.

Вот никогда не понимал зачем писать бред, даже не проверив. Это как в анекдоте про дохнущих кур и раввина - "...жаль что все сдохли, у меня ещё куча советов была".
и к чему приведет такое грубое вмешательство в дела компилятора? - крахом и более ничем. посмотрите карту памяти!

Сообщение отредактировал VDG - Jun 30 2008, 11:47


--------------------
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 1 2008, 06:02
Сообщение #3


Знающий
****

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



Цитата(VDG @ Jun 30 2008, 15:43) *
и к чему приведет такое грубое вмешательство в дела компилятора? - крахом и более ничем. посмотрите карту памяти!

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


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
VDG
сообщение Jul 2 2008, 21:05
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Цитата(vet @ Jul 1 2008, 10:02) *
Сам применяю такой трюк

Вот я проверил на 1.24.8d. Фокус не вышел. У меня CV не смотрит (и не должен) что ему пихают в ассеблерных вставках, тем более вне функций.
====

А не проще было автору в бут область запихнуть все проверки CRC апликейшена (основного кода)?

Сообщение отредактировал VDG - Jul 2 2008, 21:08
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 3 2008, 05:43
Сообщение #5


Знающий
****

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



Цитата(VDG @ Jul 3 2008, 01:05) *
Вот я проверил на 1.24.8d. Фокус не вышел. У меня CV не смотрит (и не должен) что ему пихают в ассеблерных вставках, тем более вне функций.

почему не смотрит, все вставки аккуратно переносит в *.asm.
Код
;CodeVisionAVR C Compiler V1.24.8d Professional
...
    .CSEG
;      18 #asm(".org 0x1000")
    .org 0x1000
;      19
;      20 void main() {
_main:

Насчет флэшевых переменных это я да, подзабыл матчасть - давно не работал с CV. Имелись в виду данные во встроенной EEPROM:
Код
#asm(".eseg")
#asm(".org 0x01")
eeprom SETTINGS eep={0};
Код
;    1281 #asm(".eseg")
    .eseg
;    1282 #asm(".org 0x01")
    .org 0x01
;    1283 eeprom SETTINGS eep={0};

    .ESEG
_eep:
    .DB  0x0
...


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
VDG
сообщение Jul 3 2008, 09:48
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Цитата(vet @ Jul 3 2008, 09:43) *
почему не смотрит, все вставки аккуратно переносит в *.asm.

не надо смотреть в сгенерированный ассм. это тоже самое что править его потом вручную.

да, переносит вставку в код, не спорю. но откройте список переменных в treeview - компилятор ничего не знает об этой вставке. т.е. можно так хакнуть, но на свой страх и риск, потому что рано или поздно будет перекрытие.

а с байтовыми (или словами) переменными ещё хлеще. компилятор положил их в регистры, и соответственно вставка повлияла на сдвиг последующих объявленных переменных в SRAM. т.е. то самое перекрытие.

Сообщение отредактировал VDG - Jul 3 2008, 09:49


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- InvisibleFed   CodeVision массив по конкретному адресу   Jun 30 2008, 03:51
- - haker_fox   Цитата(InvisibleFed @ Jun 30 2008, 12:51)...   Jun 30 2008, 04:54
|- - InvisibleFed   Цитата(haker_fox @ Jun 30 2008, 15:54) А ...   Jun 30 2008, 06:31
|- - defunct   Цитата(InvisibleFed @ Jun 30 2008, 09:31)...   Jun 30 2008, 22:17
- - vet   InvisibleFed, предваряйте определение переменной д...   Jun 30 2008, 10:13
|- - vet   Цитата(VDG @ Jul 3 2008, 13:48) не надо с...   Jul 3 2008, 12:23
|- - VDG   Цитата(vet @ Jul 3 2008, 16:23) Не уловил...   Jul 3 2008, 12:30
- - sgs   Цитата(InvisibleFed @ Jun 30 2008, 08:51)...   Jun 30 2008, 16:32
- - Т.Достоевский   Непонятно, зачем конкретный адрес? Что асм, что ко...   Jun 30 2008, 23:35
|- - defunct   Цитата(Т.Достоевский @ Jul 1 2008, 02:35)...   Jun 30 2008, 23:45
- - InvisibleFed   Здравствуйте. Всем спасибо за ответы. Отвечу и вне...   Jul 1 2008, 06:57
- - Александр Куличок   Цитата3. Некоторые противоречат сами себе - говоря...   Jul 1 2008, 08:24
- - InvisibleFed   ЦитатаПовнимательней посты читать надо. Вам предло...   Jul 1 2008, 08:53
|- - Сергей Борщ   Цитата(InvisibleFed @ Jul 1 2008, 11:53) ...   Jul 1 2008, 09:14
- - Александр Куличок   ЦитатаВо-первых, про тормознутость lpm писал я сам...   Jul 1 2008, 09:34
- - InvisibleFed   ЦитатаУ меня код для CRC16 занимает 16/17 тактов н...   Jul 1 2008, 10:24
- - defunct   Табличный способ расчета CRC внезависимости от раз...   Jul 1 2008, 10:27
- - Александр Куличок   Перед вызовом Y <= указатель на данные XL (или ...   Jul 1 2008, 12:03
|- - defunct   Цитата(Александр Куличок @ Jul 1 2008, 15...   Jul 1 2008, 21:09
- - Александр Куличок   ЦитатаВы шутите наверное?! X использовать под ...   Jul 1 2008, 21:54
|- - defunct   Цитата(Александр Куличок @ Jul 2 2008, 00...   Jul 2 2008, 15:51
- - sgs   Цитата(InvisibleFed @ Jun 30 2008, 08:51)...   Jul 18 2008, 08:33
- - SasaVitebsk   А если перейти на IAR (или GCC), то решается две з...   Jul 18 2008, 17:55
- - InvisibleFed   SasaVitebsk, спасибо, полностью согласен. Но так у...   Jul 22 2008, 06:34
- - Qwertty   Цитата(InvisibleFed @ Jul 22 2008, 10:34)...   Jul 22 2008, 07:00
- - sgs   Цитата(InvisibleFed @ Jul 22 2008, 11:34)...   Jul 22 2008, 10:30


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

 


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


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