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

 
 
> Помогите разобраться
LoLo
сообщение Dec 22 2008, 11:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Доброго времени суток, всем! Взялся разбираться с AVR на AVRStudio.
Проблема такая. Необходимо матрицу 800 элементов (контстанты)
объявить в памяти программ, чтобы они не занимали места в ОЗУ!
Все перепробовал - бесполезно. После компиляции все 800 штук
указаны в DATA. Объявляю как const - тоже самое!!! Хотя в книгах пишут,
что если объявлено как const, то должны храниться в памяти программ.
Что делать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 22 2008, 11:46
Сообщение #2


Гуру
******

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



AVRStudio - оболочка/симулятор. В комплекте с ней идет ассемблер AVRasm (AVRasm2). Упоминание компиляции наталкивает на мысль, что в качестве компилятора вы используете avr-gcc (WinAVR).
Цитата(LoLo @ Dec 22 2008, 13:26) *
Хотя в книгах пишут, что если объявлено как const, то должны храниться в памяти программ.
Выкинуть такие книги. const означает, что компилятор не позволит изменить это, т.е. данные с атрибутом const являются read-only. Куда размещать такие данные - отдано на усмотрение компилятору.
Цитата(LoLo @ Dec 22 2008, 13:26) *
Что делать?
Как всегда - читать документацию. Начать с Winavr/doc/avr-libc/faq.html. Читать от начала до конца, обратить внимание на атрибут PROGMEM.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
LoLo
сообщение Dec 22 2008, 12:24
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 22-12-08
Пользователь №: 42 664



Цитата(Сергей Борщ @ Dec 22 2008, 14:46) *
AVRStudio - оболочка/симулятор. В комплекте с ней идет ассемблер AVRasm (AVRasm2). Упоминание компиляции наталкивает на мысль, что в качестве компилятора вы используете avr-gcc (WinAVR).Выкинуть такие книги. const означает, что компилятор не позволит изменить это, т.е. данные с атрибутом const являются read-only. Куда размещать такие данные - отдано на усмотрение компилятору.
Как всегда - читать документацию. Начать с Winavr/doc/avr-libc/faq.html. Читать от начала до конца, обратить внимание на атрибут PROGMEM.


Спасибо. Память данных уменьшилась. Но появились warning: initialization makes pointer from integer without a cast. Очень много...

Цитата(mempfis_ @ Dec 22 2008, 14:56) *
Давно писал на ассемблере но кажется надо делать так:

.CSEG
loop:
.DB 10, 151, 898

p.s. сорри не дочитал до конца и подумал что речь идёт об ассемблере
в С нужно использовать ключевое слово:
__flash char var[800] // для iar
flash char var[800] //для cvavr
для других компиляторов не знаю smile.gif


Надо для WinAVR
Go to the top of the page
 
+Quote Post
Daskar
сообщение Dec 22 2008, 13:04
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 11-09-05
Из: Московская обл.
Пользователь №: 8 448



Цитата(LoLo @ Dec 22 2008, 16:24) *
Спасибо. Память данных уменьшилась. Но появились warning: initialization makes pointer from integer without a cast. Очень много...
Надо для WinAVR

В WinAVR попробуйте сделать примерно так:
uint8_t Data[800]PROGMEM = {0x81, 0x42, 0x24, 0x18, ....};
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:44
Рейтинг@Mail.ru


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