Hallo, ich habe Probleme mit meinem Atmel SAM3U (ARM Cortex M-3, gcc arm-none-eabi): Ich habe eine funktionierende Software, mit dem ich den ARM flashe, alles läuft, alles gut. Dann ändere ich irgendwo im Programm eine Kleinigkeit (fernab vom Startup-Code, manchmal nur eine LED an/aus) und Peng, nix geht mehr: nicht mal der externe Quartz läuft an. Was passiert da? Macht der Linker da was falsch, so dass der Programmzeiger zu Beginn gleich im Nichts landet?
Der Fehler licht ganz einfach beim Relais. Wenn das Blinkrelais kaputtet ist, dann blinkt der Blinker nicht mehr.
Es ist nicht wetterabhängig, und mit dem Blinker hat'a auch nix zu tun. Hat jemand bitte vielleicht noch einen vernünftigen Vorschlag?
Sobald du eine vernünftige Fehlerbeschreibung gibst... Bisher weiß man nur, daß an deinem ARM irgendwas nicht mehr geht, wenn du irgendwo irgendwas änderst. Ein passender Rat wäre: Dann änder halt nix. ;-) Woran du erkennst, daß der Quarz nicht mehr anschwingt, bleibt auch unbekannt. Da der in der Regel auch nicht vom Programm abhängt, ist es auch unwahrscheinlich, daß deine Änderung am Programm sowas auslöst.
Das ist ja das fatale: Bei einigen Änderungen, die fernab vom Start-up Code sind, geht plötzlich gar nichts mehr. Der Original Atmel Beispiel-Code beginnt damit, wait states für Flash Zugriff auf 2 zu setzen, dann wird der Watchdog ausgeschaltet, dann werden die externen Oszillatoren gestartet (32k / 12MHz), dann werden die Variablen in den RAM kopiert / initialisiert. Dann erst geht's in die Main(). Genau das habe ich auch so übernommen. Alle funtkioniert wunderbar, nur bewirken kleinste Änderungen im Code, dass eben nicht mal mehr der externe Oscillator angeworfen wird (was ich mit Hilfe eines Oszis rausfinde). Das Programm hängt also nicht irgendwo, sondern springt schon gleich zu Beginn ins Nirvana. Deswegen meine Vermutung ob des Linker Problems. Ich kann das leider nur so allgemein beschreiben, da dieser Fehler unabhängig von der Art der Programmänderung auftaucht. Beispiel: ich ändere was an der UART-Ausgabe, peng, nix geht mehr. Dann schiebe ich irgendwo in den Programmstart eine LED-an Zeile um zu sehen wo er hängt, plötzlich geht's wieder...
Vielleicht habe ich den Fehler gefunden: Der SAM3U4 besitzt 2 SRAM Bänke (SRAM0: 32kB, SRAM1: 16kB), und der Stack Start _estack steht am Ende der ersten SRAM Bank SRAM0. Wenn ich nun viel SRAM benötige, könnte somit _estack übergebügelt werden?
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.