Es gibt drei Typen symbolischer Konstanten
- Text
- numerisch
- Ausdruck
Symbolkonstanten helfen den Programmcode lesbarer und pflegeleichter zu halten. Änderungen lassen sich so zentral an einer Stelle vollziehen. Symbolkonstanten die mit dem Schlüsselwort CONST meist zu Beginn des Programmtextes angelegt werden, brauchen selbst, d.h. durch ihre reine Implementierung keinen Programmspeicherplatz. Const definiert also nur einen symbolischen Ausdruck für einen konstanten Wert oder Text.
Const Nummerisch
Const BeliebigerName = 123
Der Compiler ersetzt die im Programmcode eingesetzten Symbolkonstanten durch ihre hinterlegten Werte, wo immer sie eingesetzt werden.
B = BeliebigerName + 27 ' ist das Gleiche wie B = 123 + 27
Numerische Symbolkonstanten werden zur Kompilierzeit durch ihre entsprechende Wertigkeitersetzt, was den logisch-/arithmetischen Gebrauch der Konstante anbelangt. In einem anderen Kontext können numerische Konstanten vom Compiler in Festtexte überführt werden, wie im Folgenden erläutert.
Const Text
Jede im Programm gebrauchte Text-Konstante wird in einer Festtexttabelle vorgehalten und im Programmcode implementiert. Das gilt sowohl für symbolische wie auch für direkt im Programmcode formulierteTexte. Symbolkonstanten die einen Festtext bergen, werden genau wie direkt im Programmcode ausgeschriebene Texte in einer Festtexttabelle hinterlegt, sofern sie im Programmcode zur Anwendung kommen.
Ein Beispiel:
Dim S as String * 8
Const Text = „ABC“
Print „ABC“
S = „ABC“
Print Text
Für dieses Beispiel hinterlegt der Compiler nur eine einzige Konstante in die erzeugte Festtexttabelle, nämlich den Ausdruck ABC, sodass bei Gebrauch dieses Textes lediglich auf den entsprechenden Tabelleneintrag referenziert wird. Das spart Programmspeicher wenn der entsprechende Ausdruck mehrfach gebraucht wird. An diesem Beispiel ist auchersichtlich, dass BASCOM sehr wohl erkennt, dass sich hinter der Konstante Text dasselbe verbirgt wieder ausgeschriebene Fest-Text ABC.
Da sich im folgenden Beispiel die beiden Ausdrücke unterscheiden, werden der Tabelle zwei Texte hinzugefügt,können aber beliebig oft angewandt werden.
Print "ABC"
Print "DEF"
Länge
Bis zur Bascom-Version 2.0.7.7 werden String-Konstanten mit einer Gesamtlänge von 256 Bytes unterstützt. Neuere Versionen gestatten eine Länge von 1024 Bytes.
Verkettung von Festtexten
Um sich die oben erläuterte Behandlung von textbasierenden Konstanten durch BASCOM, für verkette Textausgaben mit beispielsweise Print’ günstig nutzbar zu machen, sind die Ausdrücke mit einem Semikolon voneinander zu trennen.
Print "ABC" ; "DEF"
Aus einer für diesen Fall falschen Schreibweise
Print "ABC" + "DEF"'FALSCH
würde ein weiterer Fest-Text hinterlegt, nämlich exakt dieser: ABC" + "DEF.
Die Verkettung von Festtexten zu einer Stringvariablen auf Basis bereits in derTabelle angelegter Festtexte, muss auf eine bestimmte Weise erfolgen, da ansonsten ebenfalls weitere Festtexte gebildet werden die den Programmspeicherkonsum erhöhen würden.
So geht es nicht:
S = "ABC" + "DEF" ' führt zu einem weiteren Eintrag ABC“ + “DEF
S = "ABC" ; "DEF" ' führt zu einem weiteren Eintrag ABC“ ; “DEF
S = "ABC" & "DEF" ' führt zu einem weiteren Eintrag ABC" & "DEF
So geht’s… Damit zur Laufzeit auf die entsprechenden Einträge zurückgegriffen wird, ist der Vorgang wie folgt:
S = "ABC"
S = S + "DEF"
Eine weitere Besonderheit, soll eine numerische Konstante ausgegeben werden:
Const Pi = 3.14
Print Pi
oder
Dim S as String * 3
Const a = 11
S = Str(a)
Pfiffigerweise erzeugt der Compiler in beiden dieser Fälle Texte, die der besagten Tabellehinzugefügt werden. Umwandlungen dieser Art werden also bereits zurKompilierzeit erledigt, was zur Laufzeit einen Geschwindigkeitsvorteil bringt.
Const Ausdruck
Man kann denCompiler eine Konstante berechnen lassen:
Const Errechne = 3*5
Die Konstante 'Errechne' lässt sich ebenso verwenden, wie jede Andere auch.
Diese Möglichkeit eignet sich sehr gut für Tests, bei denen gemäß einer Formel der beste Wert noch gefunden werden muss. Oder es soll beispielsweise unter Berücksichtigung der Taktfrequenz ein Comparewert für einen Timer berechnet werden.
So hat man als Alternative den Rechenweg, anstelle eines entsprechenden Kommentars im Programmcode niedergelegt und man spart sich das Selberrechnen.
Const T_ctc = 1 ' Wunschzeit in Millisekunden
Const Ocr0a_calc = Int((_xtal /((1 /(t_ctc * 10e-3)) *Prescaler * 2 )) - 1)
Ocr0a = Ocr0a_calc
Im Gegensatz zu den Berechnungen die zur Laufzeit mit Variablen geschehen, ist es hier nicht nötig einzelne Rechenschritte zu bilden.
Bascom-Konstanten Exkurs
BASCOM stellt bereits eine ganze Reihe spezifischer Konstanten bereit, auf die man ebenfalls zurückgreifen kann und es in aller Regel auch oft tut, ohne es sich bewusst zu machen.
Beispiel
PORTB = &HFF
Im Definitionsfile des verwendeten Mikrocontrollers sind u.a. für jedes Register Adressen hinterlegt - eine Konstante.
Weiter gibt es noch Konstanten die der Compiler zur Verfügung stellt und auch selbst benötigt.
'Beispiel
_XTAL
Hinterdieser Konstante verbirgt sich genau das, was der Programmierer unter $Crystal angibt, nämlich die Taktfrequenz. BASCOM selbst nutzt diese Angabe beispielsweise zum berechnen des Wertes für das Baudratenregister oder auch für Befehle wie WAIT.
Solche Konstanten lassen sich ebenfalls verwenden:
'Beispiel
Const T = (1 / _xtal) / 10e-9 'Periodendauer in Nanaosekunden
Print T ; " ns"
Weitere Konstanten können
im Report (Str-W) eingesehenwerden.
Const Nummerisch
Const BeliebigerName = 123
Der Compiler ersetzt die im Programmcode eingesetzten Symbolkonstanten durch ihre hinterlegten Werte, wo immer sie eingesetzt werden.
B = BeliebigerName + 27 ' ist das Gleiche wie B = 123 + 27
Numerische Symbolkonstanten werden zur Kompilierzeit durch ihre entsprechende Wertigkeitersetzt, was den logisch-/arithmetischen Gebrauch der Konstante anbelangt. In einem anderen Kontext können numerische Konstanten vom Compiler in Festtexte überführt werden, wie im Folgenden erläutert.
Const Text
Jede im Programm gebrauchte Text-Konstante wird in einer Festtexttabelle vorgehalten und im Programmcode implementiert. Das gilt sowohl für symbolische wie auch für direkt im Programmcode formulierteTexte. Symbolkonstanten die einen Festtext bergen, werden genau wie direkt im Programmcode ausgeschriebene Texte in einer Festtexttabelle hinterlegt, sofern sie im Programmcode zur Anwendung kommen.
Ein Beispiel:
Dim S as String * 8
Const Text = „ABC“
Print „ABC“
S = „ABC“
Print Text
Für dieses Beispiel hinterlegt der Compiler nur eine einzige Konstante in die erzeugte Festtexttabelle, nämlich den Ausdruck ABC, sodass bei Gebrauch dieses Textes lediglich auf den entsprechenden Tabelleneintrag referenziert wird. Das spart Programmspeicher wenn der entsprechende Ausdruck mehrfach gebraucht wird. An diesem Beispiel ist auchersichtlich, dass BASCOM sehr wohl erkennt, dass sich hinter der Konstante Text dasselbe verbirgt wieder ausgeschriebene Fest-Text ABC.
Da sich im folgenden Beispiel die beiden Ausdrücke unterscheiden, werden der Tabelle zwei Texte hinzugefügt,können aber beliebig oft angewandt werden.
Print "ABC"
Print "DEF"
Länge
Bis zur Bascom-Version 2.0.7.7 werden String-Konstanten mit einer Gesamtlänge von 256 Bytes unterstützt. Neuere Versionen gestatten eine Länge von 1024 Bytes.
Verkettung von Festtexten
Um sich die oben erläuterte Behandlung von textbasierenden Konstanten durch BASCOM, für verkette Textausgaben mit beispielsweise Print’ günstig nutzbar zu machen, sind die Ausdrücke mit einem Semikolon voneinander zu trennen.
Print "ABC" ; "DEF"
Aus einer für diesen Fall falschen Schreibweise
Print "ABC" + "DEF"'FALSCH
würde ein weiterer Fest-Text hinterlegt, nämlich exakt dieser: ABC" + "DEF.
Die Verkettung von Festtexten zu einer Stringvariablen auf Basis bereits in derTabelle angelegter Festtexte, muss auf eine bestimmte Weise erfolgen, da ansonsten ebenfalls weitere Festtexte gebildet werden die den Programmspeicherkonsum erhöhen würden.
So geht es nicht:
S = "ABC" + "DEF" ' führt zu einem weiteren Eintrag ABC“ + “DEF
S = "ABC" ; "DEF" ' führt zu einem weiteren Eintrag ABC“ ; “DEF
S = "ABC" & "DEF" ' führt zu einem weiteren Eintrag ABC" & "DEF
So geht’s… Damit zur Laufzeit auf die entsprechenden Einträge zurückgegriffen wird, ist der Vorgang wie folgt:
S = "ABC"
S = S + "DEF"
Eine weitere Besonderheit, soll eine numerische Konstante ausgegeben werden:
Const Pi = 3.14
Print Pi
oder
Dim S as String * 3
Const a = 11
S = Str(a)
Pfiffigerweise erzeugt der Compiler in beiden dieser Fälle Texte, die der besagten Tabellehinzugefügt werden. Umwandlungen dieser Art werden also bereits zurKompilierzeit erledigt, was zur Laufzeit einen Geschwindigkeitsvorteil bringt.
Const Ausdruck
Man kann denCompiler eine Konstante berechnen lassen:
Const Errechne = 3*5
Die Konstante 'Errechne' lässt sich ebenso verwenden, wie jede Andere auch.
Diese Möglichkeit eignet sich sehr gut für Tests, bei denen gemäß einer Formel der beste Wert noch gefunden werden muss. Oder es soll beispielsweise unter Berücksichtigung der Taktfrequenz ein Comparewert für einen Timer berechnet werden.
So hat man als Alternative den Rechenweg, anstelle eines entsprechenden Kommentars im Programmcode niedergelegt und man spart sich das Selberrechnen.
- Beispiel 1
- Beispiel 2
- Beispiel 3
Const T_ctc = 1 ' Wunschzeit in Millisekunden
Const Ocr0a_calc = Int((_xtal /((1 /(t_ctc * 10e-3)) *Prescaler * 2 )) - 1)
Ocr0a = Ocr0a_calc
Im Gegensatz zu den Berechnungen die zur Laufzeit mit Variablen geschehen, ist es hier nicht nötig einzelne Rechenschritte zu bilden.
Bascom-Konstanten Exkurs
BASCOM stellt bereits eine ganze Reihe spezifischer Konstanten bereit, auf die man ebenfalls zurückgreifen kann und es in aller Regel auch oft tut, ohne es sich bewusst zu machen.
Beispiel
PORTB = &HFF
Im Definitionsfile des verwendeten Mikrocontrollers sind u.a. für jedes Register Adressen hinterlegt - eine Konstante.
Weiter gibt es noch Konstanten die der Compiler zur Verfügung stellt und auch selbst benötigt.
'Beispiel
_XTAL
Hinterdieser Konstante verbirgt sich genau das, was der Programmierer unter $Crystal angibt, nämlich die Taktfrequenz. BASCOM selbst nutzt diese Angabe beispielsweise zum berechnen des Wertes für das Baudratenregister oder auch für Befehle wie WAIT.
Solche Konstanten lassen sich ebenfalls verwenden:
'Beispiel
Const T = (1 / _xtal) / 10e-9 'Periodendauer in Nanaosekunden
Print T ; " ns"
Weitere Konstanten können
im Report (Str-W) eingesehenwerden.
5.119 mal gelesen