Forum: Mikrocontroller und Digitale Elektronik C32, UINT32 Zeiger auf UINT8 Array


von Micha (Gast)


Lesenswert?

Hallo Zusammen,
1
typedef struct
2
{
3
 UINT16 a;
4
 UINT16 b;
5
....
6
 UINT8 data[255];
7
}__attribute__ (packed)
8
myStruct ;
9
myStruct packet;
10
-----------------------
11
12
13
UINT32* pData;
14
UINT32 var;
15
pData = (UINT32*) (packet.data);
16
.....
17
.....
18
19
(1)var = *pData;
20
pData += 4;
21
var = *pData;
Kann mir jemand den Fehler im obigen Code zeigen, immer an der Stelle 
(1) sturzt das System ab!

In dem Feld packet.data sind Daten als Bytes abgelegt, in der Funktion 
will ich die eingentlich als 32 Bit Daten bearbeiten,klapt aber nicht.

Danke für den Hinweis.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Kann die Hardware unaligned 32-Bit-Werte llesen?

Du greifst per int* auf möglicherweise nicht-alignte Daten, so daß der 
Compiler nicht mehr sehen kann, daß er eigentlich nur byteweise 
zugreifen darf.

von (prx) A. K. (prx)


Lesenswert?

Der MIPS Core des PIC32 ist vermutlich nicht in der Lage, von Adressen 
zu lesen, die nicht entsprechend ihrer Grösse korrekt justiert sind. 
Alignment-Problem.

von Micha (Gast)


Lesenswert?

ja, das wars, er kann es nicht.

vielen Dank

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.