Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компилятор WinAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
makwen
Кто-то знает, как компилятору WinAVR указать, что переменную нужно разместить в flash-память?!
Например, в компиляторе Keil (для МК51) это:
code int A;
А в IAR кажись это:
__flash int A;

А вот у WinAVR не понятно…..
beer_warrior
Смотреть в главе Program Space String Utilities в описании. Там много всякого....
А принципе есть такой финт:
__attribute__ ((section ("имя_секции"))) например .text или .eeprom.
можно применить к любому типу данных.
Tcom
const char a;
навсегда вписывает переменную во флеш)).
aesok
Цитата(Tcom @ Mar 21 2007, 17:53) *
const char a;
навсегда вписывает переменную во флеш)).

Наивный..... ив RAM тоже.

Анатолий.
neonix
Почему же ? в документации четко сказано о том что const автоматом заносится в флеш.
Сергей Борщ
Цитата(neonix @ Mar 22 2007, 15:29) *
Почему же ? в документации четко сказано о том что const автоматом заносится в флеш.
int puts(char const* string). Откуда будет браться содержимое строки? Судя по вашей документации - из флеш, а я уверждаю, что из RAM и модификатор const лишь запрещает внутри функции изменять данные на которые указывает string.
Приведите цитату из документации и полное название документации.
P.S. речь идет об AVR(!)
Kuzmi4
2 neonix - в винавре оно и во флеш и в рам(гдето прочитал, не вспомню, но точно)..
А на счёт секшенов - пробовал, на 2006-м+студия+житаг+мега16 - всё красиво, но почему то, после всех загрузок и выхода на ресет, я этой константы не наблюдал, потому решил закинуть это гиблое дело (в иаре всё просто) , и хранить в еепроме что надо...
Хотя может у меня руки кривые....но в общем получил такой резалт...
boez
Да, не путайте народ. const хорошо работает на армах, там действительно кладется во флеш и все. На авр инициализированные константы кладутся в специальную секцию флеши, потом по старту/ресету переписываются в рам и оттуда уже юзаются. Это связано с гарвардской архитектурой аврки и неприспособленностью gcc к такого рода архитектуре. Чтобы положить константу только во флеш, в gcc применяется атрибут progmem:

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

Но следует помнить что это отдельное адресное пространство! Потом для обращения к этим константам нужно обязательно применять функции из <pgmspace.h> и строковые типа printf_P ! Например c=pgm_read_byte(msg+2) или printf_P(msg). Прямые обращения не сработают.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.