Ответ: Не знаю, как он дает, но я вручную прописываю строки во флэш так:
const char __flash sss[] = "my string";
См. страницу 80 справочника по компилятору.
А флажок "place string literals and constants in initialized RAM"
я не снимаю (т.к. мне некоторые строки бывают нужны именно в RAM).
Кстати! В 3.10 появилась замечательная фишка - макросы с
переменным числом аргументов. Очень удобно стало "обувать"
форматированный вывод из FLASH, например:
extern void lcd_printfp (const char __flash *str, ...);
#define LPRINTF(str) do { \
static const char __flash __sss[]=##str##; \
lcd_printfp(__sss); \
} while ((char)0)
#define LPRINTFA(str,...) do { \
static const BYTE __flash __sss[]=##str##; \
lcd_printfp(__sss,__VA_ARGS__);} \
while ((char)0)
А потом вызывать:
LPRINTF("Some string\n"); //Это если аргументов нет
LPRINTFA("Sum %d + %d = %d\n", a, b, a+b); //С любым количеством аргументов
Строка формата при этом хранится в FLASH памяти. И не приходится
городить отдельный макрос для каждого возможного количества аргументов.
const char __flash sss[] = "my string";
См. страницу 80 справочника по компилятору.
А флажок "place string literals and constants in initialized RAM"
я не снимаю (т.к. мне некоторые строки бывают нужны именно в RAM).
Кстати! В 3.10 появилась замечательная фишка - макросы с
переменным числом аргументов. Очень удобно стало "обувать"
форматированный вывод из FLASH, например:
extern void lcd_printfp (const char __flash *str, ...);
#define LPRINTF(str) do { \
static const char __flash __sss[]=##str##; \
lcd_printfp(__sss); \
} while ((char)0)
#define LPRINTFA(str,...) do { \
static const BYTE __flash __sss[]=##str##; \
lcd_printfp(__sss,__VA_ARGS__);} \
while ((char)0)
А потом вызывать:
LPRINTF("Some string\n"); //Это если аргументов нет
LPRINTFA("Sum %d + %d = %d\n", a, b, a+b); //С любым количеством аргументов
Строка формата при этом хранится в FLASH памяти. И не приходится
городить отдельный макрос для каждого возможного количества аргументов.