Перейти к содержанию
    

размещение строк во flash

в GCC есть дефайн PSTR

описан так #define PSTR(s) ({static char __c[] PROGMEM = (s); &__c[0];})

легко использовать к примеру так- putLCD_P(PSTR("TEST"));

 

Как такое сделать в IAR?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__flash смотри в хелпе

Если я правильно помню IAR, то __flash не поможет.

__flash это эквивалент PROGMEM, а там вся фишка в GCC-шных расширениях синтаксиса (обратил внимание на то, что там стоят фигурные скобки внутри круглых, заведена переменная, ... и вообще как там всё написано?).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению в IAR так не сделать, потому что define не может возвращать значение, это расширение GCC.

В IAR это макрос должен был бы выглядеть так

#define PSTR(s) ({static __flash const char __c[]= (s); &__c[0];})

но работать он не будет :(

Здесь часто поднимались подобные вопросы, но решения я еще не видел.

Приходится руками описывать переменную

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); }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению в IAR так не сделать, потому что define не может возвращать значение, это расширение GCC.
Хм... А я всегда пользуюсь нижеприведенным и мне помогает :)

 

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

 

2. В опциях проекта: Project->Options->C/C++ Compiler->Extra options, в окне Command Line записать --string_literals_in_flash.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а разве нельзя сделать так: putLCD_P((u8 *) "TEST")?

так нельзя - указатели на флеш (память программы) и на данные не совместимы (доступ разными инструкциями)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...