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

Thema: Compiler Bug mit CONFIG BASE ?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133

    Compiler Bug mit CONFIG BASE ?

    Kürzlich benötigte ich Arrays, die mit Index 0 beim ersten Element beginnen. In Bascom beginnen Arrays standardmäßig mit Index 1. Mit CONFIG BASE kann man das auf 0 umstellen.

    Irgendwie nahm ich an, daß zB im "Dim Array(2) As Byte" statement mit der Zwei das letzte zu indizierende Element gemeint sei.

    Man kann Array(2) auch ansprechen und Zuweisungen machen. Darf man aber nicht!
    Das Array(2) Element wird von der folgend deklarierten Variablen überschrieben!

    Wenn mit 2 die Anzahl einzurichtender Elemente gemeint ist und nicht als letztes zu adressierendes Element, sollte der Compiler bei Ansprechen von Array(2) einen Fehler melden.

    Ich finde, daß das in die Beschreibung zum Einrichten eines Arrays gehört und der Compiler wenigstens bei Ansprechen des ungültigen Elements mit einer Konstanten einen Fehler ausgibt. Das tut er, wenn das nächst höhere, auch ungültige, nicht existierende Element angesprochen wird.

    Habe ich in der Demo Version 2.0.5.0 festgestellt und heute auf 2.0.7.5 umgestellt. Ist dort aber genau so. In der Bascom Hilfe zum Kommando CONFIG BASE gibt es den Hinweis, daß das letzte Element invalid sei.

    Im Simulator nachzuvollziehen mit folgendem Code:
    Code:
    '##### Bascom Demo Version 2.0.5.0 #####
    '##### Bascom Demo Version 2.0.7.5 #####
    
    $regfile = "m88def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 36
    $crystal = 8000000
    
    Config Base = 0                         'Array Indices beginnen mit 0
    
    Dim Array(2) As Byte                    'Array mit 2 (3?) Elementen einrichten
    Dim X As Byte                           'Bytevariable einrichten
    
    Array(0) = 1
    Array(1) = 2
    Array(2) = 3                            'sollte nicht möglich sein -> Compiler Fehlermeldung
    'Array(3) = 4                           'Compiler reports "Index out of range[3]", OK
    
    X = 1                                   'Hier wird im SRAM Speicher Array(2) überschrieben!!!
    
    End                                     'end program
    Falls ich da offene Türen einrenne, bitte ich schon mal um Entschuldigung
    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo searcher,
    ich nehme an, dass MCS den Test auf gültige Elemente nicht angepasst hat, als sie den Befehl Config Base = 0 eingeführt haben. Deswegen ist es erst das übernächste Element, welches eine Fehlermeldung auslöst, weil das vorher auch schon ungültig war.
    Da man aber meistens eh mit einer Variablen als Index arbeitest und dort kein Test vom Compiler durchgeführt werden kann, habe ich es als nicht so wichtig angesehen, als ich es bemerkt habe.
    Wenn du willst, kannst du es ja MCS mailen.
    Das Überschreiben der nachfolgenden Speicherzellen passiert sowieso immer, wenn der Index zu groß wird. Genau so, wenn ein String länger als die reservierte Größe wird.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Hallo for_ro,
    Zitat Zitat von for_ro
    Da man aber meistens eh mit einer Variablen als Index arbeitest und dort kein Test vom Compiler durchgeführt werden kann
    stimmt und ist auch klar. Eigentlich hatte ich Probleme damit, weil mir nicht klar war, daß die Zahl beim Dimensionieren (mit DIM) des Arrays die Anzahl der Elemente angibt. Ich hatte ja im Kopf, daß das das letzte adressierbare Element wäre.
    Ich denke, man sollte das in der Dokumentation bzw. Hilfe deutlicher herausstellen. Hab da jetzt nochmal rumgesucht und bis jetzt nichts Eindeutiges gefunden. War ja bis zur Einführung von CONFIG BASE auch nicht wirklich notwendig.

    Mal sehen, ob und wie ich die mail an mcs abfasse.
    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    Also das ging schnell. Gestern eine mail an MCS und praktisch sofort eine Antwort: sinngemäß; die Berechnung der Grenzen bei Base = 0 wird in Version 2.0.7.7 berichtigt. Hatte noch den Vorschlag gemacht, die Doku zum Dimensionieren von Arrays eindeutiger zu verfassen - mal sehen, ob da auch etwas gemacht wird.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Ähnliche Themen

  1. Probleme mit Config Print
    Von demmy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 20.07.2012, 14:41
  2. Antworten: 5
    Letzter Beitrag: 15.03.2012, 17:03
  3. Antworten: 3
    Letzter Beitrag: 06.11.2010, 18:54
  4. Bug in BASCOM? [geklärt: doch kein Bug]
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 17.05.2007, 10:32
  5. problem mit config serialin=buffered...
    Von Bluesmash im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 09.01.2006, 21:57

Berechtigungen

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

LiFePO4 Speicher Test