GLCD, farbiges XV-Display und BASCOM (Beispiele) FAQ

Hallo Cassio,

noch etwas: Ein String wird in Bascom ja bereits mit einem Char(0) abgeschlossen. Ein mit 22 Zeichen definierter String belegt automatisch 23 Bytes im Speicher. Wenn man das Overlay-Array um eins größer definiert als die Anzahl der Zeichen im Array, dann ist das letzte Zeichen im Array schon automatisch ein Char(0). Du musst also nur zu ZZ noch eins dazuzählen, dann kannst du das mit dem Char(0) auch weglassen.
 
Hallo Stefan!

Hast du deinen Vorschlag mal ausprobiert?

Wenn du im String eine NULL anhängst, dann ist das ja in ASCII die "48" !
Oder wie meinst du das jetzt? :hmmmm:

Außerdem.... wenn ich HBA richtig verstanden habe, dann spielt es keine Rolle wie groß das Overlay dimensioniert wurde. Es muss also nicht mit der Zeichenanzahl des Strings übereinstimmen.... es kann auch nur eine "1" angegeben werden.
Ich habe nur zur "Sicherheit" bzw. Verständnis die "23" im Overlay mit eingetragen.

Gruß,
Cassio
 
Hallo Cassio,
du schickst ja nachher noch ein 0-Byte hinterher.
Da dies hinter dem Eingabe String im SRAM steht, meint Stevie ganz richtig, das du einfach hier
Zz = Len(eingabe) + 1
direkt ein Zeichen mehr angeben kannst.

HBA
 
Hi Dino!

Ach so....
Anstatt die &B0 bzw. &H00 separat aufzuführen und via "Spiout" auf den Weg zu bringen, soll ich die Eingabe um eine Stelle (aber nicht als String) erhöhen.

Muss ich erst mal testen ob das geht, wenn ich "Eingabe + 1" schreibe. :hmmmm:

Gruß,
Cassio
 
Zz = Len(eingabe) + 1

Ups.....

Hallo HBA !

Ja ja, ich sollte zwischendurch keine anderen Dinge erledigen, sonst haben sich meine Fragen in der Zwischenzeit schon von "selbst" erledigt. ;)

OK, dann hätten wir das geklärt. :)

Probiere es gleich noch mal aus.

Gruß und Danke,
Cassio
 
Hallo Cassio,

genau so hatte ich das gemeint. Nur musst du das Overlay-Array eben noch eins größer definieren. Sonst gibt es bei einer Stringlänge von 23 Probleme.
Code:
' Fontvariablen
Dim Eingabe As String * 23 , Zz As Byte
Dim Eingabe_o(24) As Byte At Eingabe Overlay
 
Hallo Cassio,

genau so hatte ich das gemeint. Nur musst du das Overlay-Array eben noch eins größer definieren. Sonst gibt es bei einer Stringlänge von 23 Probleme.

Hallo Stefan!

Ich bin der Meinung, dass es beim Overlay nicht notwendig ist!
Es kommt nicht zu Problemen..... ;)

Allerdings wäre es etwas anderes, wenn du die "Stelle" 24 im Array manuell bearbeiten möchtest.
Da würde BASCOM sonst meckern, weil es nur bis 23 geht.... und dann kommt die Fehlermeldelung "Out of Range".

Gruß,
Cassio
 
Hallo Stevie,
du kannst natürlich bei den Overlays die "geplante" Größe mit angeben. Bei Overlays über Variablen mit festen Größen wie Word oder Double mache ich das auch.
Bei Strings habe ich mir das abgewöhnt, weil man meistens nicht über feste Positionen zugreift. Und nur da ist die Beschränkung. Der Compiler lässt halt
Eingabe_o(20) = 0
nur zu, wenn dieses Array auch mindestens 20 Elemente hat.
Während der Laufzeit wird das Einhalten der Grenzen auch nicht überwacht.
In unserem Fall ist also
Dim Eingabe_o(1) As Byte At Eingabe Overlay
vollkommen ok. Durch das Overlay werden ja keine Speicherzellen reserviert.

HBA
 
Hallo,

ihr habt natürlich recht :eek:
Ich hatte das mit den Problemen vermutlich noch vom Programmieren in VB im Hinterkopf. Da verursacht man nämlich den Laufzeitfehler 9 mit solchen Sachen.
 
Hallo zusammen!

Um meinen Programmcode übersichtlicher zu gestalten, habe ich einige Subroutinen in separate Dateien ausgelagert.
Diese Dateien binde ich dann nur mit einem $include ein.

Diese Maßnahme spart natürlich keinen Programmcode ein, nur das Hauptprogramm wird um einiges übersichtlicher.

Meine Versuche in diese Richtung haben auch ein positives Ergebnis zu Tage gebracht.....
Siehe hier:
XV-Display+Include_2.jpg



Allerdings bin ich mir nicht sicher, ob ich das Aufrufen der Routinen nicht auch anders lösen kann. :hmmmm:


Hier mal ein Beispiel dazu:
Im Programm gibt es nun die Anwsieung zur Subroutine "Rahmen" zu springen.
Code:
Position = "17,37,110,118,1"
Farbe = Schwarz
Gosub Rahmen

Die Subroutine "Rahmen" sieht nun wie folgt aus:
Code:
Rahmen:
'Box oder Rahmen in RGB

Gosub Farben
Gosub Positionen
$include "_rahmen.bas"
Return

Die Datei "_rahmen.bas" enthält dann folgendes:
Code:
$nocompile

'Box oder Rahmen in RGB

Print #1 , "_Rahmen"

'$include "_farben.bas"
'$include "_positionen.bas"

  Bitwait Display_busy , Set
  Reset Display_cs                                          ' Chipselect Display Module
  Waitus 2

  I = &H21                                                  ' DrawRectRGB
  Spiout I , 1

  Bitwait Display_busy , Reset
  Spiout X1 , 1                                             ' Send Parameter
  Spiout Y1 , 1
  Spiout X2 , 1
  Spiout Y2 , 1
  Spiout Red , 1
  Spiout Green , 1
  Spiout Blue , 1
  Spiout Fillmode , 1

  Bitwait Display_busy , Set
  Set Display_cs                                            ' Chipselect Display Module
  Waitus 1

Soweit klappt das auch alles bestens. :)
Noch ein Beispiel: XV-Display+Include_1.jpg
Wie ihr oben aber sehen könnt, würde ich gern "_farben.bas" und "_positionen.bas" innerhalb der "_rahmen.bas" gleich mit aufrufen.
In einigen Tests mit $include hat auch das auch funktioniert, leider geht es bei meinem Programm nicht.

Muss ich ggf. innerhalb der Dateien (_farben.bas & _positionen.bas) ein "Return" einsetzen, damit ich zur Ausgangsdatei zurück komme? :hmmmm:
Irgendwie bleibt mein Programm sonst hängen.

Gruß,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)