Forum: Mikrocontroller und Digitale Elektronik GCC: Wie spricht man ein WorArray an?


von digifloh (Gast)


Lesenswert?

Hallo,

ich habe die GCC Wiki schon gefunden und gelesen aber nicht verstanden 
warum das so NICHT funktioniert.
Ich möchte mytable im Programmemory ablegen, im ATmega16 ist der RAM zu 
kostbar dafür.

Wie geht das nun? In ASM schreibt man ja *2 hinter den Label aber in C?


Getestet hab ich...
1
static const prog_uint16_t mytable[2] = {0x1323, 0x0f45};
2
3
void main(void)
4
{
5
  uint16_t read;
6
  
7
  read = pgm_read_word(&mytable+1);
8
}

MfG Frank'l

von Florian (Gast)


Lesenswert?

Einen Pointer bekommst Du am besten mit &mytable[1]

von Florian (Gast)


Lesenswert?

achso zur Erklärung:

mytable ist vom Typ static const prog_uint16_t [] was je nach Anwendung 
automatisch in static const prog_uint16_t * gecastet wird. Dieser Zeiger 
zeigt auf den ersten Eintrag.

Die beiden Einträge sind als static const prog_uint16_t als mytable[0] 
und mytable[1] erreichbar; Pointer darauf wären entsprechend &mytable[0] 
und &mytable[1]. Da aber durch einen Cast mytable auch ein Pointer ist, 
wäre auch mytable und mytable + 1 verwendbar. Der Compiler erkennt 
anhand des Basistyps, wie groß der Unterschied tatsächlich ist.

&mytable[0] und mytable, sowie
&mytable[1] und mytable + 1

zeigen jeweils auf die entsprechend gleiche Stelle.

von digifloh (Gast)


Lesenswert?

Super erklärt!

Ich find das sollte in die WIKI rein, so versteh auch ich es zu früher 
Stunde.

Funzt auch super... hab mit für &table[1] entschieden...


THX! Frank'l...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.