- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: Komisches Verhalten String + Overlay

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594

    Komisches Verhalten String + Overlay

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ich wundere mich gerade etwas über Bascom. Ggfs. wisst ihr ja mehr...

    Ich habe einen String-Array von 8x1 Zeichen
    Den möchte jetzt in einem Stück adressieren und habe dafür ein String-Overlay mit 8 Zeichen über dem Array erstellt.

    Wenn ich das Overlay nutze enthalten danach aber alle Array-Elemente ZWEI Zeichen!

    Ich vermute mal einfach, dass jeder Einzelstring noch ein Stoppzeichen enthält - damit könnte meine Implementierung sogar zu ziemlich komischen Fehlern führen, denn die Stoppzeichen sind ja jetzt weg!

    Verwendeter Code:

    Code:
    Dim Char_buffer(8) as String * 1
    Dim Char_buffer_overlay as String * 8 at Char_buffer(1) Overlay
    
    Char_buffer_overlay = "12345678"
    Char_buffer(1) ist dann "12", Char_buffer(2) ist "34", usw.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Ich nutze für sowas immer Bytes. Jeder String wird nach der letzten Stelle abgeschlossen. Was auch Sinn macht, wenn z.B. ein 80er String nur 2 Zeichen enthält.

    Code:
    Dim Char_buffer(8) as byte
    Dim Char_buffer_overlay as String * 8 at Char_buffer(1) Overlay
    
    Char_buffer_overlay = "12345678"
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo stefan_z,

    zu Strings in Bascom muß man wissen, daß ein String mit einer Null abgeschlossen wird. Ein String ist also immer ein Byte länger als der Faktor in der Definition.
    Das steht aber alles in der Bascom-Hilfe.

    Gruß, Michael

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von peterfido
    Dim Char_buffer(8) as byte
    Dim Char_buffer_overlay as String * 8 at Char_buffer(1) Overlay

    Char_buffer_overlay = "12345678"
    Hallo peterfido,
    dies ist allerdings etwas gefährlich. Wenn der String zugewiesen wird, hängt Bascom wieder ein Null-Byte hinten dran. Da dieses nicht mehr in Char_buffer(8) passt, wird die nächste Variable im SRAM überschrieben. So denn da eine ist.
    Daher im Byte-Array sicherheitshalber ein Byte mehr anlegen
    Dim Char_buffer(9) As Byte

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Stimmt natürlich. Bei Platzmangel besser die Bytes als Overlay definieren.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests