Hallo Leute!
Ich habe zur Zeit ein Problem mit einem Mikrcontroller (denke ich
zumindestens). Es tritt folgendes auf. Dem Controller wird über Putty
oder Net Cat Befehle zur Steuerung übertragen. Nach einer unbestimmten
Anzahl an Eingaben hängt sich der Controller nun auf. Könnte sich jemand
von euch vorstellen wo erstmal grob das Problem liegen könnte?
Dazu muss ich sagen, dass ich nicht all zu viel Ahnung von
Microcontrollern habe. Ich begleite dieses Projekt hauptsächlich nur, da
angenommen wurde, dass es sich um ein Netzwerkproblem handelt.
Besten Dank :)
Schnubb schrieb:> habe. Ich begleite dieses Projekt hauptsächlich nur, da> angenommen wurde, dass es sich um ein Netzwerkproblem handelt.
auch wenn es Netwerkprobleme sind, darf der µC nicht abstürzen. Also
wird es vermutlich doch ein Software fehler sein.
Aber ohne Quellcode und angabe des µC wird dir hier niemand weiter
helfen können.
Grundsätzlich kann man bei einigermaßen ordnungsgemäßer Schaltung davon
ausgehen, dass es am Programm liegt. Da können zum Beispiel Stack und
Daten-RAM kollidieren, wenn rekursiv Unterprogramme aufgerufen werden
oder zu viele Daten in den RAM geschrieben werden.
schon ein mal vielen Dank für die Antworten. Es wird das AVR32 EVK1100
benutzt. Kann man denn irgendwie überprüfen wieviel Daten in den RAM
geschrieben werden?
Wenn Du mit dem EVK1100 arbeitest, dann benutzt Du bestimmt das ASF,
oder?
Weil Du keine Info hast, wo der Prozessor steht, gehe davon aus, dass Du
keinen Debugger benutzt, oder? Denn dann bräuchtest Du nur den Prozessor
anhalten und siehst, wo die Gurke liegt. Übrigens siehst damit auch den
Füllgrad des Empfangsspeichers im RAM.
Also, den UC3A ohne Debugger zu programmieren, ist keine leichte Sache.
Finde ich - aber das mag man anders sehen. Wenn Du da Fehler suchst,
dann brauchst Du viel Zeit und Ausdauer.
Benutzt Du das FREERTOS? -> Weil die Kontext-Switcherrei machte die
Fehlersuche um eine Dimension komplizierter.
So würde ich ohne Debugger vorgehen (JTAGICE mkII oder CLONE - der soll
ja auch recht brauchbar laufen.) Es muß kein ONE! sein.
Wenn Du dem Board Nachrichten schickst, mußt Du doch wissen, wo in
Deinem Code der Text rausfällt, damit Du darauf reagieren kannst.
Benutze die Print_Debug-Funktionen aus einer der anderen Beispiele und
schaue über UART / RS323 auf Deinem PC z. B. über Hyperterminal, was und
wieviel ankommt.
So hättest Du die Möglichkeit über die Coderückverfolgung die Stelle des
Aufhängens einzukreisen. Aber das wird sehr mühsam.
Aber ehrlich: Schaff Dir einen Debugger an. Der UC3A ist einfach zu
groß, um durch aktives Nachdenken die Fehler aufzuspüren. Wie gesagt,
ich kenne auch einen Crack, der mich einen Warmduscher nennt. Aber d. h.
ja nicht, dass das Programmieren nur den Cracks vorbehalten ist.
Viel Erfolg.
> Nach einer unbestimmten Anzahl an Eingaben> hängt sich der Controller nun auf.
HAt das System (bestehende sendende Komponente mit Putty, empfangende
Controller-Komponente) schon mal vollständig fehlerfrei funktioniert,
oder ist dieses ein "initialer" Fehler im Systen (also noch nie richtig
gelaufen?
Konntest du auch schon mal die Sendende Hardware tauschen, wie verhält
es sich dann?
Liegen widrge Umgebungsbedingungen zwischen oder am Sender und Empfänger
vor (Lange Leitungen, schäbige Kabel, schlechte Spannungsversorgung
etc)?
Ich habe mal eine dumme Frage: Wie benutze ich denn den Debugger und
woher bekomme ich den?
Mein Vorgänger meinte, dass als er fertig war die Software zu schreiben
alles funktioniert hat. Dann wurde sie hier in Betrieb genommen und nun
hängt es. Aber laut dem, der die Hardware gemacht hat funktioniert alles
einwandfrei.
Kabel und so habe ich alles schon mal ausgetauscht und auch eine
Direktverbindung zu meinem Laptop aufgebaut. Auch mit anderen Pcs
funktioniert es nicht.
Andere Frage:
Wie ist die Verbindung von Controller und PC?
Ich hab hier n ähnliches Problem, habs erst au aufn Controller
geschoben, der was aber net. Konstellation hier:
Attiny, MAX232, Prolific RS232-USB-Wandler. Letzterer stürzt
unregelmäßig ab, also die Komponente bei der ichs am wenigsten erwartet
hatte.
Andere Idee: Timing-Problem? Wieder am Beispiel von RS232: Angenommen,
der Controller hat keinen Quarz, läuft auf 8Mhz und kann nur 9650Baud
statt 9600Baud erzeugen. Das funktioniert ne ganze Weile gut, aber
irgendwann verliert einer der beiden Partner n paar Bits und das ganze
System gibt den Löffel ab.
Zum Test wenn du keinen Debugger hast (und die Schaltung verändern
kannst) häng doch einfach ne LED hin, die du Blinken lässt. Wenn der
Controller abstürzt blinkt da au nix mehr :)
Gruß
Schnubb schrieb:> Aber laut dem, der die Hardware gemacht hat funktioniert alles> einwandfrei.
Glaub dem kein Wort!
Denn offensichtlich funktioniert es ja gerade nicht...
> Aber laut dem, der die Hardware gemacht hat funktioniert alles> einwandfrei.
Das würde ich meinem Softie auch erst mal sagen. Dann hätte ich
zumindest mal bis zum Wochenende Ruhe... ;-)
> Mein Vorgänger meinte, dass als er fertig war die Software zu schreiben
Noch ein Lügner!
Software ist nie fertig. Sie muß nur irgendwann ausgeliefert werden....
> Nach einer unbestimmten Anzahl an Eingaben hängt sich der Controller> nun auf.
Das tut er vermutlich nicht. Denn wohin sollte er sich hängen?
Also wird z.B. eher irgend ein EMV-Spike ein Byte senden, mit dem die
Software nichts anfangen kann und sich verklemmt, und evtl. in alle
Ewigkeit auf ein anderes Byte warten, das nie kommt...
> Nach einer unbestimmten> Anzahl an Eingaben hängt sich der Controller nun auf.
Wie unbestimmt?
Nach 10 Tastendrücken oder nach einem Tag?
Probiers mal so:
Lass den uC nur mit der Spannungsversorgung laufen (sonst kein anderes
Kabel angeschlossen) und steck nach 2 Stunden das Übertragungskabel an.
Bekommst du dann noch eine Antwort, steckst du diese Kabel wieder aus
und konntrollierst 2 Stunden später nochmal...
Auf dem EVK ist eine LED die blinkt, wenn der Controller in Betrieb ist.
Wenn ich keine Angaben mache, läuft der Controller auch die ganze Zeit
durch. Erst durch Steuerungseingaben hört er auf zu Arbeiten. Dies
erkennt man dann auch an der LED. Entweder sie ist aus oder sie leuchtet
die ganze Zeit (ich dachte, das liegt daran, in welchem "Zustand" sich
die LED befindet, wenn nix mehr geht). Die Verbindung zu dem Controller
stellt man mit einem Netzwerkkabel her.
Sag Schnubb,
Du hast ein EVK1100. Womit kompilierst Du die Software und wie lädst Du
Deine Software runter? Oder dokterst Du nur von außen hilfslos rum und
wunderst Dich, dass das drinnen im Prozessor nichts so funktionert, wie
Du es Dir vorstellst?
Thema Debugger:
Regulär kostet der ATJTAGICE mkII so ca 280 - 300 Euro. Wenn man bei den
Distributoren aufpasst Ineltek, Spörle, EBV, etc. gibt es gelegentlich
Bundel für weniger als die Hälfte + einem Board.
Wenn Dir das alles zu teuer sein sollte, gäbe es noch den AVRDRAGON für
ca. 50 - 60 Euro. Den muß man auf dem EVK1100 an dem JTAG-Port (polige
Stiftleiste anschließen) und natürlich auf der anderen Seite an den PC
(USB). Für den DRAGON soll es eine Firmware geben, mit der man den
AT32UC3A0512 flashen und debuggen kann. Mittlerweile gibt es das
AVRStudio5.0 in der beta Version. Kann man meiden, man ist dazu aber
nicht verpflichtet.
Übrigens, wenn Dir das mit der "print_debug"-Funktion über RS232 zu
schwierig sein sollte, könntest Du eine Textausgabe auf dem LC-Display
dip204 machen. Auch dafür gibt es fertige Funktionen, die nur aufgerufen
werden müssen und man sieht eine Reaktion. Ein Blickcode über eine
Leuchtdiode hilft einem irgendwann nicht mehr weiter.
...
So nach ein bisschen rumstöbern und wenn man die Leute 10 mal fragt habe
ich nun dieses Gerät gefunden. Den JTAGICE mkII um die Programme
draufzuspielen. Nun stehe ich noch vor der Aufgabe in den Debug-Modus zu
kommen und diesen richtig zu bedienen. Kennt da jemand ein gutes
Tutorial, wo das für blutige Anfänger Schritt für Schritt erklärt wird?
Vielen Dank :)
Beim AVR32Studio (neuste: Studio 2.6 mit der Toolkette 2.4.2) gibt es
den RUN-Button. Dabei wird der Code "nur" ohne Debugkontrolle
heruntergeladen.
Rechts oder links daneben gibt es den Käfer-Button. Wenn Du den drückst,
dann wechselt das View in eine andere Darstellung. Der Buildlauf
startet, falls Änderungen vorhanden sind, und wenn die Kompilation
erfolgreich, startet der Download.
Vorher über Scan-Targets den Debugger am PC finden lassen. -> Properties
Prozessor und Board auswählen.
Das Studio 2.6 will unter Projekt/Properties noch mals ein Target
mitgeteilt bekommen. Früher ging das irgendwie automatisch.
Viel Spaß beim Eclipse exploren.