Assembler aufrufen aus C (ARM STM32)

Gast #3334304
Lesenswert?

Hallo !

Ich habe gerade ein (=mein erstes) Assembler File erstellt (genauer: aus 
einer Internetquelle kopiert). Darin ist eine Funktion foo definiert, 
die ich von C aus aufrufen möchte.

Dazu habe ich in (eine  bereits vorhandene) main.c den Prototypen für 
foo eingehängt. Beim Aufruf fooU() kommt es zu einem "HardFault" (siehe 
Bild). Was mache ich da falsch?

PS: foo() ist jetzt nach SystemInit() - geht aber trotzdem nicht!
Angehängte Dateien:
Gast #3334318
Lesenswert?

Zugespammt...das ist halt ein Testprojekt, das ich für alle mögliche 
Tests verwende. Nur weil's nicht schön ist, heißt es ja nicht, dass es 
nicht funktionieren kann.

Und für jemanden der's kann ist das Kram. Da geb ich dir recht. Dsas 
hilft mir aber nicht weiter... Und wie soll ich es hineinstellen, damit 
es ansehenswürdig ist?
Gast #3334414
Lesenswert?

Ich habe nun ein minimales CooCox Projekt erstellt (siehe Anhang), 
welches den Fehler reproduziert.

Sorry, dass ich dieses große Ding dranhänge, aber sonst heißt es wieder, 
man könne nichts erkennen...

Wieso wird bei foo() CLX aufgerufen, und nicht CL?

Muss das LSB nicht !=Null sein bei CLX ? Dort passiert jedenfalls der 
Fehler...

Danke und LG
Angehängte Dateien:
Gast #3334566
Lesenswert?

So etwas ähnliches hatte ich letztens auch.
Mein Problem war, dass ein ARM-Prozessor zwei verschiedene Befehlssätze 
kennt (ARM und Thumb). Mein C-Programm war in dem einen, das 
Assembler-Programm in dem anderen Befehlssatz. Und das hat dann nicht 
gepasst.

Ich musste entweder im Assembler auf den anderen Befehlssatz schalten, 
z.B. mit der .thumb oder .arm Direktive.
Oder im GCC mit -mthumb auf den entsprechende Modus umschalten.
Dann hat es geklappt.
Gast #3335370
Lesenswert?

Hallo, wenn im Assembler File .Thumb oder .ARM steht wird doch das 
automatisch so assembliert. Der Linker muss dann den Befehl BLX Rx 
automatisch erkennen und richtig setzen. Also so gehts bei mir 
jedenfalls.
Die Variable oder Adresse muss natürlich aus dem Assembler File mit 
public nach Außen sichtbar gemacht werden.
Gruß Sascha

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