Hi,
ich versteh's nicht.. ;-(
Ich habe im Programmspeicher folgende Daten:
1 | const unsigned int daten[] PROGMEM = { 0xf0aa, 0x0f55, .... }
|
Wenn ich nun mit
1 | val = pgm_read_word_far(FAR(daten) + offset);
|
darauf zugreifen will, bekomme ich nur die einzelnen Bytes (!!), auf die
'offset' zeigt. D.h. der Reihe nach: 0x00aa, 0x00f0, 0x0055, 0x000f,
ect.
Das pgm_read_word_far kann ich aktuell gegen ein pgm_read_byte_far
tauschen, ohne dass es irgendwelche Auswirkungen hat. Keine
Compiler-Warnung (GCC) ect.. ;-)
Das FAR() habe ich hier aus dem Forum und ist wie folgt definiert:
1 | #define FAR(var) \
|
2 | ({ uint_farptr_t tmp; \
|
3 | __asm__ __volatile__( \
|
4 | "ldi %A0, lo8(%1)" "\n\t" \
|
5 | "ldi %B0, hi8(%1)" "\n\t" \
|
6 | "ldi %C0, hh8(%1)" "\n\t" \
|
7 | : "=d" (tmp) \
|
8 | : "p" (&(var))); \
|
9 | tmp; \
|
10 | })
|
Wo liegt der Hund begraben..? :-)
Für Tipps wäre ich sehr dankbar!