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


von Alex (Gast)


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!

von holger (Gast)


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.

von Alex (Gast)


Lesenswert?

Reicht es diese auszukommentieren oder komplett rausschmeissen?

von holger (Gast)


Lesenswert?

>Reicht es diese auszukommentieren oder komplett rausschmeissen?

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

von Alex (Gast)


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

von Peter D. (peda)


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

von Alex (Gast)


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 :)

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
Noch kein Account? Hier anmelden.