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

 
 
> Статическая таблица в памяти программ
avat
сообщение May 15 2007, 06:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 1-04-07
Пользователь №: 26 686



Здравствуйте. Начал осваивать AVR, пользуюсь WinAVR и GCC. Массив данных, описанный как static unsigned char myarray[10][10] компилируется в SRAM. А как сделать так, чтобы массив лежал в коде программы, т.к. он не будет модифицироваться программой в принципе, а оперативной памяти не хватает на весь массив? Пользуюсь только #include <avr/io.h>, #include <avr/interrupt.h> - может, есть еще что-то нужное в моем случае?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
KRS
сообщение May 15 2007, 06:43
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А вы пробовали const?
Код
static const unsigned char myarray[10][10];
Go to the top of the page
 
+Quote Post
avat
сообщение May 15 2007, 07:14
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 1-04-07
Пользователь №: 26 686



Цитата(KRS @ May 15 2007, 10:43) *
А вы пробовали const?
Код
static const unsigned char myarray[10][10];


Пробовал. Размещает в SRAM и все тут. Более того, если массив больше некоторого значения, он накрывает переменные в SRAM и программа, естественно, отказывается работать вообще. Компилятор не выдает даже предупреждения.
Go to the top of the page
 
+Quote Post
umup
сообщение May 15 2007, 07:16
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720



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

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

или

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


Чтение осуществляется функцией pgm_read_byte и т.п.
Go to the top of the page
 
+Quote Post
Quasar
сообщение May 15 2007, 07:23
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



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

Я делал так:

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

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

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


umup

Опередил smile.gif

Сообщение отредактировал Quasar - May 15 2007, 07:25
Go to the top of the page
 
+Quote Post
avat
сообщение May 15 2007, 12:15
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 1-04-07
Пользователь №: 26 686



umup, quasar - большое спасибо, сделал, как вы сказали, все заработало. Иду курить libc. smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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