Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.09.2007, 18:51
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Задание массива во Flash AVR на Си в AVRStudio + WinAVR
Написал проект на Си в среде AVRStudio + WinAVR ~10Кбайт для ATmega64-128, все нормально работает, но в проекте есть кусок - неизменяемый массив ~2Кбайт, который как видно на симуляторе загружается в ОЗУ и оттуда прога выбирает по индексу необходимые элементы - все как обычно, как у всех. Но хочется сэкономить ОЗУ, ведь его относительно мало (задача в последующем может потребовать еще ОЗУ) а размера Flash более чем достаточно (64-128Кбайт, занято только 10) и не знаю как в WinAVR задать этот массив размещенным во Flash, чтоб оттуда только по индексу, находящемуся в ОЗУ прога выбирала элементы. Файл pgmspase.h к проекту подключен, массив объявлен как "uint8_t". Как его объявить средствами WinAVR, чтоб он не грузился в ОЗУ при запуске проги и с помощью каких средств WinAVR обращаться к элементам массива, находящихся во Flash?
|
|
|
|
02.09.2007, 19:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
Re: Задание массива во Flash AVR на Си в AVRStudio + WinAVR
Это есть в справке
Код:
|
include ‹avr/pgmspace.h›
const char foo[] PROGMEM = "Foo";
const char bar[] PROGMEM = "Bar";
PGM_P array[2] PROGMEM = {
foo,
bar
};
int main (void)
{
char buf[32];
strcpy_P (buf, array[1]);
return 0;
} |
|
|
|
|
02.09.2007, 19:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
А вот рабочий кусочек
Код:
|
#include ‹inttypes.h›
#include ‹avr/io.h›
#include ‹avr/pgmspace.h›
const char text1[] PROGMEM = "Test1"; во Флеш
const char text2[] PROGMEM = "Test2"; во Флеш
const char text3[] PROGMEM = "Test3"; во Флеш
const char text4[] PROGMEM = "Test4"; во Флеш
PGM_P menu[4] PROGMEM = { text1, text2, text3, text4 }; массив строк во флеше
int main(void)
{
DDRB = 0xff;
char buffer[10]; символьны йбуфер в ОЗУ
strcpy_P( buffer, menu[1] ); заполнение буфера из флеша
PORTB=~buffer[4]; выводит 5 символ в порт из строки Test2 - это 2
for(;;);
} |
|
|
|
|
03.09.2007, 15:01
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
ник Isa спасибо. Уточни, где в справке можно посмотреть примеры задания во Flash ROM.
|
|
|
|
03.09.2007, 16:59
|
|
Частый гость
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
WinAVRdocavr-libcavr-libc-user-manualFAQ.html
Сам вот только с этим разобрался. На 2313 массив в ram не похранишь.
|
|
|
|
03.09.2007, 17:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Сообщение от Hoksmur
|
На 2313 массив в ram не похранишь.
|
Я не по авр выступаю - но, простите, не верю.
|
|
|
|
03.09.2007, 23:18
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
ник. Hoksmur - "WinAVRdocavr-libcavr-libc-user-manualFAQ.html " - не отвечает, скинь полную ссылку.
|
|
|
|
04.09.2007, 01:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от zelen536
|
ник. Hoksmur - "WinAVRdocavr-libcavr-libc-user-manualFAQ.html " - не отвечает, скинь полную ссылку.
|
В директории куда установлен WinAvr есть папочка Doc, в ней... Дальше разберетесь
|
|
|
|
04.09.2007, 17:35
|
|
Частый гость
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
Сообщение от Hoksmur
|
На 2313 массив в ram не похранишь.
|
Я не по авр выступаю - но, простите, не верю.
|
Технически - можно, неспорю. Строки там, еще. Мне надо минимум пару массивов по 512 байт. Даже для хранения в ROM пришлось простейшую компрессию делать.
|
|
|
|
05.09.2007, 10:54
|
|
Заблокирован
Регистрация: 31.03.2007
Сообщений: 129
Сказал спасибо: 6
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Т. е. если я пишу как на рис. то массивы располагаются в ОЗУ.
-- Прилагается рисунок: --
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
WinAVR+avrLibc+AVR Studio помогите разобраться
|
di_halt |
Микроконтроллеры, АЦП, память и т.д |
17 |
14.01.2009 23:04 |
Требуется помошь в Eclipse + AVR(plugin) + GDB(winavr)!
|
alekseyb |
Микроконтроллеры, АЦП, память и т.д |
2 |
03.06.2008 14:33 |
Программаторы PIC, AVR и FLASH памяти
|
ST_Senya |
Микроконтроллеры, АЦП, память и т.д |
12 |
22.11.2007 19:23 |
AVR Studio & WinAVR
|
chipman |
Proteus, KiCAD и другие ECAD |
1 |
15.05.2007 12:17 |
Запись данных AVR микроконтроллера на Flash-USB без ПК
|
Arsenal |
Микроконтроллеры, АЦП, память и т.д |
8 |
31.10.2006 21:12 |
Часовой пояс GMT +4, время: 18:49.
|
|