Forum: Mikrocontroller und Digitale Elektronik Unterschiedliche Adressen in Watch Window und Variablenzuweisung


von Heiko (heiko531)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe hier ein Verständnisproblem mit Pointern auf Funktionen. 
Angenommen ich habe folgenden Code (gcc compiler für einen PSOC5):
1
int myfunction(void)
2
{
3
    return 0;    
4
}
5
6
int main(void)
7
{
8
    uint32_t tmpAdress = (uint32_t)&myfunction;
9
10
    for(;;)
11
    {       
12
    }
13
}

Schaue ich mir die Adresse der Funktion myFunction im Watch Window an, 
bekomme ich die Adresse 84. Weise ich diese Adresse einer int Variable 
zu bekomme ich die Adresse 85. In beiden Fällen wurde mit &myFunction 
die Adresse geholt (siehe auch Bild). Kann mir jemand erklären, warum 
das so ist?

Vielen Dank und beste Grüße
Heiko

von Walter T. (nicolas)


Lesenswert?

ARM?

Dann das hier:

https://stackoverflow.com/questions/18655916/arm-cortex-m0-m3-m4why-pc-is-always-even-number-in-thumb-state

Kurzfassung: Ob eine Einsprungadresse gerade oder ungerade ist, hängt 
vom Instruction Set ab.

: Bearbeitet durch User
von Heiko (heiko531)


Lesenswert?

Hallo Walter,

ja, ARM.
Danke für den Hinweis in Richtung der geraden/ungerade 
Einsprungandressen. Dennoch interessant, dass die Zuweisung zu einer int 
Variable das Alignment auf Worte durchführt, wohingegen das Watch Window 
die un-aligned Adresse anzeigt.

Gruß
Heiko

von Frank O. (fop)


Lesenswert?

Mööp! Da geht es nicht um Alignment. Das niederwertigste Bit im 
Programcounter zeigt an, welcher Befehlssatz genutzt wird (Arm oder 
Thumb).

Bei der Cortex Reihe fällt das sofort auf, da die nur Thumb können, so 
dass ein falsches LSB Dich umgehend zum Hard-Fault-Handler bringt.

In keinem Fall kann ein Arm Befehle ausführen, die um ein Byte im 
Speicher verschoben sind.

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.