andr_k5 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Хочу перенести константы строковые во флеш, как это сделать. Есть ф-ция вывода на экран сообщения stroka (volatile flash unsigned char *str,volatile unsigned char nstr) Нужное сообщение вывожу командой stroka(" PRIMER TEKSTA ",1); Как бы все возможные выводимые сообщения хранить во флеш памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 132 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Как бы все возможные выводимые сообщения хранить во флеш памяти.Теперь все дружно напряглись и телепатически пытаются определить тип контроллера (AVR/PIC) и используемый вами компилятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andr_k5 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 (изменено) · Жалоба Mega16 CodeVisionAVR 1.25.5 Professional Изменено 19 ноября, 2009 пользователем Andrew_k5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Mega16 CodeVisionAVR 1.25.5 Professional Пример как это сделать в IAR'е. По аналогии можете применить себе: #include <stdlio.h> #ifdef __IAR_SYSTEMS_ICC__ #if defined(__IOM128_H) #define PROGMEM __farflash #elif defined(__IOM64_H) || defined(__IOM162_H) #define PROGMEM __flash #endif #endif #define pgm_print(x) do {\ static const U8 PROGMEM str[] = x;\ __pgm_print( str );\ } while(0) #define pgm_printf(x, ...) do {\ static const U8 PROGMEM pgm_str[] = x;\ char pgm_data_buf[sizeof(pgm_str)];\ __pgm_strcpy( pgm_data_buf, pgm_str);\ printf( pgm_data_buf, __VA_ARGS__);\ } while(0) void __pgm_print(const U8 PROGMEM *str); void __pgm_strcpy(char *dst, const U8 PROGMEM *str); в программе пользую: pgm_print("simple string"); pgm_printf("format string x = %d", x); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-JonnS- 0 19 ноября, 2009 Опубликовано 19 ноября, 2009 · Жалоба Например так: char __flash Hello[]={"Hello boy's"}; .... void main() { .... lcd_putsf(Hello); ..... } void lcd_putsf(unsigned char __flash *str) { unsigned char Count=0; while (str[Count]!=0x00) { lcd_putchar(str[Count]); // Вывод на LCD Count++; } }[/code] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andr_k5 0 20 ноября, 2009 Опубликовано 20 ноября, 2009 (изменено) · Жалоба В IARе наверное не разберусь, для вывода на LCD не использую стандартные функции. Как передать строковую константу в stroka (volatile flash unsigned char *str,volatile unsigned char nstr) Допустим есть flash char string[]="This is a string constant"; и есть volatile unsigned char buf_lcd[bUFFER_SIZE] не получается написать buf_lcd[]=string[]; Изменено 20 ноября, 2009 пользователем Andrew_k5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 20 ноября, 2009 Опубликовано 20 ноября, 2009 · Жалоба 1.Зачем в этим функциях volatile? 2.Покурите в хэлпе CV или в любой книжке по С String Functions.Для данного случая(для СV)нужна функция strcpyf. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 20 ноября, 2009 Опубликовано 20 ноября, 2009 · Жалоба В IARе наверное не разберусь Дык идея просто создать макрос, который будет сразу объявлять строку как flash и вызывать вашу функцию: #define my_stroka(x, y) do {\ static char flash str[] = x;\ stroka( str, y);\ } while (0) my_stroka("kuku", 55); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться