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

 
 
> Компилятор WinAVR
makwen
сообщение Mar 16 2007, 19:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 3-09-06
Из: Украина
Пользователь №: 20 043



Кто-то знает, как компилятору WinAVR указать, что переменную нужно разместить в flash-память?!
Например, в компиляторе Keil (для МК51) это:
code int A;
А в IAR кажись это:
__flash int A;

А вот у WinAVR не понятно…..
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
boez
сообщение Mar 23 2007, 15:59
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Да, не путайте народ. const хорошо работает на армах, там действительно кладется во флеш и все. На авр инициализированные константы кладутся в специальную секцию флеши, потом по старту/ресету переписываются в рам и оттуда уже юзаются. Это связано с гарвардской архитектурой аврки и неприспособленностью gcc к такого рода архитектуре. Чтобы положить константу только во флеш, в gcc применяется атрибут progmem:

const char msg[]="Hello!" __attribute__((__progmem__));

Но следует помнить что это отдельное адресное пространство! Потом для обращения к этим константам нужно обязательно применять функции из <pgmspace.h> и строковые типа printf_P ! Например c=pgm_read_byte(msg+2) или printf_P(msg). Прямые обращения не сработают.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:30
Рейтинг@Mail.ru


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