Strängar, arrays, PSTR oh my

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sneaky
Inlägg: 1621
Blev medlem: 22 juni 2009, 18:38:42

Strängar, arrays, PSTR oh my

Inlägg av sneaky »

Lysande titel, men men...

Det är så att jag försöker modifiera lite Arduino-kod (firmware till Ultimaker) och har stött på lite problem. Jag har aldrig rört Arduino förut så jag är mer förvirrad än vanligt...

Problemet är att jag försöker plocka ut ett värde från en array och använder en variabel som index men värdet på index-variabeln verkar inte vara vad jag tror.

Arrayen jag vill hämta värden från:

Kod: Markera allt

static const uint16_t f_04b036ptDescriptors[95][3] PROGMEM =
{
    {2, 7, 0},          //
    {1, 7, 2},          // !
    {3, 7, 3},          // "
osv osv
Funktionsanropet: lcd_lib_draw_small_stringP(15, 10, PSTR("M"));

Funktionen:

Kod: Markera allt

void lcd_lib_draw_small_stringP(uint8_t x, uint8_t y, const char* pstr)
{
    uint16_t offset;
    uint8_t index;

    for(char c = pgm_read_byte(pstr); c; c = pgm_read_byte(++pstr))
    {
        index = c - ' ';
        offset = f_04b036ptDescriptors[index][2];
offset bör efter detta innehålla värdet 148 (möjliga värden 1-322) men jag får istället ut -8211. Men om jag istället skriver offset = f_04b036ptDescriptors[45][2]; eller sätter c = 'M' så funkar det utan problem.

Om jag skriver ut värdet av c och index på displayen så visar de siffrorna jag förväntar mig (77 resp 45 i det här fallet). Så även om index verkar vara satt till 45 så går den inte att använda för att få ut värdet jag förväntar mig.

Någon som har en idé var jag ska börja nysta?
Zeela
Inlägg: 176
Blev medlem: 28 augusti 2008, 11:23:49
Ort: Åtvidaberg
Kontakt:

Re: Strängar, arrays, PSTR oh my

Inlägg av Zeela »

Vad händer om du skippar PSTR("M") och bara skickar med "M"?
Zeela
Inlägg: 176
Blev medlem: 28 augusti 2008, 11:23:49
Ort: Åtvidaberg
Kontakt:

Re: Strängar, arrays, PSTR oh my

Inlägg av Zeela »

Och kolla svaret på den här frångan:
http://stackoverflow.com/questions/1659 ... ctually-do
sneaky
Inlägg: 1621
Blev medlem: 22 juni 2009, 18:38:42

Re: Strängar, arrays, PSTR oh my

Inlägg av sneaky »

Om jag bara skickar "M" så får den lite frispel, området där jag skriver saker till displayen flimrar.

Och om jag förstår den andra länken så är syftet med PSTR att spara RAM genom att spara strängen i Flash istället. Funktionen (lcd_lib_draw...) tar emot startadressen för den sparade strängen och sen läser den byte för byte från Flash-minnet för att hämta tillbaka strängen?
Skriv svar