[ATmega168 WinAVR] Длинные const массивы - возможно ли?
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2183
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
[ATmega168 WinAVR] Длинные const массивы - возможно ли?
Возможно ли задавать const char (или int) массивы размером больше размера оперативной памяти? Если возможно, как это делать? Необходимо только читать значения из массива по порядку и выполнять различные действия в зависимости от этих значений.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: [ATmega168 WinAVR] Длинные const массивы - возможно ли?
Разместите массивы в памяти программ.
В IAR на С это можно сделать так: __flash char[xxx];
В IAR на С это можно сделать так: __flash char[xxx];
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: [ATmega168 WinAVR] Длинные const массивы - возможно ли?
Для WinAVR размещение в program flash массива делается так:
Инклудим
#include <avr/pgmspace.h>
Объявляем массив констант
const uint8_t array[] PROGMEM ={1,2,3,4,5};
Используем
a = pgm_read_byte(&array[0]);
b = pgm_read_byte(&array[3]);
Также имеется
pgm_read_word() - читает 2 байта (word)
pgm_read_dword() - читает 4 байта (dword)
Инклудим
#include <avr/pgmspace.h>
Объявляем массив констант
const uint8_t array[] PROGMEM ={1,2,3,4,5};
Используем
a = pgm_read_byte(&array[0]);
b = pgm_read_byte(&array[3]);
Также имеется
pgm_read_word() - читает 2 байта (word)
pgm_read_dword() - читает 4 байта (dword)
Все будет только лучше, в крайнем случае - хуже.
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2183
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
Re: [ATmega168 WinAVR] Длинные const массивы - возможно ли?
Уже нашел на АВРфрикс... действительно удобно.
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...

