ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
1003 Топик полностью
Этo_Я_oпять (15.12.2003 03:26, просмотров: 1) ответил 0men на Если так, беру в таком случае слова обратно. Кста, раз вы уже его юзали (+)
Ответ: Не знаю, как он дает, но я вручную прописываю строки во флэш так:
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 памяти. И не приходится
городить отдельный макрос для каждого возможного количества аргументов.