[uBasic] Stack-Überwachung für Schleifen-Befehle

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Stack-Überwachung für Schleifen-Befehle

Beitragvon rudi » 13.11.2009, 13:45

Hallo,

nach dem die Stack-Überwachung bei mehrzeiligen IF-Befehlen schon ihre Vorteile zeigen konnte (siehe hier), habe ich auch für Schleifen-Befehle diese hinzugefügt.

Befehle und neue Fehlermeldungen:
Code: Alles auswählen
SELECT "select: Stack ful", "bad end_select"
FOR    "for: Stack ful", "bad next"
DO     "do: Stack ful", "bad until"
WHILE  "while: Stack ful", "bad wend"

Damit währen nun alle Befehl-Stacks kontrolliert. Das sollte zu besserem uBasic-Code und weniger unerklärlichem Programmverhalten führen. Vor allem dem sorgfältigeren Umgang mit GOTO.

Weiterhin wurde die fehlende Initialisierung des SELECT-Stacks behoben.

Im Anhang das Patch, dass ich hiermit zur Diskussion stelle.

Gruß rudi
Dateianhänge
add_stack_errors_DE_BUILD129.diff
Patch: Stack-Überwachung für Schleifen-Befehle
(6.42 KiB) 71-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 500
Registriert: 11.09.2009, 12:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon gehtnix » 13.11.2009, 14:49

Hi,

was mach ich denn jetzt mit dem Patch und meiner Shell?

gruß gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon msl » 13.11.2009, 15:10

Hallo,

damit diese gute Arbeit auch getestet werden kann, habe ich sie in meinen Branch eingepflegt.

Der Branch ist mit Hilfe der CHDK-Shell ansprechbar.

Über die Shell selbst kann man wohl auch Patches einpflegen (Schalter "Source Tools"). So richtig kapiert habe ich aber bisher noch nicht, wie das funktioniert. :oops:

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon gehtnix » 13.11.2009, 15:30

msl hat geschrieben:Über die Shell selbst kann man wohl auch Patches einpflegen (Schalter "Source Tools"). So richtig kapiert habe ich aber bisher noch nicht, wie das funktioniert. :oops:
Habe ich mal soeben ausprobiert. Ganz einfach, Button DIFF - Trunk auswählen und dann Button PATCH die DIFF-Datei auswählen. Dann wird das in die "ubasic.c" einkopiert. Zumindest hat die Datei jetzt das aktuelle Datum.
Nachtrag Wenn ich mal aus dem DIFF "if(do_stack_ptr > 0) {" nehme so finde ich das in ubasic.c wieder.

Muss man halt immer wiederholen bis es dann im aktuellen DE-Build drinnen ist.

Da kannst Du mir ja auch den Farb-Patch vom Akku-Icon zukommen lassen :p

@rudi
Gibst Du mir mal ein Beispiel bei dem sich dann eine Fehlermeldung zeigt.

gruß gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon rudi » 13.11.2009, 19:28

Hallo gehtnix,

@rudi
Gibst Du mir mal ein Beispiel bei dem sich dann eine Fehlermeldung zeigt.


Aber sicher. Hier meine Testdateien.

Bei SELECT habe ich wegen der Unübersichtlichkeit zwei geschrieben (select_1.bas=OK; select_2.bas=ERR).

Bei WHILE gibt es eine Besonderheit, darum auch dort zwei. WHILE legt auf dem Stack seine Zeilennummer ab, um beim Erreichen von WEND zu dieser wieder zurückgehen zu können. Ist diese Zeilennummer mit der letzten auf dem Stack eingetragenen Zeilennummer indentisch, so wird diese nicht auf dem Stack abgelegt. Daher kann es kein Stack-Überlauf geben wenn man mit GOTO vor das WHILE springt (while_1.bas=OK; while_2.bas=ERR).

Gruß rudi
Dateianhänge
STACK.zip
Testdateien für Stack-Überwachung bei Schleifen-Befehlen
(1.97 KiB) 63-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 500
Registriert: 11.09.2009, 12:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon gehtnix » 14.11.2009, 01:09

Hi rudi,

Du Schlawiner!
gehtnix hat geschrieben:@rudi
Gibst Du mir mal ein Beispiel bei dem sich dann eine Fehlermeldung zeigt.
Da meinte ich nur ein Skript und nicht eine Datei mit 10 Skripten ;)

Aber soweit ist alles OK. Da scheint es dann auch mit dem DIFF und der CHDK-Shell zu funktionieren.

gruß gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon phcanon » 14.01.2010, 00:51

Hallo rudi,

danke für die sehr schnelle Antwort.
Muss meine Signatur noch anpassen. Ich hatte die Regeln anfangs mal gelesen.

Ich hatte im der Code Ecke unter Skript-Sammlung (getestet und allg. lauffähig) nachgeschaut.
Vielleicht sollten da die verbesserten/korrigierten Programme abgelegt werden.
Als Anfänger orientiert man sich sehr stark an diesen Beispielen.
Und man sucht dann leider die Fehler wie schon viele vor einem.
Wäre eine tolle Sache, am Datum sieht man dass die Skripte etwas älter sind aber man hofft dass Sie trotzdem problemlos laufen (geht ja auch meist so).

Ich hatte schon nach Stackoverflow ... usw gesucht aber wenn man nicht das richtige Schlüsselwort findet kommt man nicht weit. Danke für die Links.

Du weißt bestimmt schon im Schlaf wo was zu finden ist.

Gruss Peter
CHDK Einsteiger
IXUS 75 V 1.01B
IXUS 75 V 1.02A
phcanon
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 6
Registriert: 01.01.2010, 15:01
Wohnort: München


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste

cron