Forum: Mikrocontroller und Digitale Elektronik Bascom - ein Fehler der Zeit gekostet hat


von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Hi,

Bascom ist ja recht simpel in der Anwendung, allerdings hat mich 
folgender Vertippser sehr viel Zeit gekostet:
1
$regfile = "m16def.dat"
2
Dim Byt As Byte
3
Byt = 1
4
Dim Ramcodes(10) As Byte
5
Const Ccperiodetag = 2
6
Ramcodes(3) = 47
7
Byt = Ramcodes(byt + Ccperiodetage)
8
Print B

Das lässt sich problemlos kompilieren -
nur leider erkennt Bascom den Tippfehler nicht
(cperiodetage statt cperiodetag) und zwar nur in der Konstellation mit 
dem byt-Offset)

Absicht oder Bug?
Version: 2.0.7.3.001 Vollversion

von troll (Gast)


Lesenswert?

Absicht, eindeutig!!!1

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

es sollte oben natürlich in der letzten Zeile
print Byt heißen- ist beim Kopieren passiert

von Oliver (Gast)


Lesenswert?

Manfred S. schrieb:
> Das lässt sich problemlos kompilieren -
> nur leider erkennt Bascom den Tippfehler nicht

Warum sollte es das?

Oliver

von Oh Weh (Gast)


Lesenswert?

Naja, hier sitzt der Bug vor dem Monitor.
Wenn du Zeit sparen wolltest, warum beschäftigst du dich dann mit dem 
Lernen einer Programmiersprache?
Keine Stackwerte, kein End und beim compilieren gibt es eine 
Fehlermeldung, die kein compilieren zuläßt.
Warum müssen Anfänger immer unbedingt verschachtelte Rechnungen 
ausführen?
Berechne den Arrayzeiger extra und du wirst sehen, daß es geht.
Auch Bascom verlangt mitdenken.

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Oh Weh schrieb:
> Naja, hier sitzt der Bug vor dem Monitor.
> Wenn du Zeit sparen wolltest, warum beschäftigst du dich dann mit dem
> Lernen einer Programmiersprache?
> Keine Stackwerte, kein End und beim compilieren gibt es eine
> Fehlermeldung, die kein compilieren zuläßt.
Oh Weh, hast du nicht einmal mitbekommen, dass das Listing auf den 
Fehler reduziert wurde, die 40kb-Binärcode vom Originalprogramm auf 
Atmega644 wollte ich nicht posten ;-)

> Warum müssen Anfänger immer unbedingt verschachtelte Rechnungen
> ausführen?
Wo steht was von Anfänger?

> Berechne den Arrayzeiger extra und du wirst sehen, daß es geht.
Bascom kann das auch in den Klammern!

von Umpa Lumpa (Gast)


Lesenswert?

Weil Bascom nicht deklarierte Variablen zulässt, die auf 0 setzt und 
damit munter weiterrechnet. In anderen Programmiersprachen gibt es 
zumindest eine Warnung.

Gruß aus Heidelberg

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Umpa Lumpa schrieb:
> Weil Bascom nicht deklarierte Variablen zulässt, die auf 0 setzt und
> damit munter weiterrechnet. In anderen Programmiersprachen gibt es
> zumindest eine Warnung.
>
Hallo,
das stimmt so nicht, Bascom prüft eigentlich auf nicht deklarierte 
Variablen, nur in dem speziellen Fall nicht -deshalb vermute ich ja den 
Bug
1
$regfile = "m16def.dat"
2
Dim Byt As Byte
3
Byt = 1
4
Dim Ramcodes(10) As Byte
5
Const Ccperiodetag = 2
6
Ramcodes(3) = 47
7
Byt = Ramcodes(byt + Ccperiodetage)
8
Print Ccperiodetage
9
Print Byt
Jetzt schreit der Compiler sehr wohl bei der Zeile
Print Ccperiodetage

nur in der Zeile
Byt = Ramcodes(byt + Ccperiodetage) erkennt er den Fehler nicht.

von Heribert von Hohenfels (Gast)


Lesenswert?

Manfred S. schrieb:
> Umpa Lumpa schrieb:
>> Weil Bascom nicht deklarierte Variablen zulässt, die auf 0 setzt und
>> damit munter weiterrechnet. In anderen Programmiersprachen gibt es
>> zumindest eine Warnung.
>>
> Hallo,
> das stimmt so nicht, Bascom prüft eigentlich auf nicht deklarierte
> Variablen, nur in dem speziellen Fall nicht -deshalb vermute ich ja den
> Bug

Stimmt, Variablen müssen deklariert werden, andernfalls bricht der 
Compiler mit einer Fehlermeldung ab. Ich bin mir allerdings nicht sicher 
(und habe das Tutorial auch gerade nicht zur Hand), ob der Variablenname 
nicht nur bis zu einer bestimmten Länge "geparsed" wird...

MfG
Heribert

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

So, der Fall ist geklärt.
Es war wirklich ein Bug.

Hier die Antwort von Mark Alberts aus dem MCS-Supportforum:

"yes this is a bug, the constant is evaluated to a 0. original you could 
not use an offset in an array. later i added an option to add a 
constant, and after that also the option to use a variable.
there is probably a test missing."

und weiter:

"of course it is changed in the next update."

Also super Support und etwaige Fehler werden auch gleich korrigiert!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.