mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm stürzt ab / seltsame Ausgaben


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein relativ großes Programm in BASCOM. Grob gesagt liest es 
einen UART ein und generiert Ausgaben auf einem zweiten UART. Nach 
einiger Zeit tritt ein seltsamer Effekt auf und zwar werden einfach 
wahllos irgendwelche Zeichen ausgegeben, diese Ausgaben kommen definitiv 
nicht in meinen "prints" vor. Falls es zu diesem Absturz kommt, werden 
die Zeichen sehr schnell hintereinander ausgegeben, sprich es sieht so 
aus als würde meine main Loop nicht mehr durchlaufen werden.

Ich würde ungerne das ganze Programm posten, auch weil es einfach 
ziemlich groß ist und es ein grundsätzliches Problem zu sein scheint. 
Könnte mir jemand einen Tipp geben, in welchen Bereichen ich suchen muss 
bzw was solche Fehler verursachen kann? Wird da irgendwie der Stack 
überschrieben?

Der µC ist ein Atmega644P.

Danke!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wird da irgendwie der Stack überschrieben?

Möglicherweise.

>Könnte mir jemand einen Tipp geben, in welchen Bereichen ich suchen muss
>bzw was solche Fehler verursachen kann?

Große Teile des Programms rausschmeißen und probieren
ob es dann wieder geht. Lange Texte z.B.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reicht es diese auszukommentieren oder komplett rausschmeissen?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Reicht es diese auszukommentieren oder komplett rausschmeissen?

Na was wohl? Kommentare fressen keinen Speicher auf dem uC;)

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe den Fehler gefunden, glaube ich.
Es lag an einer Funktion, aus der ich in einer if-Abfrage per return 
rausgesprungen bin. Habe dort am Anfang pushall und vor dem return 
popall hinzugefügt. Nun klappt es

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> Es lag an einer Funktion, aus der ich in einer if-Abfrage per return
> rausgesprungen bin. Habe dort am Anfang pushall und vor dem return
> popall hinzugefügt.

Huch, was es in Bascom nicht alles gibt.

Unter C springt ein Return nicht irgendwohin, sondern kehrt zum Aufrufer 
zurück.
Unter C ist ein Return uneingeschränkt an jeder Stelle möglich, 
ansonsten wäre es ein Bug des Compilers.
Unter C hat der Compiler die verdammte Pflicht, den Stack so 
aufzuräumen, daß das Return keine Unordnung hinterläßt.

Da scheint es also einige eklatante Unterschiede zwischen Bascom und C 
zu geben.


Peter

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jap, das wundert mich auch, vor allem weil ich eigentlich aus der 
Java-Ecke komme. Naja hinnehmen und nicht drüber wundern.

Alternativ C lernen, aber nicht bei diesem Projekt :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.