Stefan schrieb:
> uint8_t test(const uint8_t *data, uint8_t pos);
die Funktion muss aber auch wissen, dass der Pointer data ins Flash
zeigt und nicht ins Ram
1 | uint8_t test(const __flash uint8_t *data, uint8_t pos)
|
2 | ...
|
Nur dann kann der Compiler entscheiden, wie der Mechanismus sein muss,
mit dem er bei
vorgehen muss, um den Pointer zu dereferenzieren. Aufs RAM werden andere
Maschinenbefehle benutzt, als wie wenn die Daten aus dem Flash kommen.
> Die Funktion 'test' soll in meinem Fall Arrays als ersten Parameter
> akzeptieren, welche im Flash als auch im RAM liegen können.
In dem Fall, wenn beides möglich sein soll, kannst du nicht __flash
benutzen, sondern du musst __memx benutzen.
Mittles __memx wird data dann ein 3 Byte Pointer, in dem neben der
Adresse dann auch noch die Information enthalten ist, ob es sich um
einen Flash oder einen SRAM Pointer handelt.