Forum: Mikrocontroller und Digitale Elektronik C: Thumb-Mode Programm ruft ARM-Mode Programm auf


von Karlheinz (Gast)


Lesenswert?

Ein Thumb-Mode Programm lädt ein ARM-Mode Programm ins RAM. Wie kann ich 
unter C zum ARM-Mode Programm verzweigen?

Die Programmierumgebung ist von Keil. Der Compiler ist der CARM.

von Tim S. (maxxie)


Lesenswert?

Generell: 
http://publications.gbdirect.co.uk/c_book/chapter5/function_pointers.html

Das LSB der Adresse unterscheidet über ARM/Thumb Mode. Ist es 0, wird 
der Code als ARM ausgeführt, ist es 1 als Thumb. (Die Adresse muss ja so 
oder so 32 bzw 16 Bit aligned sein, also steht das Bit dafür zur 
Verfügung)

von Karlheinz (Gast)


Lesenswert?

Der Wechsel in den ARM-Mode und der Sprung ins RAM funktioniert:

  __asm
  {
   LDR  R5,=0x200000
   BX   R5
  }

Jetzt läßt sich aber kein Code im RAM ausführen. Im Simulator kommt die 
Fehlermeldung:

*** error 65: access violation at 0x00200000 : no 'execute/read' 
permission

Was muß ich noch einstellen?

von (prx) A. K. (prx)


Lesenswert?

Richtige Adresse eintragen.

von (prx) A. K. (prx)


Lesenswert?

Wird die Funktion per Programm ad hoc erstellt, oder sollte Keil 
tatsächlich nicht in der Lage sein, Funktionen explizit als ARM 
Funktionen deklarieren zu lassen und ins RAM zu legen?

Wenn Keil Funktionen als ARM oder Thumb deklarieren kann, dann sollte 
ein entsprechender Zeiger auf solch eine Funktion ebenfalls ausreichen.

von Robert T. (robertteufel)


Lesenswert?

Wo haste denn den CARM ausgegraben? Der wird seit vielen Jahren nicht 
mehr gepflegt und ist nie so ganz zur Produktreife gelangt. Sollte aber 
trotzdem gehen, ein Wechsel zu MDK oder einem anderen aktuellen 
C-Compiler waere sehr empfehlenswert!
Robert

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.