Forum: Compiler & IDEs Speichergrenzen beim ARM9 mit GCC


von Stefan K. (syliosha)


Lesenswert?

Guten Abend miteinander

Ich habe folgende Union
1
union sdo_message_head
2
  {
3
    unsigned long int value;
4
    struct message_head
5
      {
6
        unsigned char command;
7
        unsigned short index;
8
        unsigned char sub_index;
9
      }message_head;
10
  }static sdo_message_head;

nun ist meine Frage, ob die Union, die innerhalb der 32bit Grenzen des 
ARM9 liegen dürfte, dort liegt und ob ich auf den short zugreifen könnte 
obwohl der über die 16bit Grenze liegen dürfte.

Ich weiß das ich die Structur geschickter legen könnte, aber ich wollte 
mir weitere Zuweisungen nach Möglichkeit sparen.

Ich benutze einen AT91SAM9263 mit dem GCC zusammen.

Vielen Dank im Vorraus für eure Antworten

Mit freundlichen Grüßen
Stefan Kunz

von (prx) A. K. (prx)


Lesenswert?

Was dabei wahrscheinlich rauskommt:

[...]
struct message_head
{
        unsigned char command;
        char filler;
        unsigned short index;
        unsigned char sub_index;
} message_head;
[...]

Es sei denn du bringt dem Compiler bei, dass er diese struct ohne 
Alignment packen soll. Nur ist der Zugriff dann weniger effizient.

von Mark B. (markbrandis)


Lesenswert?

Meinst Du so?

unsigned long int value | 32 Bit
unsigned char command   |  8 Bit
unsigned short index    | 16 Bit
unsigned char sub_index |  8 Bit

(kenne jetzt den ARM9 nicht, ist mehr oder weniger geraten)

von Stefan K. (syliosha)


Lesenswert?

Ja das war meine Frage. Hast du ungefähre Werte wie ineffizent der 
zugriff über das packed attribut wäre? Weil Ansonsten müßte ich einen 
32bit Wert erst in diese 3 Bestandteile aufdröseln verarbeiten und dann 
wieder zusammen schreiben müßte. An sich kein Problem, die andere Lösung 
wäre aber halt "eleganter".

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.