c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] Skriptsprache zur Bot-Programmierung ->Basic Display Routinen

Absender: Timo Sandmann
Datum: Mi, 30.11.2011 12:54:00
In-reply-to: <20111130065826.126820@xxxxxxx>
References: <E171B4EB-B636-4646-A1B5-18365383D5A7@xxxxxxxxxxxxxxx><07C94192229C4D7B9D57263A625F7C3B@FrankPC><B0A7F2D09B5145188D7CDDCF05DC46A8@FrankPC><DA88D128-3438-4103-AB86-7F3DAD134A59@xxxxxxxxxxxxxxx><A2D70DD76A2D4A00A50C75CDB6D1DDDA@FrankPC> <393B8E87-128D-4AD8-AD95-1E0EF6741AB3@xxxxxxxxxxxxxxx> <2287470E312A4B9C898A34850CF66774@FrankPC> <8BDA1398-0FE2-445F-ADBB-76AE47B5D23B@xxxxxxxxxxxxxxx> <20111130065826.126820@xxxxxxx>


Hallo Frank,

ja klar, wenn die Ausgabe nur erfolgt, falls der Basic-Screen aktiv ist, macht das die anderen Screens nicht mehr kaputt. Man hat zwar immer noch das Problem, dass die Ausgabe verloren geht, sobald man den Screen umschaltet, aber das ist sicherlich schon mal besser als gar keine Ausgabe.

Es gibt allerdings noch ein anderes Problem, das ich gestern vergessen hatte zu erwähnen: Mit dem Patch compiliert der Code nicht mehr für den echten Bot, weil display_puts() dort keine Funktion, sondern ein Makro ist. Der Hintergrund ist, dass im MCU-Fall die Ausgabe-Strings im Flash und nicht im RAM liegen. 


Für eine Realisierung über den PRINT-Befehl fallen mir grundsätzlich mal zwei Möglichkeiten ein:
1. PRINT schreibt in einen 80 Zeichen großen Puffer und der Display-Screen gibt den Puffer einfach komplett aus.

2. Gleiches Prinzip wie bei LOG_MMC_AVAILABLE: Die Ausgabe landet in einer Datei auf der MMC und das zugehörige Display bietet eine Anzeige dieser Datei mit Scroll-Funktion. Nur dass dort dann eben nicht die LOG-Ausgaben angezeigt werden, sondern die Basic-Ausgaben von PRINT. Diese Variante ist umfangreicher, hat aber den Vorteil, dass man nicht auf vier Zeilen beschränkt ist und immer noch zu den alten Ausgaben blättern kann (wie bei LOG_MMC). 

Wie genau sich das mit der PRINT-Implementierung von uBasic erreichen lässt, weiß ich jetzt allerdings nicht genau, die habe ich mir nicht weiter angeschaut.


Die Warnings müssten verschwinden, wenn du am Anfang von ubasic.c die beiden Includes
#include <stdlib.h>
#include <ctype.h>
ergänzt.

Gruß,
Timo


Am 30.11.2011 um 07:58 schrieb Frank Menzel:

> Hallo Timo,
> ja Du hast Recht, er schreibt auf den gerade aktiven Screen und bewirkt dort Zahlenwirrwarr. Könnte man da nicht auf den gerade aktiven Screen abfragen und nur wenn dies der Basic-Screen ist ausgeben? Das mit Verwenden des PRINT-Befehls und Umleitung auf den Screen ist mir zu wild,  muss ich jemand anderem überlassen wenn gewünscht.
> 
> Ich bekomme folgende Meldungen nach Einschalten des String-Supports:
> "../bot-logic/ubasic.c"
> ../bot-logic/ubasic.c: In function 'factor':
> ../bot-logic/ubasic.c:223:5: warning: implicit declaration of function 'atoi'
> ../bot-logic/ubasic.c: In function 'ubasic_free_all_mem':
> ../bot-logic/ubasic.c:1207:3: warning: implicit declaration of function 'free'
> ../bot-logic/ubasic.c:1207:32: warning: incompatible implicit declaration of built-in function 'free'
> ../bot-logic/ubasic.c: In function 'strfactor':
> ../bot-logic/ubasic.c:1554:5: warning: implicit declaration of function 'islower'
> ../bot-logic/ubasic.c:1554:5: warning: implicit declaration of function 'toupper'
> ../bot-logic/ubasic.c:1566:5: warning: implicit declaration of function 'isupper'
> ../bot-logic/ubasic.c:1566:5: warning: implicit declaration of function 'tolower'
> ../bot-logic/ubasic.c: In function 'ubasic_set_strvariable':
> ../bot-logic/ubasic.c:1617:4: warning: implicit declaration of function 'malloc'
> ../bot-logic/ubasic.c:1617:37: warning: incompatible implicit declaration of built-in function 'malloc'
> Finished building: ../bot-logic/ubasic.c
> 
> Gruß, Frank
> 
> 
> 
> -------- Original-Nachricht --------
>> Datum: Tue, 29 Nov 2011 21:22:23 +0100
>> Von: Timo Sandmann <mail@xxxxxxxxxxxxxxx>
>> An: Entwicklung rund um den c\'t-bot <ct-bot-entwickler@xxxxxxxxxxxxxxxxx>
>> Betreff: Re: [ct-bot] Skriptsprache zur Bot-Programmierung ->Basic Display	Routinen
> 
>> Hallo Frank,
>> 
>> zuerst: was für Fehler bekommst du denn, wenn UBASIC_STRING an ist? Ich
>> bekomme da nur ein paar Warnings, die aber im uBasic-Code selbst begründet
>> sind. Ich habe sie nicht korrigiert, damit "unsere" uBasic-Version nicht zu
>> sehr von der Originalen abweicht - das macht Updates immer umständlicher.
>> 
>> Nun zu deinem Patch: 1. das Prinzip funktioniert nicht mehr, wenn man den
>> Display-Screen umschaltet. Einerseits wird dann immer das uBasic-Display
>> gelöscht und andererseits gibt es Buchstabensalat, wenn die uBasic-Ausgabe
>> Daten anderer Screens überschreibt. Ich glaube, das ist nicht das, was der
>> Basic-Anwender haben möchte, denn auf Grund des geringen Platzbedarfs
>> kommt man beim Bot nicht drum herum, das Display auch mal umzuschalten. Die
>> derzeitige Lösung mit den verschiedenen Displayscreens löst das Problem ja
>> eigentlich ganz gut, das sollten wir mit einer uBasic-Ausgabe nicht kaputt
>> machen.
>> 
>> 2. Die Ausgabe erfolgt jetzt über Funktionsaufrufe, aber es gibt in Basic
>> ja eigentlich schon einen Befehl zur Ausgabe, nämlich PRINT. Ist es nicht
>> besser, den auch zu verwenden? Vor allem, weil dort auch schon die
>> Verarbeitung von Variablen usw. implementiert ist.
>> 
>> Gruß,
>> Timo
>> 
>> Am 29.11.2011 um 19:21 schrieb Frank Menzel:
>> 
>>> Hallo Timo,
>>> inspiriert durch die Anfrage nach Displayausgabe habe ich dies mal
>> verfolgt und für Basic gibt's jetzt 3 Displayroutinen, siehe das Beispielprog
>> dazu.
>>> Man kann mit diesen den Cursor auf dem Display positionieren, den Screen
>> löschen sowie einen festen String ausgeben. Das alles auf dem bereits
>> vorhandenen Basic-Screen, die Funktionstasten-Ausgabe wird hierbei
>> überschrieben. Mit der Taste 0 wird die Originalausgabe wieder raufgeschrieben.
>>> In Basic selbst ist die Stringverwendung ausgeschaltet, so dass vom
>> Script her Stringvariable der Ausgaberoutine nicht übergeben werden können,
>> eben nur feststehende Zeichen werden ausgegeben. Das Einschalten des
>> entsprechenden Params hat diverse Fehler provoziert, hab ich wieder ausgeschaltet.
>>> 
>>> Hier mal das Beispielprog mit den neuen Routinen:
>>> 
>>> 10:
>>> call("displ_clear")
>>> call("displ_cursor",1,6)
>>> call("displ_puts", "Zeile 1")
>>> call("displ_cursor",4,3)
>>> call("displ_puts", "Text in Zeile 4")
>>> end
>>> 
>>> Gruß, Frank
>> 
>> 
>> _______________________________________________
>> ct-bot-entwickler Mailingliste
>> ct-bot-entwickler@xxxxxxxxxxxxxxxxx
>> http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler
> 
> -- 
> NEU: FreePhone - 0ct/min Handyspartarif mit Geld-zurück-Garantie!		
> Jetzt informieren: http://www.gmx.net/de/go/freephone
> 
> _______________________________________________
> ct-bot-entwickler Mailingliste
> ct-bot-entwickler@xxxxxxxxxxxxxxxxx
> http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler