Перейти к содержанию
    

Статическая таблица в памяти программ

Здравствуйте. Начал осваивать 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];

 

Пробовал. Размещает в SRAM и все тут. Более того, если массив больше некоторого значения, он накрывает переменные в SRAM и программа, естественно, отказывается работать вообще. Компилятор не выдает даже предупреждения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно сделать так (читайте документацию на AVR-Libc) :

 

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

или

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

 

Чтение осуществляется функцией pgm_read_byte и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Я делал так:

 

#include <avr/pgmspace.h>

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

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

 

umup

 

Опередил :)

Изменено пользователем Quasar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

umup, quasar - большое спасибо, сделал, как вы сказали, все заработало. Иду курить libc. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...