hallo Leute, ich lese gerade von einer GPS Maus über den UART die Daten auf einen AVR Mikrocontroller ein. Dafür verwende ich im wesentlichen den Sourcecode unter http://www.mikrocontroller.net/attachment/highlight/31757. Die Passagen mit dem SPI-Port hab ich dabei rausgeworfen. Dafür hab ich noch eine Bibliothek für ein Display eingefügt. Die vom GPS über die RS232 Verbindung geschickten Daten hab ich mir dann gleich auf dem LCD anzeigen lassen. Das funktioniert noch recht gut. Wenn ich jetzt aber anfange die GPS Daten zu analysieren, dazu die string.h einbinde und beispielsweise ein strcmp verwende - läuft gar nichts mehr und ich krieg massig Buffer Overruns. Kann irgendwie nicht richtig glauben, dass es am Code selber liegt. Mein Verdacht geht in die Richtung, dass ich mit meinem Controller ein bisschen zu langsam bin, denn entgegen dem Codebeispiel von oben lasse ich meinen Controller nur mit 4MHz laufen und meine GPS Daten kommen mit 4800 baud. Ach ja und ich verwende die uart und lcd Bibliotheken von Peter Fleury. Was meint ihr dazu ? danke im voraus Mark
Die String-Funktionen sind teilweise seeeehr rechenintensiv und wenn dir dann noch der UART-Interrupt dazwischen funkt, kann es schon mal schnell Probleme geben. Kannst du nicht auch ohne die Textvergleiche auskommen? Ich vermute mal, dass das Gerät mobil betrieben werden soll. Wäre es trotzdem eine Alternative, den AVR mit 16 MHz (oder was dein Typ maximal hergibt) zu betreiben?
Wie schnell ist den die Akualisierungszeit deines GPS, denn wenn du die Daten nur Anzeigen lassen willst, würde es doch genügen wenn du 1-2mal in der Sekunde das Display refreshst. Und solange deine Strings verglichen werden einfach den TX-Interupt disablen. Grüßle lightninglord
Mark S. wrote:
> Kann irgendwie nicht richtig glauben, dass es am Code selber liegt.
Höchstwarscheinlich doch.
Du hast irgendwo Wartezeiten drin, die die CPU mit Nichtstun belasten
oder Funktionen, die Du viel zu häufig aufrufst.
Z.B. das LCD ist ein beliebter Kandidat, um CPU-Zeit zu vernichten.
Nur alle 0,5s nen neuen Text darzustellen reicht völlig aus, schneller
kann eh keiner lesen.
Ich würde auch der UART nen FIFO spendieren, die nur 3 Byte
Empfangspuffer sind sonst schnell voll.
Peter
Mark S. wrote: > hallo Leute, > > ich lese gerade von einer GPS Maus über den UART die Daten auf einen AVR > Mikrocontroller ein. Dafür verwende ich im wesentlichen den Sourcecode > unter http://www.mikrocontroller.net/attachment/highlight/31757. Ich vermute da (ohne mir den Code anzusehen) eher einen Programmierfehler. Sowas wie strcmp kann nicht rechenintensiv sein, das glaube ich mal garnicht. Eigentlich sollte sich der Controller bei dieser Anwendung in erster Linie langweilen. Is lustig wie wenig Vorstellungen manche Anfaenger von der Leistung von solchen CPUs haben :D
>Ich vermute da (ohne mir den Code anzusehen) eher einen
Lohnt sich auch nicht. Die kritischen Stellen stehen
im Code den er nicht gepostet hat.
"Buffer Overruns"? Du hast schon die strncmp_P Funktionen verwendet, und die konstanten Vergleichsstrings im Flash abgelegt, oder? Ansonsten kopiert dein AVR beim Start erstmal alle diese Strings in das RAM, und das wird dann ganz schnell knapp.
Hi Also mein GPS (ATMEGA128) macht zwischen 2 NMEA-Strings folgendes: NMEA-String decodieren Länge,Breite,Höhe,Geschwindigkeit,Richtung(Grafisch) darstellen Kartenausschnitt(240x128 Pixel) berechnen und anzeigen Position im Kartenausschnitt anzeigen Tasten abfragen Umgebungshelligkeit messen PWM für Hintergrundbeleuchtung einstellen und Däumchen drehen Also es ist massig Zeit. MfG Spess
Hi Uhrzeit und Anzahl der Satelliten hatte ich noch vergessen. MfG Spess
>und Däumchen drehen
Vielleicht braucht das viel Rechenzeit?
Ich habe in meinem PC auch einen Task, der hat immer 99% Rechenzeit. Den
kann ich aber nicht abbrechen. Keine Ahnung warum. Der heißt
"Leerlaufprozes"..
duck und weg
Hi Den habe ich mir auch irgendwie eingefangen. MfG Spess
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.