Auf ein Array im FLASH greife ich wie folgt zu:
Variante 1
DDR[0] = pgm_read_byte( number[1][0] ) ;
Ergebnis: 0
Variante 2 (Value ist 1)
DDR[0] = pgm_read_byte( number[value][0] ) ;
Ergebnis: 26
Erhalte aber bei beiden Varianten nicht die Werte aus der Tabelle.
Was mache ich falsch?
Hier das Array:
prog_char number [8][3] =
{
{0x00, 0x00, 0x00},
{0x04, 0x00, 0x00},
{0x00, 0x00, 0x00},
{0x01, 0x04, 0x00},
{0x01, 0x02, 0x00},
{0x01, 0x02, 0x04},
{0x01, 0x02, 0x03},
{0x03, 0x00, 0x00},
} ;
Compiler GCC f. AVR. Controller ATTiny13V.
Danke für deine rasche Antwort, Falk.
Funktioniert 'leider' nicht. Ist aber auch verständlich, da number...
bereits eine Adresse ist, so dass die Angabe von '&' nicht sinnvoll ist.
Wenn ich eine reine Adressberechnung verwende geht es - aber auch nur im
Prinzip.
DDR[0] = pgm_read_byte( number + 0) ;
DDR[1] = pgm_read_byte( number + 1) ;
DDR[2] = pgm_read_byte( number + 2) ;
Hier taucht ein neues Problem auf - das Programm geht jeweils 3 Bytes
weiter! Bedingt durch die zweidimensionale Definition?
number + 0 * 3,
number + 1 * 3,
number + 2 * 3,
usw.
Wenn ich ein eindimensionales Array verwende ist dies kein Problem, aber
bei mehrdimensionalen ist das ziemlich doof.
@ Hans (Gast)
>Funktioniert 'leider' nicht.
Dann ist deine Arraydefinition Schrott, weil du schlauer sein wolltest
und einen eigenen Datentyp falsch definiert hast.
So ist es richtig.
1
charnumber[8][3]PROGMEM=
2
{
3
{0x00,0x00,0x00},
4
{0x04,0x00,0x00},
5
{0x00,0x00,0x00},
6
{0x01,0x04,0x00},
7
{0x01,0x02,0x00},
8
{0x01,0x02,0x04},
9
{0x01,0x02,0x03},
10
{0x03,0x00,0x00},
11
};
> Ist aber auch verständlich, da number...>bereits eine Adresse ist,
Keine Sekunde. number[1][0] ist der INHALT.
> so dass die Angabe von '&' nicht sinnvoll ist.
Und ob. Hab ich vor kurzem sehr ausführlich prorammiert, und es lief
sehr gut.
MFG
Falk
> Dann ist deine Arraydefinition Schrott, weil du schlauer sein wolltest> und einen eigenen Datentyp falsch definiert hast.
Immer langsam mit den Pferden: Der Typ prog_char stammt nicht von mir,
sonder stammt aus <avr/pgmspace.h>, die zu WinAVR gehört.
> Keine Sekunde. number[1][0] ist der INHALT.
Ich habe geschrieben, dass number eine Adresse ist, nicht das
numer[1][0] eine ist.
Das wäre ja zu einfach; man kann auch mehrere Foren gleichzeitig mit
diffusen Beschreibungen beschäftigen.
Sind ja nur gelangweilte Arbeitslose hier...