GCC: Wie spricht man ein WorArray an?

Gast #575166
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
Gast #575180
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren