Gast
#1089264
Hallo! Ich stolpere gerade zum x-ten mal über das Problem mit den aligned Speicherzugriffen vom ARM7 und deren Behandlung in GCC. Ich versuche mal zu erklären was genau passiert: Es gibt einen Buffer von 128 Bytes länge in den ein Gerät von ausserhalb seine Datenstrukturen ablegt. Auf das "wieviel aufeinmal" und wo habe ich dabei keinen Einfluss. Es handelt sich dabei um eine wild gewürfelte linked-list, deren Elemente wahlfrei verschieden lang und typisiert sind. Diese Datenstrukturen will ich nun auswerten. Der Einfachheit halber natürlich über entsprechende structs. Die Strukturen sind jeweils aus 8 und 16bit Werten zusammengsetzt und sind in sich durchaus aligned. Allerdings wandern die auf Bytes ausgerichtet in diesen Puffer. Der erste Block beginnt auf buffer[0] , der zweite beispielsweise auf buffer[9]. Wenn ich aber nun schreibe:
1 | |
2 | |
3 | |
4 | |
geht das grandios in die Hose und er greift mit dem ersten structure member auf Buffer[8] zu. Und nicht wie erwartet etwa buffer[9]. Das er das mit einem WORD nicht können kann habe ich schon herausgefunden. In diesem Falle besteht die Struktur aber ausschließlich aus Bytes, was er Architekturbedingt können müsste. Die Struktur selbst ist als typedef struct mit __attribute__((packed)) definiert. #pragma pack() habe ich auch schon versucht. Wie überrede ich denn nun den Compiler dazu, dass er den Pointer bitte nicht aligned setzten soll, sondern dahin wo ich ihn gerne hätte? Tausend Dank schonmal! Grüße, Matthias