Pisze sobie jak zwykle:
printf_P (PSTR ("Hejho\r\n"));
a tu nagle stringi przestają się wypisywać. :-o
Po bliższej analizie okazuje się, że przekroczyłem magiczną granicę 64KB kodu i stringi umieszczone w górnej połówce pamięci programu się nie wypisują. Problem w tym, że do funkcji printf_P przekazywany jest tylko
16-bitowy adres stringu, do tego wewnątrz zagrzebanego vfprintf kolejne literki pobierane są z pamięci programu przy pomocy makra PRG_RDB (tożsamego z pgm_read_byte_near, które nie umie sięgać powyżej 64KB).Macie jakieś błyskotliwe rozwiązanie tego problemu? Niby normalnie stringi leżą na początku programu, za wektorami przerwań. Ale w bootloaderze wszystko jest już wysoko (od 0x1e000), a i tam chciałbym korzystać z dobrodziejstw funkcji printf_P, nie zaśmiecając przy tym pamięci danych (czyli nie zwykły printf).