Сб янв 18, 2020 19:02:57
Вс янв 19, 2020 14:17:47
Вс янв 19, 2020 17:19:15
Вт янв 21, 2020 20:10:16
Ср янв 22, 2020 20:00:10
Пт янв 24, 2020 13:22:39
const char txt[3][9] PROGMEM = {"Text1","Text12","Text123"};
void lcd_putsf(const char *string) {
while (pgm_read_byte(string))
{
lcd_write(pgm_read_byte(string++));
}
}
lcd_putsf(txt[0]);
const char txt1[] PROGMEM = "Text1";
const char txt2[] PROGMEM = "Text12";
const char txt3[] PROGMEM = "Text123";
const char* const txt[] PROGMEM = {txt1,txt2,txt3};
const char* const txt[] PROGMEM = {txt1,txt2,txt3};
const char* const txt[] = {txt1,txt2,txt3};
Пт янв 24, 2020 14:52:01
Пт янв 24, 2020 15:15:26
Пт янв 24, 2020 16:37:58
Пт янв 24, 2020 16:55:28
const __flash char txt1[] = "Text1";
const __flash char* txt[] ={txt1,txt2,txt3}
Пт янв 24, 2020 18:42:11
const __flash char s1[] = "test1";
const __flash char s2[] = "test2";
const __flash char s3[] = "test3";
const __flash char* const __flash array[3] = {s1, s2, s3};
00000014 <array>:
14: 26 00 20 00 1a 00 &. ...
0000001a <s3>:
1a: 74 65 73 74 33 00 test3.
00000020 <s2>:
20: 74 65 73 74 32 00 test2.
00000026 <s1>:
26: 74 65 73 74 31 00 test1.
Пт янв 24, 2020 23:24:49
const __flash char s1[] = "test1";
const __flash char s2[] = "test2";
const __flash char s3[] = "test3";
const __flash char* const __flash array[3] = {s1, s2, s3};
const char s1[] PROGMEM = "test1";
const char s2[] PROGMEM = "test2";
const char s3[] PROGMEM = "test3";
const char* const array[3] PROGMEM = {s1, s2, s3};
void lcd_putsf(const char *string) {
while (pgm_read_byte(string))
{
lcd_write(pgm_read_byte(string++));
}
}
lcd_putsf(array[0]);
Сб янв 25, 2020 09:54:04
Сб янв 25, 2020 19:44:23
то же да не то же. чтобы считать байт из flash теперь надо просто написать flash_array[i] вместо pgm_read_byte(&flash_array[i]) - разница есть? а если использовать указатель const __flash char *ptr, то можно работать с указателем, как с любым иным - указывать он будет на байты во flash и извлекать оттуда без иных усилий.serg_svd писал(а):Опять тоже самое выходит, что с PROGMEM
элементарноserg_svd писал(а):а как тогда адаптировать функцию, чтобы она работала с const __flash?
void lcd_putsf(const __flash char *string) {
while (*string)
{
lcd_write(*string++);
}
}
Сб янв 25, 2020 22:24:43
см вышеСтудия версии 7.0.1188
Сб янв 25, 2020 22:48:44
Сб янв 25, 2020 23:33:04
по мануалу похоже никак
Вс янв 26, 2020 09:53:26
void lcd_putsf(const __flash char *string) {
while (*string)
{
lcd_write(*string++);
}
}
oleg110592 писал(а):В XC8 compiler (поддерживает и PIC и AVR), начиная с версии 2.05 достаточно просто const для размещения в program memory. Но надо установить Mplab-x.
Вс янв 26, 2020 11:00:11
я пользуюсь начиная с avr-gcc 4.9.2 багрепорты не читал, проблем не замечалoleg110592 писал(а):const __flash нормально (без багрепортов) заработала начиная с avr gcc 6
да ничем их заменять не надо!serg_svd писал(а):Чем их заменить то?
cont __flash char str[] = 'Hello';
printf_P(PSTR("Length of \"%S\" = %d"), str, strlen_P(str));
const __flash char str1[] = "String from FLASH";
const char str2[] = "String from RAM";
void lcd_puts(const char __memx *s){
while(*s) lcd_putch(*s++);
}
// следите за руками:
lcd_puts(str1); // выводим строку из flash
lcd_puts(str2); // выводим строку из ram
// найдите отличия в способе вывода строк из разных "памятей":)
Вс янв 26, 2020 11:16:10