Probleme mit Struct

OP #2704152
Lesenswert?

Hallo, ich habe folgenden Code:
1
unsigned char Print1[15];
2
unsigned char Print2[15];
3

4
unsigned char PrintOut[5] = {0x01,0x02,0x03,0x04,0x05};
5

6

7
struct sttest
8
{
9
  unsigned char sttest_array[5];
10
};
11

12
struct test1
13
{
14
  struct sttest test1_array1;
15
  struct sttest test1_array2;
16
};
17

18
struct test2
19
{
20
  uint8_t test1_array1[5];
21
  uint8_t test1_array2[5];
22
};
23

24

25

26
#define Pointer1   ((struct test1 *)&Print1[0])
27
#define Pointer2   ((struct test2 *)&Print2[0])
28

29
void main(void)
30
{
31
  
32
  SystemInit();
33

34
  Pointer1->test1_array1.sttest_array[0] = PrintOut[0];
35
  Pointer1->test1_array1.sttest_array[1] = PrintOut[1];
36
  Pointer1->test1_array1.sttest_array[2] = PrintOut[2];
37
  Pointer1->test1_array1.sttest_array[3] = PrintOut[3];
38
  Pointer1->test1_array1.sttest_array[4] = PrintOut[4];
39

40
  Pointer1->test1_array2.sttest_array[0] = PrintOut[0];
41
  Pointer1->test1_array2.sttest_array[1] = PrintOut[1];
42
  Pointer1->test1_array2.sttest_array[2] = PrintOut[2];
43
  Pointer1->test1_array2.sttest_array[3] = PrintOut[3];
44
  Pointer1->test1_array2.sttest_array[4] = PrintOut[4];
45

46
  Pointer2->test1_array1[0] = PrintOut[0];
47
  Pointer2->test1_array1[1] = PrintOut[1];
48
  Pointer2->test1_array1[2] = PrintOut[2];
49
  Pointer2->test1_array1[3] = PrintOut[3];
50
  Pointer2->test1_array1[4] = PrintOut[4];
51

52
  Pointer2->test1_array2[0] = PrintOut[0];
53
  Pointer2->test1_array2[1] = PrintOut[1];
54
  Pointer2->test1_array2[2] = PrintOut[2];
55
  Pointer2->test1_array2[3] = PrintOut[3];
56
  Pointer2->test1_array2[4] = PrintOut[4];
57

58
  while(1);
59
}
Nach meinem Verständnis von sollte danach in Print1 und Print2 das 
gleiche drin stehen.
Aber jedoch bei den verschachteten Structs, beginnt er das zweite Array 
erst bei der Adresse 0x08 einzutragen, weiß einer wieso das so ist?

Verwende den GNU Compiler.

Vielen Dank
#2704190
Lesenswert?

Steffen Gerner schrieb:
> Arbeite mit dem Corssworks 2.2 für ARM.
>
> Mich wirft das ganze ein bisschen aus der Bahn, weil ich eigentlich
> nicht jedes struct nochmal schreiben wollte :(

Die Frage ist eher: Warum castest du da ein Array in Structs um. Das 
sind Operationen, die man eventuell ganz tief unten in einer Software 
machen kann, wo man irgendwelche über Schnittstellen hereinlaufende 
Daten in Structs zergliedert, aber ansonsten sind derartige Operationen 
meistens keine gute Idee. Immer wenn du etwas umcasten musst, solltest 
du dich sofort fragen, ob es da nicht eine bessere Möglichkeit gibt.


(Im Notfall kann man den meisten Compilern auch die Anweisung geben, 
keine Padding bytes einzufügen. Meistens ist das ein #pragma. "#pragma 
pack" oder so ähnlich. Wie das beim gcc ist, weiß ich nicht. Denn wie 
gesagt: Ich würde erst mal sehen, ob diese Array->Pointer Casterei nicht 
eigentlich schon eine ganz üble Operation ist)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren