Wpis z mikrobloga

#programowanie #cpp #cplusplus #arduino #avr

Mam problem, tzn. wcześniej było tak

unsigned char charMap[] = { ... }
unsigned char *pFont;
(jakiś kod)
pFont = &charMap[((unsigned int)(*c) - 32) * 14];
a teraz jest tak:

prog_uchar charMap[] PROGMEM = { ... }
unsigned char *pFont;
pFont = pgm_read_byte_near(&charMap + ((unsigned int)(*c) - 32) * 14);
i kompilator wyrzuca mi błąd

invalid conversion from 'uint8_t' to 'unsigned char*
Moglibyście mi pomóc? Jak temu zaradzić? Próbowałem konwersji na wskaźnik ale chyba coś robię źle, bo nie pomaga.
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

proguchar charMap[] PROGMEM = { ... }


@vifon_pikantny: char map musi być const. Przynajmniej w Atmel Stuido. Też to zalecam.

pFont = pgmreadbytenear(&charMap + ((unsigned int)(*c) - 32) * 14);


pgmreadbyte_near zwraca uint*_t a nie pointer. Argumentem jest adres ale jeśli chcesz uzyskać offset to nie stosuj &charMap tylko charMap (bez referencji, nazwa tablicy jest adresem jej początku). Tak samo unsigned int w środku
  • Odpowiedz
@vifon_pikantny: Tak czy siak Arduino IDE korzysta z tej samej biblioteki w ten sam sposób. Definiujesz tablicę (kompilator ustali jej adres) i operujesz takim wskaźnikiem. Żebyś go sobie gdzieś nie zapomniał zmienić, definiuj go (ją, tą tablicę) jako const, przecież i tak jest tylko do odczytu. To nie obowiązek ale dobra praktyka.
  • Odpowiedz