Hallo,
ich habe eine Frage zu zwei 2dimensionalen Arrays (8x8), in dem 8bit
Daten gespeichert sind. Array1 und Array2 zeigen auf einen bestimmten
Bereich im Speicher. Diese Zuweisung soll nun vertauscht werden:
vorher:
Array1 => Speicherbereich1
Array2 => Speicherbereich2
nachher:
Array1 => Speicherbereich2
Array2 => Speicherbereich1
Meine bisherige Lösung sieht bisher folgendermaßen aus. Ich habe die
zwei Arrays angelegt. Zusätzlich dazu zwei Zeiger, die auf das erste
Element im Speicher der beiden Arrays zeigen:
1 | volatile uint8_t currentFrame [8][8];
|
2 | volatile uint8_t nextFrame [8][8];
|
3 | volatile uint8_t *cfPointer = ¤tFrame[0][0];
|
4 | volatile uint8_t *nfPointer = &nextFrame[0][0];
|
Das vertauschen dieser Zeiger habe ich hinbekommen:
1 | uint8_t *ptr = cfPointer;
|
2 | cfPointer = nfPointer;
|
3 | nfPointer = ptr;
|
Damit muss ich aber jetzt beim Zugriff auf diese Daten den Pointer
benutzen und z.B. aus
1 | PORTC = currentFrame[row][ct]
|
wird
1 | PORTC = *(cfPointer+row*8+ct)
|
Es funktioniert zwar und vielleicht behalte ich es auch fast so bei (nur
Arraydefinition+Pointer mit malloc+Pointer austauschen). Die Lösung mit
pointer auf Speicher ist näher an der Hardware, da 2dim im Speicher
sowieso hintereinander angeordnet wird, aber irgendwie geht auch
Transparenz/Lesbarkeit verloren.
Nun die Frage:
Wie kann ich die Zuweisung zum Speicher bei 2dim Arrays nach dem Prinzip
ganz oben ändern?
So etwas nach der Art
"currentFrame = &nextFrame"
Hintergrund:
Array 1 heißt currentFrame, auf das in schneller Abfolge von einer
Interruptroutine lesend zugegriffen wird. Array 2 heißt nextFrame und
wird von der main Routine neu aufgebaut und geschrieben. In einer
zweiten Interruptroutine sollen die Daten von nextFrame dem Array
currentFrame übergeben werden. Ein kopieren der Elemente wäre zwar
möglich, kostet aber wertvolle Rechenzeit.
Info:
Entwicklungsumgebung: AVR Studio 5
Compiler: GCC
C-Kenntnisse: Gerade erst damit angefangen