Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование FLASH памяти
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Andrew_k5
Хочу перенести константы строковые во флеш, как это сделать. Есть ф-ция вывода на экран сообщения stroka (volatile flash unsigned char *str,volatile unsigned char nstr)

Нужное сообщение вывожу командой stroka(" PRIMER TEKSTA ",1); Как бы все возможные выводимые сообщения хранить во флеш памяти.
Сергей Борщ
Цитата(Andrew_k5 @ Nov 19 2009, 11:22) *
Как бы все возможные выводимые сообщения хранить во флеш памяти.
Теперь все дружно напряглись и телепатически пытаются определить тип контроллера (AVR/PIC) и используемый вами компилятор.
Andrew_k5
Mega16
CodeVisionAVR 1.25.5 Professional
defunct
Цитата(Andrew_k5 @ Nov 19 2009, 11:28) *
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-
Например так:
Код
[/code]

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++;
  }
}
Andrew_k5
В 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[];
WHALE
1.Зачем в этим функциях volatile?
2.Покурите в хэлпе CV или в любой книжке по С String Functions.Для данного случая(для СV)нужна функция strcpyf.
defunct
Цитата(Andrew_k5 @ Nov 20 2009, 08:09) *
В IARе наверное не разберусь

Дык идея просто создать макрос, который будет сразу объявлять строку как flash и вызывать вашу функцию:

Код
#define  my_stroka(x, y) do {\
          static char flash str[] = x;\
          stroka( str, y);\
} while (0)


my_stroka("kuku", 55);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.