Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Статическая таблица в памяти программ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
avat
Здравствуйте. Начал осваивать AVR, пользуюсь WinAVR и GCC. Массив данных, описанный как static unsigned char myarray[10][10] компилируется в SRAM. А как сделать так, чтобы массив лежал в коде программы, т.к. он не будет модифицироваться программой в принципе, а оперативной памяти не хватает на весь массив? Пользуюсь только #include <avr/io.h>, #include <avr/interrupt.h> - может, есть еще что-то нужное в моем случае?
KRS
А вы пробовали const?
Код
static const unsigned char myarray[10][10];
avat
Цитата(KRS @ May 15 2007, 10:43) *
А вы пробовали const?
Код
static const unsigned char myarray[10][10];


Пробовал. Размещает в SRAM и все тут. Более того, если массив больше некоторого значения, он накрывает переменные в SRAM и программа, естественно, отказывается работать вообще. Компилятор не выдает даже предупреждения.
umup
нужно сделать так (читайте документацию на AVR-Libc) :

Код
#include <avr/pgmspace.h>
prog_char  myarray[10][10] = { ...

или

unsigned  char __attribute__((__progmem__)) myarray[10][10] = { ...


Чтение осуществляется функцией pgm_read_byte и т.п.
Quasar
Const скажет компилятору о том, что это не модифицируется, но расположение всё равно будет в sram.

Я делал так:

Код
#include <avr/pgmspace.h>

const uint8_t nameMas0[] PROGMEM= {    .....   };

.....
//Считывание
i = pgm_read_byte(&nameMas0[нумбер]);


umup

Опередил smile.gif
avat
umup, quasar - большое спасибо, сделал, как вы сказали, все заработало. Иду курить libc. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.