Gast
#1042529
Hallo zusammen ich versuche gerade ein paar Funktionen zusammenzustellen, die es mir auf einem AT91SAM7S256 erlauben, ins interne Flash zu schreiben. Habe dafür zuerst mal das Kapitel über den Embedded Flash Controller (EFC) gelesen und mich dann ans Programmieren gemacht. Was dabei rausgekommen ist, könnt ihr im Anhang sehen (zumindest das C Source File). Nur leider funktioniert das noch nicht so ganz, wie ich gerne möchte. Irgendwie springt der Programmverlauf aus der IntFlash_Write() Funktion immer zur Adresse 0x0 und kommt dann halt wieder in die main() Funktion (Soft Reset sozusagen). Ich habe dann mal angefangen die Quelle des Übels zu suchen und hab mich durch die Funktion durchgesteppt.... und lustigerweise lief dabei alles einwandfrei, ich konnte problemlos mehrere Pages des internen Flashs beschreiben. Ein bisschen verwirrt hab ich das Programm nochmals komplett (ohne Steps und Breakpoints) durchlaufen lassen und da ist es sofort wieder "abgestürzt". Durch setzen verschiedener Breakpoints konnte ich das Problem dann auf die _IntFlash_Ready() Funktion reduzieren (Zeile 73):
1 | |
2 | |
Solange ich VOR dem Ausführen dieser Funktionen einen Breakpoint setze, funktioniert alles einwandfrei. Nehme ich den Breakpoint raus, springt er von dort zu 0x0. Hat jemand einen Hinweis, woran das liegen könnte? Ich nehme mal an, dass meine _IntFlash_Ready() Funktion zu wenig lange wartet und der Prozessor eigentlich noch am Schreiben der Daten ist. Durch den Breakpoint hat er jedoch genug Zeit den Schreib-Vorgang zu beenden. Ist sowas möglich? Und wenn ja wie bzw was mache ich falsch? Ich prüfe eigentlich einfach das Ready-Flag im Status-Register des EFCs (da ich keine Interrupts zur Verfügung habe). Falls zusätzliche Informationen zum Umfeld oder zu Code-Ausschnitten benötigt werden, sagt einfach Bescheid. Bin für jeden Tipp und jede Hilfe sehr dankbar! Grüsse Sidd