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.
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)
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.