Ich musste mein Programm leider auf eine andere IDE portieren, dabei ist wohl leider einiges schief gelaufen. Ich kann zwar in den anderen Speicherbereich springen, aber das Programm friert dann direkt ein. Das deutet wohl auf falsche Übergabe der Vector Table hin. Hier mal mein Code, der eigentlich auch nur Standard Programmcode ist: typedef void (*pFunction)(void); pFunction Jump_To_Application; uint32_t ApplicationAddress; uint32_t JumpAddress; uint32_t VectTabOffset; JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application = (pFunction) JumpAddress; NVIC_SetVectorTable(NVIC_VectTab_FLASH, (uint32_t)VectTabOffset); __set_MSP(*(__IO uint32_t*) ApplicationAddress); Jump_To_Application(); Was mache ich falsch?
Könntest Du das Thumb Bit vergessen haben? Die konkreten Werte der Variablen wären auch interessant.
Was hat die IDE mit dem Fehler im Programm zu tun? Ist der Code beim Wechseln der IDE verloren gegangen? Oder hat die IDE andere Compiler/Linker/-Parameter, legt also den Code vielleicht wo anders hin?
Herbert schrieb: > Was hat die IDE mit dem Fehler im Programm zu tun? > Ist der Code beim Wechseln der IDE verloren gegangen? > Oder hat die IDE andere Compiler/Linker/-Parameter, > legt also den Code vielleicht wo anders hin? Beim Wechsel von Atollic Lite auf Coocox ist es mir genauso gegangen weil Coocox seine eigenen Linker Script verwenden wollte und eigenen CMSIS Libraries. Durch zwei kleine Einstellungen in Coocox funktionierte danach alles richtig und die Original Projekt Datei Struktur (Libraries, Linker Script, Startup files, CMSIS, Librray Path) konnte beibehalten werden so dass man dann ohne Änderungen wieder auf Atollic umsteigen kann/könnte. Mir war es wichtig dass beide Tool Chains die gleichen Startup files, Linker Script und CMSIS Libraries benutzen und es funktioniert alles 100%. Gerhard
Herbert schrieb: > Was hat die IDE mit dem Fehler im Programm zu tun? > Ist der Code beim Wechseln der IDE verloren gegangen? > Oder hat die IDE andere Compiler/Linker/-Parameter, > legt also den Code vielleicht wo anders hin? Vorher habe ich mit Eclipse gearbeitet, jetzt mit Keil uVision. D.h. vorher hatte ich Linker- und Makefiles, jetzt muss ich die Werte per GUI einpflegen. Ich habe das so vorgesetzt bekommen und normal funktionieren alle Abhängigkeiten. Den Teil mit der Sprungfunktion bearbeite ich allerdings als Einziger und Erster, damit hat hier keiner Erfahrungen. Könnte auch gut sein, dass ich das AXF-file, das ich vorher testweise geflasht habe, an die falsche Stelle gesetzt habe.
Jim Meba schrieb: > Könntest Du das Thumb Bit vergessen haben? Nochmal bitte für Fast-Anfänger. Ich mache das ganze noch nicht allzu lange. Ich habe mich einfach an die entsprechenden Dokumente von ST zu IAP gehalten. > Die konkreten Werte der Variablen wären auch interessant. Wird per Funktionsaufruf übergeben. Ich mache dann ein switch...case. Z.B. jemand möchte das Image in Sektor 3 des Flash schreiben, steht da: case 3: ApplicationAddress = 0x0800C000; VectTabOffset = 0xC000; break; JumpAddress errechnet sich ja dann aus ApplicationAddress.
Kai schrieb: > Ich musste mein Programm leider auf eine andere IDE portieren, Dann mach es doch so wie ich: schreib dir ne Batchdatei mit allen nötigen Compiler- Assembler- und Linkeraufrufen und fertig ist das Ganze. Mit sowas bist du schlichtweg völlig unabhängig von irgendeiner IDE. Aber mal zur Sache selbst: Du benutzt den GCC, ja? Ich hatte vor einiger Zeit mich mal über subtile Macken dieses Compilers geärgert: Sprungadressen, also Labels in einem Stück Thumb Code hatte er mir schlichtweg als ARM-Adressen in den Objektcode gebaut und der Linker hatte dann natürlich Interworkingcode dazwischengesetzt --> Absturz. Abhilfe schaffte nur ein weiterer Schalter (war wohl -thumbfunction oder so ähnlich..) und wehe man hat das vergessen. Vielleicht hast du hier irgendein artverwandtes Problem. Hast du IDA? Dann guck dir mal den erzeugten Code ganauer an. W.S.
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.