Moin!
Ich habe an der UART meines Atmega8 eine GPS- Maus angeschlossen, dessen
Informationen fleissig gelesen und angezeigt werden.
Mein Problem: wenn -warumauchimmer- kurz die Verbindung getrennt wird,
so bleibt der Atmega stehen.
Warum?
Vermutung: durch das Abstecken entsteht ein Zeichenwirrwarr, in dem sich
eine Folge befindet, die als Was-auch-immer-Befehl interpretiert wird.
Gibts da Abhilfe?
Ja - Programmieren lernen.
Scheinbar verwendest du Code ohne über dessen Funktion zu kennen, sonst
hättest du die Frage nicht, oder zumindest nicht so gestellt.
Hättest du Ahnung von dem was du tust, wüsstest du erstens welcher Teil
des Programms dafür verantwortlich ist und zweitens wie du
Fehlinterpretationen abfangen kannst (Stichwort: Timeout).
Der AVR interpretiert nämlich ein bisschen gar nichts, höchstens dein
Programm. Wenn der AVR selbst abschmiert, hast du Probleme mit der
Stromversorgung.
mfG
Markus
UART dient nur zum Datenaustausch. Diesen Austausch machst du selbst in
deinem Programm auf dem Mega. Du kannst also sehr wohl mechanismen
einbauen, dass ausgewertet wird, ob die Daten richtig/sinnvoll sind oder
nicht.
>Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues>Programm für Dich!"- Befehl?
Dein Mega bekommt über UART ein neues Programm von der GPS Maus?
Stephan R. schrieb:> Vermutung: durch das Abstecken entsteht ein Zeichenwirrwarr, in dem sich> eine Folge befindet, die als Was-auch-immer-Befehl interpretiert wird.> Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues> Programm für Dich!"- Befehl?
Nö.
Das was über die UART kommt wird ja nicht als Programmcode
interpretiert.
Das sind einfach nur Daten, die von deinem Programm weiter verarbeitet
werden. Wenn dein Programm aber nicht damit klarkommt, dass über die
Schnittstelle etwas anderes hereinkommt als es erwartet, dann kann es
schon sein, dass dein Programm sich andere wichtige Daten überschreibt
und als Folge davon dann unvorhergesehene Dinge passieren.
> Gibts da Abhilfe?
Programm fehlerfrei schreiben.
Beim Programmieren auch immer ein Auge darauf haben: Was kann an dieser
Stelle alles passieren.
Stephan R. schrieb:> Gibt es denn nicht auch einen "Achtung, Chip, hier kommt ein neues> Programm für Dich!"- Befehl?
Du solltest doch am besten wissen, was Du in den ATmega8 einprogrammiert
hast.
Oder ist das Programm garnicht von Dir?
Peter
Stephan R. schrieb:> Er "kackt so richtig ab". Danach hilft -vergessen zu erwähnen, sorry-> nur erneutes Flashen.
Das ist ziemlich unwahrscheinlich.
Wenn ein Druck auf den Reset Knopf nicht hilft, musst du schon sehr
unglücklich in deinem Programm zugeschlagen haben.
Aber spätestens nach einem Strom Aus / Strom ein, muss wieder alles
normal sein.
Sofern du die GPS Maus erst nach dem µC startest, natürlich :-)
Denn ansonsten steigt der µC schon wieder schräg in eine Übertragung ein
und das nächste Abkacken gleich nach dem Hochfahren ist nur eine Frage
von Millisekunden.
Karl heinz Buchegger schrieb:> Aber spätestens nach einem Strom Aus / Strom ein, muss wieder alles> normal sein.
der µC kann ich auch sein eigenen Flash überschreiben. Sonst würde es ja
keine bootloader geben.
Ich halte es zwar hier für unwarscheinlich aber möglich ist es.
Stephan R. schrieb:> Dochdoch. Aber mit meinem geschulten Ohr höre ich ganz leise heraus,> dass es an meim Programm liegen KÖNNTE.
Da musste ich wirklich lachen =)
Peter schrieb:> Ich halte es zwar hier für unwarscheinlich aber möglich ist es.
So war das auch auf den Fragesteller gemünzt.
Ich erinnere mich ja noch, dass er GPS auswerten will und wie üblich
keine Ahnung von Stringverarbeitung hat :-)
D.h. er hat mit 99% Sicherheit das SRAM niedergebügelt. Höchst
wahrscheinlich in der Empfangsschleife (Abfrage auf Buffer voll
vergessen). Da müsste er schon sehr viel Pech haben, wenn ein
misglückter Return dann ausgerechnet so landet, dass das Flash verändert
wird.
> keine Ahnung von Stringverarbeitung hat
Nanana! Während die Kiste dransteckt läuft alles tadellos!
Aber welche Missetaten könnte meinen Chip dazu veranlassen, seinen Flash
zu überschreiben?
Stephan R. schrieb:> Aber mit meinem geschulten Ohr höre ich ganz leise heraus,> dass es an meim Programm liegen KÖNNTE.
Benutze lieber dein (hoffentlich ebenfalls) geschultes Gehirn...
Stephan R. schrieb:> Nanana! Während die Kiste dransteckt läuft alles tadellos!
so ist es immer, man testet ja nur den normalfall. Der Fehlerfall ist
viel spannender.
Also mach es jetzt nicht so spannend und zeig uns doch bitte den
Quellcode.
Stephan R. schrieb:>> keine Ahnung von Stringverarbeitung hat>> Nanana! Während die Kiste dransteckt läuft alles tadellos!
Das ist keine Kunst.
Die Kunst in der Programmierung fängt dann an, wenn es gilt auch in
Fehlerfällen ein System noch am laufen zu halten. Ein Programm so zu
schreiben, dass es nicht durch fehlerhafte Daten aus der Bahn geworfen
wird, sondern die ignoriert/korrigiert/was_auch_immer_damit_macht. Aber
auf jeden Fall nicht abstürzt.
> Aber welche Missetaten könnte meinen Chip dazu veranlassen, seinen Flash> zu überschreiben?
Vergiss das fürs erste.
Mit an Sicherheit grenzender Wahrscheinlichkeit überschreibst du den
Flash nicht. Dazu müsste man noch eine ganze Handvoll Zusatzannahmen
treffen, was noch gleichzeitig alles schief gelaufen ist.
Occams Messer sagt: Das ist es höchst wahrscheinlich nicht
Nicht wenn ich mich so zurückerinnere, welche Schwierigkeiten du bei
banalem Stringhandling hattest. Das ist viel wahrscheinlicher die
Ursache.
lies einfach mal den Flash-Inhalt zurück nachdem nix mehr geht und
vergleiche das mit dem was drinstehen sollte (Hex-Files). Das könnte
etwas mehr Aufschluss geben.
Jörg
Joerg Wolfram schrieb:
Ich geh davon aus, dass du das vorschlägst, damit er sich davon
überzeugt, das es das nicht ist.
Denn ansonsten lockst du ihn auf eine falsche Fährte.
Und gerade Anfänger neigen gerne dazu allem Möglichen die Schuld zu
geben, nur nicht ihrem Programm. Egal wie unwahrscheinlich die weiteren
Möglichkeiten tatsächlich sind.
Hallo!
Karl heinz Buchegger schrieb:
> Die Kunst in der Programmierung fängt dann an, wenn es gilt auch in> Fehlerfällen ein System noch am laufen zu halten. Ein Programm so zu> schreiben, dass es nicht durch fehlerhafte Daten aus der Bahn geworfen> wird, sondern die ignoriert/korrigiert/was_auch_immer_damit_macht. Aber> auf jeden Fall nicht abstürzt.
Das stimmt, so sollte es immer sein, aber Microsoft hat das bis heute
nicht kapiert. Leg mal eine fehlerhafte DVD in dein DVD-Laufwerk ein und
das System verabschiedet sich oder du musst eine halbe Ewigkeit warten,
bis das System verstanden hat, dass die DVD nicht zu lesen ist ;-)
Nun aber Scherz beiseite. Ich selbst hatte mal ein ähnliches Problem.
Ich habe eine Platine mit einem FT232BM und einem ATMEGA-Prozessor
entworfen.
Mein Programm lief recht gut, aber jedes Mal, wenn ich während des
Betriebes das USB-Kabel des Computers ansteckte oder absteckte, stürzte
der Prozessor ab und nichts tat sich mehr. Nach einem Reset oder
Power-UP war trotzdem alles eingefrohren, der Prozessor tat nichts mehr.
Nur ein Neuflashen half. Dann ging der Prozessor wieder so lange bis man
das USB-Kabel wieder ansteckte oder absteckte. Danach wieder Neuflashen.
Es ist schon ein paar Jahre her. Ich arbeitete mit Codevision und
verwendete zusätzlich einen Watdog-Timer. Diesen hatte ich per Fuse-Bit
standardmäßig eingeschaltet. Der Watdog wurde jeodch früher in der
startup.asm standardmäßig abgeschaltet, was mich dazu verleitete eine
andere startup einzubinden. Es gibt ja diese Option "User External
Startup Initialization File", welche ich auswählte. Im Startup-File
schaltete ich die Watdog-Befehle ab und los ging es. Es schien alles zu
funktionieren, bis auf das oben geschilderte Problem. Die UART Sende-
und Empfangsroutinen waren schon des Öfteren eingesetzt worden und
hatten sich bereits fehlerfrei bewährt.
Erst nach langem Suchen kam ich dahinter, dass dieses externe
Startup-File, welches mit Codevision mitgeliefert wurde, irgendetwas
"Böses" macht. Keine Ahnung warum sich das System in diesem Fall so
verhielt, aber ein Abschalten der Option half. Das interne Startup-File
wurde wieder verwendet und der Fehler trat nie wieder auf. Leider musste
ich dann den Watchdog-Timer nach dem Start mit eigenen Befehlen wieder
aktivieren.
Ich hoffe, ich konnte helfen.
Schöne Grüße
Emil
Emil schrieb:> Erst nach langem Suchen kam ich dahinter, dass dieses externe> Startup-File, welches mit Codevision mitgeliefert wurde, irgendetwas> "Böses" macht.
soetwas macht doch neugierig, hast du nicht mal das ASM angeschaut?