[Patch] Scripte laden ohne Ballast

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

Beitragvon rudi » 16.07.2010, 11:42

Hallo

Vielen Dank msl für deine Zusammenfassung.
Ich empfinde so etwas, bei solch einem Thema, als sehr hilfreich. Dabei kann ich auch sehen, ob meine Formulierungen noch verständlich sind.

msl hat geschrieben:Als nachteilig würde sich bemerkbar machen, dass der Skriptstart etwas langsamer erfolgt, weil das Skript erst geladen wird.
Dann aber bei JEDEM Script-Start. Dann kann der Speicher nach jedem Scriptende gleich wieder freigeben werden.

msl hat geschrieben:Ehrlich gesagt sehe ich da bisher keinen Vorteil, lasse mich aber gern vom Gegenteil überzeugen. Aus meiner Sicht ist das im Skript selbst machbar. Hinsichtlich PTP-Interface sehe ich sogar Nachteile.
1. Hat sich schon einmal jemand getraut SET_ZOOM im PLAY-Mode auszuführen?
2. Vieles ist im Script machbar. Wie viele Scripte verwenden denn RESTORE? Das sollte für "saubere" Scripte schon Standard sein um im Fehlerfall einen definierten Endezustand festzulegen.
3. Bei PTP sehe ich kein Problem, denn REC- und PLAY-Mode werden ja softwareseitig umgeschaltet.

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon gehtnix » 16.07.2010, 14:43

rudi hat geschrieben:Hat sich schon einmal jemand getraut SET_ZOOM im PLAY-Mode auszuführen?
Wozu sollte das gut sein?

click "zoom_in/out" habe ich in Diashow.bas benutzt zum Zoomen im Bild.

gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon msl » 16.07.2010, 15:49

Hallo gehtnix,

set_zoom ist nicht mit click "zoom_in/out" identisch. Für die Tastenfunktion ist abgesichert, dass im Wiedergabemodus nicht versehentlich gezoomt wird. Bei set_zoom sieht das nicht so eindeutig aus. Deshalb möchte rudi solche evt. Fehlfunktionen auch eindeutig ausschließen, indem man sie z.B. im Wiedergabemodus nicht zulässt.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon rudi » 16.07.2010, 16:12

Hallo alle zusammen.

msl hat geschrieben:Deshalb möchte rudi solche evt. Fehlfunktionen auch eindeutig ausschließen, indem man sie z.B. im Wiedergabemodus nicht zulässt.

Genau!

Gruß rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon gehtnix » 16.07.2010, 16:53

moin moin,

schon klar dass get und click nicht identisch sind.

Ich weiß ja nu schon mal gar nicht was rudi da im Code rumschubsen will. Dennoch geschieht es zum Nutzen von CHDK-DE!

Mal von mir einfach und so völlig naiv in die Hitze gedacht Bild
Alle Skripte werden im Play-Modus gesperrt.
Im Diashow-Skript muß dann ein Befehl gesetzt werden der die Ausführung dann doch erlaubt.

Wie sieht es damit aus? Momentan kann ich im laufenden Skript auf Wiedergabe schalten. Mach ich bei MD-Fast wenn ich die Position verändern will ohne dass er dadurch auslöst.

gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon gehtnix » 18.07.2010, 14:21

Servus,

man könnte doch alternativ auch in jedes Aufnahme-Skript

set_record 1

setzen.

Bei Wiedergabe set_record 0


gehtnix
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 12:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS990 IS

Beitragvon rudi » 12.09.2010, 11:30

Hallo zusammen,

msl hat geschrieben:Ja! Und da war ja rudi mal am Werkeln, diesen Umstand zu verbessern.
(http://forum.chdk-treff.de/viewtopic.php?t=2066)


Ja, das ist er auch noch. Leider z.Z. nur gelegentlich.

Erschwerend kommt hinzu, dass Scriptabläufe nicht nur in der script.c beahandelt werden, sondern auch in der kbd.c. Das möchte ich dabei gleich mit bereinigen.

Kurzfristig könnte ich eine Lösung für das uBasic Leerzeilen-Problem (Leerzeilen vor Scriptbeginn und fehlende letzte Leerzeile) anbieten. Den Script-Supportern sollte das einige Rückfragen ersparen.

rudi
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon msl » 12.09.2010, 17:58

Hallo rudi, alter ZX81-Bastler. :D

Mach mal in aller Ruhe. Kannst ja bei Gelegenheit deine Zwischenlösung zur Leerzeilenproblematik einstellen.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon rudi » 13.09.2010, 11:59

Hallo msl,

da die Gelegenheit gerade günstig ist, nun hier die Zwischenlösung zur uBasic-Leerzeilenproblematik.

Die Leerzeilen am Anfang werden beim Starten komplett übergangen (in tokenizer.c).

Um am Ende eine Fehlermeldung zu erzeugen musste ich nach einem Beispiel-Befehl schon sehr suchen. Die Ursache für eine Fehlermeldung ist, nicht alle Befehle akzeptieren ein mögliches Dateiende (EOF) auch als Zeilenende.
Einfachste Lösung - direkt beim Laden des Sriptes wird ein Zeilenende noch angehängt (in script.c). Ansonsten müssten alle betroffenen Befehle nachgearbeitet werden. Es sind zwar auch die LUA-Scripte davon betroffen, aber das eine Byte ... .

Gruß rudi
Dateianhänge
uBasic_Leerzeilen_patch.zip
Patch uBasic_CR mit Test.bas
Basis: trunk391
(2.14 KiB) 364-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon Nando » 13.09.2010, 13:40

Hallo rudi,
mir kam gerade ein Gedanke zu extern ausgelagerten Scriptteilen.

Zum Verständnis:
Bringt es eine Verringerung des Speicherverbrauches, wenn Funktionen in eigene Scripte ausgelagert und bei Bedarf geladen werden. Oder geht es in die andere Richtung, dass alles im Script enthaltene voraus geladen wird?

bis dann,
Nando
Canon PowerShot SX200 IS 100D (seit Mitte Nov 2009), Canon PowerShot A1000 IS 100b
Nando
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 257
Registriert: 11.11.2009, 15:55

Beitragvon CHDKLover » 13.09.2010, 14:36

Hallo Nando,
da das CHDK immer komplett im Arbeitsspeicher der Kamera ist, sind immer alle möglichen CHDK-Skriptbefehle zu jeder Zeit geladen.

CHDKLover
A610 100e CHDK-DE: aktuelle Version
Benutzeravatar
CHDKLover
Super-Mod
Super-Mod
 
Beiträge: 878
Bilder: 8
Registriert: 12.09.2007, 18:25
Wohnort: Dresden
Kamera(s): a610 100e

Beitragvon msl » 14.09.2010, 11:54

Hallo rudi,

deine kleine Änderung mit großer Wirkung habe ich eingecheckt (Rev. 393). Danke für die Bereitstellung. Damit sollten nun Probleme mit fehlerhaften Leerzeilen bei uBasic-Skripten der Vergangenheit angehören.



@Nando

Man sollte vielleicht noch anmerken, dass man mit Lua selbst erstellte Funktion auslagern kann. Diese werden in einer gesonderten Skript-Datei abgespeichert und können dann im eigentlichen Skript mit dem Befehl require ("Dateiname ohne Endung .lua") aufgerufen werden. Diese Datei muss sich im Ordner LUALIB befinden.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Nando » 14.09.2010, 14:34

Hallo zusammen,
@msl
das meinte ich mit 'Funktionen in eigene Scripte ausgelagern'. Die Frage oder mein Gedanke war dazu, ob es den Speicherplatzverbrauch verringert. Oder ist ein größeres Script, trotz seiner vielen Zeilen, in der Anzahl der Bytes zu vernachlässigen? Wenn die Scripte selber keinen Ballast darstellen, ist mein Gedanke in die falsche Richtung gegangen und nicht so wichtig.

bis dann,
Nando
Canon PowerShot SX200 IS 100D (seit Mitte Nov 2009), Canon PowerShot A1000 IS 100b
Nando
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 257
Registriert: 11.11.2009, 15:55

Beitragvon rudi » 22.09.2010, 08:16

Hallo,

CHDKLover hat geschrieben:Sollte man nicht vielleicht generell erst ein Script in den Hauptspeicher laden,
wenn es ausgeführt werden soll?

Ja, das ist eine gute Idee.

Also nun ein neuer Ansatz bei dem nur während der Scriptausführung dieses auch im Speicher geladen ist.
Bei Lua geht das leicht, da Lua ein Script direkt aus einer Datei laden und ausführen kann. Ein vorhergehendes reduzieren der Scriptgröße ist nicht erforderlich und sinnvoll.
UBasic-Scripte werden beim Laden direkt vor der Ausführung wie weiter oben erfolgreich getestet von für uBasic nicht benötigten Inhalten (Parameter, REM- und Leerzeilen, Leerzeichen am Zeilenbegin und -ende) befreit. Die Zeilenanzahl bleibt in jeden Fall erhalten. Das ist wichtig für die Fehlersuche.

Bei der Scriptauswahl im Auswahlmenü werden die Parameter direkt aus der Script-Datei gelesen und in den vorhandenen Parameterspeicher übertragen. Die Parameterzeilen des Scriptes belegen ebenfalls keinen zusätzlichen Speicherplatz (entgegen der vorherigen Version).
Das im Quelltext eingebettete default-Script wurde entfernt. Diese Aufgabe muss jetzt die default-Script-Datei erledigen. Diese ist bereits in der "script.h" mit "A/SCRIPT.BAS" definiert. Ein anderen Speicherort ist sicher sinnvoll.

Einen Nachteil hat dieser Verfahrensweise wenn die PTP-Schnittstelle allgemein nutzbar wird. Da die Parameter bei der Scriptauswahl verarbeitet werden und das Script erst direkt vor der Ausführung geladen wird, kann es während dieser Zeit verändert wurden sein. Die bereits verarbeiteten Parameter müssen dann nicht mehr zum aktuellen Script passen. Eine einfache Prüfvariante mittels Dateigröße ist implementiert, aber das ist eben keine Prüfsumme. Die Scriptausführung wird bei Ungleichheit nicht gestartet.

Ein Bug ist beim Testen noch aufgetreten den die A590 auch mit der Trunk-Version aufweist. Führt man ein fehlerhaftes-uBasic-Script aus erscheint die Fehlermeldung im Display links oben. Führt man jetzt ein Lua-Script aus, dann bleibt die uBasic-Fehlermeldung weiterhin erhalten. Betrifft das auch andere Kameras?

Als Grundlage zur Diskussion anbei die Patch-Datei für die beschrieben Anpassungen.

Gruß rudi
Dateianhänge
trunk406_script_handling_patch.diff
Patch Script-Abarbeitung
Basis: trunk406
(11.91 KiB) 398-mal heruntergeladen
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 510
Registriert: 11.09.2009, 11:27
Kamera(s): A590IS_101B, SX260_100B

Vorherige

Zurück zu Code-Ecke

Wer ist online?

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