Unterschiedliche Adressen in Watch Window und Variablenzuweisung

Gast #7518946
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

Angehängte Dateien:
Gast #7518965
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

#7519077
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.

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