Hoi,
Ich möchte über einen Zeiger auf ein Zeiger-Array im Flash-Speicher
zugreifen, welche wiederum auf Arrays zeigen.
Benutzer AVR ist der Atmel 1284p.
1 | #include <avr/pgmspace.h>
|
2 |
|
3 | /* Byte */
|
4 | const uint8_t aByte PROGMEM = 123;
|
5 |
|
6 | /* int-Array */
|
7 | static const uint8_t aArray[] PROGMEM = {18, 3, 70};
|
8 | static const uint8_t bArray[] PROGMEM = {19, 4, 71};
|
9 | const uint8_t * const Array[] PROGMEM = {aArray, bArray};
|
10 |
|
11 | //Zeiger auf aArray[]
|
12 | static const uint8_t * const Pointer_to_Array PROGMEM = aArray;
|
13 |
|
14 | //Zeiger auf Pointer_Array
|
15 | static const uint8_t** const Pointer_to_PointerArray PROGMEM = Array;
|
16 |
|
17 | int main(void)
|
18 | {
|
19 |
|
20 | //Zugriff direkt auf Array
|
21 | uint8_t byte1 = (uint8_t)(pgm_read_word(&Pointer_to_Array[1]));
|
22 |
|
23 | //Zugriff direkt auf PointerArray
|
24 | const uint8_t *address_to_array = (const uint8_t*)(pgm_read_word(&Array[0]));
|
25 | uint8_t byte2 = (uint8_t)(pgm_read_word(&address_to_array[1]));
|
26 |
|
27 | //Zugriff über einen Zeiger auf das PointerArray
|
28 | //????
|
Mein Problem ist das ich bis jetzt nicht weiß, wie ich einen Zeiger auf
die Adresse des Zeiger-Arrays richte (Array[]), bzw wie ich diesen
wieder korrekt dereferenziere.
Ich hab schon verschiedenste Konstellationen ausprobiert, aber ohne
Erfolg
Compilerfehler:
1 | Error 2 cannot convert 'const uint8_t* const* {aka const unsigned char* const*}' to 'const uint8_t* const {aka const unsigned char* const}' in initialization
|
Der direkte Zugriff auf das Array[] klappt problemlos, indem ich mir
erst die Flash-Adresse des Arrays dahinter hole (aArray, bArray) und
dann einen Zeiger auf einen Wert des aArrays derefernziere.
Nur steh ich grad völlig auf dem Schlauch wie ich diesen Zeiger korrekt
erzeuge, ich hab schon im Forum stundenlang gesucht aber nichts
entsprechendes gefunden.
Ich möchte aus performancegründen vermeiden, das "NutzdatenArray" erst
in den RAM zu kopieren um dann darauf zuzugreifen.
Kann mir da jemand auf die Sprünge helfen?
mfg