Const

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

Hinweis kann nach Kenntnisnahme deaktiviert werden!

  • Const - Symbolische Konstanten


    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.
    • Beispiel 1
    Const Pi = 3.14159Const Radius = 23Const Umfang=2*Radius * PiConst Flaeche = Radius ^ 2 * Pi
    • Beispiel 2
    Const Kreisbogenwinkel_deg = 90Const Keisbogenlaenge = Kreisbogenwinkel_deg / 180 *Radius * Pi
    • Beispiel 3
    '*** Timer0 in CTC-Mode einrichten ***Const Prescaler = 64Config Timer0 = Timer , Prescale = Prescaler ,Clear_timer = 1
    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.

    4.999 mal gelesen