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

Использование FLASH памяти

Хочу перенести константы строковые во флеш, как это сделать. Есть ф-ция вывода на экран сообщения stroka (volatile flash unsigned char *str,volatile unsigned char nstr)

 

Нужное сообщение вывожу командой stroka(" PRIMER TEKSTA ",1); Как бы все возможные выводимые сообщения хранить во флеш памяти.

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


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

Как бы все возможные выводимые сообщения хранить во флеш памяти.
Теперь все дружно напряглись и телепатически пытаются определить тип контроллера (AVR/PIC) и используемый вами компилятор.

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


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

Mega16

CodeVisionAVR 1.25.5 Professional

Изменено пользователем Andrew_k5

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


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

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

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


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

Например так:




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]

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


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

В 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[];

Изменено пользователем Andrew_k5

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


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

1.Зачем в этим функциях volatile?

2.Покурите в хэлпе CV или в любой книжке по С String Functions.Для данного случая(для СV)нужна функция strcpyf.

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


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

В IARе наверное не разберусь

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

 

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

 

my_stroka("kuku", 55);

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


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

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

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

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

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

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

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

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

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

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