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!
Warum jetz 2 Threads für den selben Kram? Und aus diesem widerlich zugespammten Eclipse soll man jetz was erkennen?
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?
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
In meinen Assembler-sourcen für den STM32F4.. habe ich am Anfang noch stehen: .code 16 .syntax unified sowie vor jeder Function .thumb_func foo: . . . das setzt in der adresse foo das bit 0, was für den thumb2-call notwendig ist.
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.
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
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.