Programm stürzt ab / seltsame Ausgaben

Gast #1602257
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!
Gast #1602262
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.
Gast #1602474
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
#1602492
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren