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

А вы пробовали const?
Код
static const unsigned char myarray[10][10];
Пробовал. Размещает в SRAM и все тут. Более того, если массив больше некоторого значения, он накрывает переменные в SRAM и программа, естественно, отказывается работать вообще. Компилятор не выдает даже предупреждения.
нужно сделать так (читайте документацию на AVR-Libc) :
Код
#include <avr/pgmspace.h>
prog_char myarray[10][10] = { ...
или
unsigned char __attribute__((__progmem__)) myarray[10][10] = { ...
Чтение осуществляется функцией pgm_read_byte и т.п.
Quasar
May 15 2007, 07:23
Const скажет компилятору о том, что это не модифицируется, но расположение всё равно будет в sram.
Я делал так:
Код
#include <avr/pgmspace.h>
const uint8_t nameMas0[] PROGMEM= { ..... };
.....
//Считывание
i = pgm_read_byte(&nameMas0[нумбер]);
umupОпередил
umup, quasar - большое спасибо, сделал, как вы сказали, все заработало. Иду курить libc.