manfredkraft
Anzündhilfe
Registriert seit: Jul 2005
Wohnort:
Verein:
Beiträge: 45
Status: Offline
|
Hallo, ich muss doch nochmals nachfragen.
Ich habe nachfolg. Beispiel aus der Bascom Doku modifiziert und der Compiler (V 1.11.8.3) meldet weiterhin Fehler. Kann mal bitte das Beisp. auf seinem Bascom - Compiler testen und mir das Ergebnis mitteilen?
Danke mfg manfred -------------------------------------------------------------------------------------- Const B1 = 1 Dim A as Byte
If A = 1 Then If B1 Then Print "B1=1" End If Else Print "A is not 0" End If
' ergibt: '--------------------------------------------------------------------------------------------------- 'Error : 35 Line : 5 3 parameters expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS 'Error : 28 Line : 10 IF THEN expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS
'obwohl nach der 'Bascom Dokumentation zulässig: '===================== 'Action 'Allows conditional execution or branching, based on the evaluation of a Boolean expression.
'Syntax ' ====== 'IF expression THEN ' {ELSEIF expression THEN} ' {ELSE} 'END IF '--------------------------------------------------- 'Remarks 'Expression 'Any expression that evaluates to true or false.
'Definition EXPRESSION: 'Expressions and Operators
'An expression can be a numeric constant , a variable , 'or a single value obtained by combining constants, 'variables, and other expressions with operators
|
AlexanderM
Epoxy-Meister
Registriert seit: Feb 2004
Wohnort: Düsseldorf
Verein: FAR
Beiträge: 238
Status: Offline
|
Hallo manfredkraft, momentan habe ich leider keine Zeit, es auszuprobieren. Allerdings fällt mir folgendes auf: Const B1 = 1 Dim A as Byte If A = 1 Then If B1 Then ... Wenn Ausdrücke wie "If B1 Then" verwendet werden, dann sollte die Variable als Boolean definiert sein. Manche Compiler schlucken zwar auch, wenn es sich um einen anderen (oder nicht definierten) Typen handelt, aber um auf Nummer sicher zu gehen, ist es besser, entweder eine explizite Bedingung zu schreiben (also z.B.: If B1 = 1 Then) oder die Variable als Boolean zu definieren und entsprechend auch zuzuweisen ( B1 = true) Nur so mein 2-Cent-Vorschlag dazu Mit besten Grüssen, Alexander
|
manfredkraft
Anzündhilfe
Registriert seit: Jul 2005
Wohnort:
Verein:
Beiträge: 45
Status: Offline
|
Hallo AlexanderM,
Const B1 = &B1 Dim A as Boolean A = 1
If A = 1 Then If B1 Then Print "B1=1" Else Print "A is 0" End If
ergibt
Error : 35 Line : 9 3 parameters expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS Error : 28 Line : 14 IF THEN expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS
Anyway, thanks! manfred
|
Gelöscht2
Epoxy-Meister
Registriert seit: Aug 2005
Wohnort:
Verein:
Beiträge: 213
Status: Offline
|
*gelöscht gem. BDSG*
|
manfredkraft
Anzündhilfe
Registriert seit: Jul 2005
Wohnort:
Verein:
Beiträge: 45
Status: Offline
|
HAllo Mathias,
habe die versch. Varianten durchprobiert, lt. Bascom - Doku muss die Auswertung des Ausdrucks ein True/False ergeben. Eine konstante "1" tut dies allemal. Definiert man die Schalter als Variablen geht's, aber nicht als Konstanten (z.B. const component_availlable = 1)
Verschachtelte If's sollten bei Bascom eigentlich gehen.
Ansonsten wundere ich über die "nicht eindeutigen" Fehler-Meldungen, die Bascom - Doku der Free-Version könnte etwas präziser sein.
manfred
|
Gelöscht2
Epoxy-Meister
Registriert seit: Aug 2005
Wohnort:
Verein:
Beiträge: 213
Status: Offline
|
*gelöscht gem. BDSG*
|
AlexanderM
Epoxy-Meister
Registriert seit: Feb 2004
Wohnort: Düsseldorf
Verein: FAR
Beiträge: 238
Status: Offline
|
Hi, nun habe ich mir mal die Zeit genommen, es im BASCOM (Version 1.11.7.9) auszuprobieren (Zeit hat man ja nicht, die muß man sich erst nehmen ) Folgendes geht, d.h. der Compiler meckert nicht: '------------------------------------------------ Dim A as BitDim B as BitA = 1 B = 0 If A = 1 Then If B = 1 Then Print "B ist 1" End If Else Print "A ist 0" End If End '------------------------------------------------ Folgendes mosert der Compiler aber an: '------------------------------------------------ Dim B as BooleanB = True 'Fehlermeldung "Store Bit error..."If B Then 'Fehlermeldung "3 parameters expected" Print "B ist falsch" 'Fehlermeldung "If Then expected", d.h. Folgefehler aus dem vorherigenEnd If End '------------------------------------------------ Es scheint also zu sein, daß BASCOM den Variablentyp Bool gar nicht kennt (taucht in der Hilfe auch nirgendwo auf). Folglich kann man ihn auch nicht definieren. Stattdessen gibt's nur Bit, das ja auch nur ein Bit im Arbeitsspeicher belegt. Und um das Bit abzufragen, muß man leider die Formulierung "If A=1 Then" in voller Länge und Schönheit verwenden Mit verschachtelten If-Abfragen scheint er aber problemlos zurecht zu kommen Bliebe zu eruieren, wieweit die Schachteltiefe gehen darf, aber das ist ein anderes Kapitel. Basic ist nun mal keine so elegante Programmiersprache und der BASCOM scheint (zumindest in der freien Version) auch noch nicht soo ausgereift zu sein, zumindest die Hilfe. Also ist oft ein bißchen Experimentieren angesagt. Das macht aber das Leben dann doch auch so interessant, nicht wahr? In diesem Sinne alles Gute und nicht den Enthusiasmus verlieren. CU, Alexander
|
manfredkraft
Anzündhilfe
Registriert seit: Jul 2005
Wohnort:
Verein:
Beiträge: 45
Status: Offline
|
Hallo !
ausführlicher Programmcode ist schon wünschenswert. Mein Punkt war jedoch die Behandlung von Zuständen, die während der jeweiligen Anwendung konstant sind wie z.B. der Jumber BR7, der derzeit LCD_BL ansteuert. Diesen Jumber wollte ich, da konstant, als Konstante definieren und im Programm verwenden. Mein Ziel ist, über eine derartige Konstanten-Liste die für die Anwendung eingestellte Konfiguration o h n e Speicherverbrauch zu realisieren. In diesem Fall muß die Anweisung - If LCD_BL_AVAIL then "do something" lauten.
mfg manfred
|
Stefan Wimmer
Grand Master of Rocketry
Moderator
Registriert seit: Aug 2000
Wohnort: Berlin
Verein: Deutsche Experimental Raketen Arbeitsgruppe (DERA)
Beiträge: 2398
Status: Offline
|
..was wäre denn so schlimm daran zu schreiben "if IrgendeineHarwareAvailable = true then..."? Dann wäre es sowohl syntaktisch richtig als auch les- und auf einen Blick erfassbar.
It's the Government - it doesn't have to make sense! (B. Kaplow in r.m.r)
|
manfredkraft
Anzündhilfe
Registriert seit: Jul 2005
Wohnort:
Verein:
Beiträge: 45
Status: Offline
|
HAllo Stefan,
leider kenne ich keine Lösung eine mit const BR7=1 definierte Konstante in Bascom mit If BR7 = true zu verwenden, der Compiler übersetzt das schlicht nicht in Code!
Const B1 = &B1 Dim A as Bit A = 1
'If A = 1 Then 'auch mit "true" getestet If B1 = 1 Then Print "B1=1"
ergibt: Error : 31 Line : 9 Invalid datatype , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS Error : 28 Line : 9 IF THEN expected , in File : E:\PROGRAMME\BASCOM-AVR\TEST_IF.BAS
Bedingte Übersetzung mit #if ... ist ok!
mfg manfred
|
|