Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: размещение строк во flash
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
BioWolf2000
в GCC есть дефайн PSTR
описан так #define PSTR(s) ({static char __c[] PROGMEM = (s); &__c[0];})
легко использовать к примеру так- putLCD_P(PSTR("TEST"));

Как такое сделать в IAR?
slog
__flash смотри в хелпе
ReAl
Цитата(slog @ Jun 11 2007, 18:47) *
__flash смотри в хелпе

Если я правильно помню IAR, то __flash не поможет.
__flash это эквивалент PROGMEM, а там вся фишка в GCC-шных расширениях синтаксиса (обратил внимание на то, что там стоят фигурные скобки внутри круглых, заведена переменная, ... и вообще как там всё написано?).
KRS
К сожалению в IAR так не сделать, потому что define не может возвращать значение, это расширение GCC.
В IAR это макрос должен был бы выглядеть так
#define PSTR(s) ({static __flash const char __c[]= (s); &__c[0];})
но работать он не будет sad.gif
Здесь часто поднимались подобные вопросы, но решения я еще не видел.
Приходится руками описывать переменную
static __flash const char[] ....
Или можно определить макрос вызова функции где первый параметр строка во флеше
#define p_call(f,s,...) {static __flash const char __c[]= (s); f(__c,__VA_ARGS__); }
Вот только если у функции один параметр строка - то этот макрос будет работать с ошибками, нужен такой вариант
#define p_call1(f,s) {static __flash const char __c[]= (s); f(__c); }
prottoss
Цитата(KRS @ Jun 12 2007, 04:40) *
К сожалению в IAR так не сделать, потому что define не может возвращать значение, это расширение GCC.
Хм... А я всегда пользуюсь нижеприведенным и мне помогает smile.gif

1. Подключить хедер "pgmspase.h"

2. В опциях проекта: Project->Options->C/C++ Compiler->Extra options, в окне Command Line записать --string_literals_in_flash.
SS85
а разве нельзя сделать так: putLCD_P((u8 *) "TEST")?
KRS
Цитата(SS85 @ Jun 12 2007, 03:49) *
а разве нельзя сделать так: putLCD_P((u8 *) "TEST")?

так нельзя - указатели на флеш (память программы) и на данные не совместимы (доступ разными инструкциями)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.