CALL/de
m (1 revision) |
(→Example) |
||
(5 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | + | = <span class="f_Header">Funktion</span> = | |
− | + | Ruft eine Subroutine auf und führt sie aus. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 23: | Line 23: | ||
| valign="top" width="100%" style="width: 308px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="100%" style="width: 308px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | BASCOM-Variable oder Konstante. | |
|- style="vertical-align: top;" | |- style="vertical-align: top;" | ||
Line 30: | Line 30: | ||
| valign="top" width="100%" style="width: 308px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="100%" style="width: 308px; border: 1px solid rgb(0, 0, 0);" | | ||
− | + | BASCOM-Variable oder Konstante. | |
|- style="vertical-align: top;" | |- style="vertical-align: top;" | ||
Line 37: | Line 37: | ||
| valign="top" width="100%" style="width: 308px; border: 1px solid rgb(0, 0, 0);" | | | valign="top" width="100%" style="width: 308px; border: 1px solid rgb(0, 0, 0);" | | ||
− | Name | + | Name der Subroutine. In diesem Fall Test. |
|} | |} | ||
Line 43: | Line 43: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Man kann Subroutinen mit oder ohne Parameterübergabe aufrufen. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Es ist wichtig, dass die Subroutine deklariert wird bevor sie aufgerufen wird. Natürlich muss die Anzahl der deklarierten Parameter mit der Anzahl der übergebenen Parameter übereinstimmt. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 53: | Line 53: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Es ist außerdem wichtig, dass die Parameter bei Übergabe von Konstanten mit BYVAL deklariert werden. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Mit dem CALL-Befehl kann man Prozeduren und Subroutinen aufrufen. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Zum Beispiel: Call Test2 | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 67: | Line 67: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Der CALL-Befehl ermöglicht es, eigene Befehle zu definieren. | |
− | + | Man muss CALL nicht explizit schreiben: | |
− | Test2 | + | Test2 ruft ebenfalls die Subroutine test2 auf. |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 77: | Line 77: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Wenn man CALL nicht explizit schreibt dann müssen die Klammern weggelassen werden. | |
− | + | Also muss Call Routine(x,y,z) geschrieben werden als Routine x,y,x | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Im Gegensatz zu normalen Unterprogrammen die mit GOSUB aufgerufen werden erlaubt der CALL-Befehl die Übergabe von Parametern. | |
| | ||
− | [[File:Notice.jpg|left|Notice.jpg]] | + | [[File:Notice.jpg|left|Notice.jpg]]Durch Benutzung von CONFIG SUBMODE=NEW braucht man nicht jede Subroutine bzw. Funktion vorher zu deklarieren. |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 93: | Line 93: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | = <span class="f_Header"> | + | = <span class="f_Header">Siehe auch</span> = |
[[DECLARE]] , [[SUB]] , [[EXIT]] , [[FUNCTION]] , [[LOCAL]] , [[CONFIG SUBMODE|CONFIG SUBMODE]] | [[DECLARE]] , [[SUB]] , [[EXIT]] , [[FUNCTION]] , [[LOCAL]] , [[CONFIG SUBMODE|CONFIG SUBMODE]] | ||
Line 101: | Line 101: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | = <span class="f_Header"> | + | = <span class="f_Header">Beispiel</span> = |
<br/><source lang="bascomavr"> | <br/><source lang="bascomavr"> | ||
− | $regfile = "m48def.dat" ' | + | $regfile = "m48def.dat" ' Mikrocontroller |
− | $crystal = 8000000 ' | + | $crystal = 8000000 ' Taktfrequenz |
− | $baud = 19200 ' | + | $baud = 19200 ' Baudrate |
$hwstack = 32 ' default use 32 for the hardware stack | $hwstack = 32 ' default use 32 for the hardware stack | ||
$swstack = 10 ' default use 10 for the SW stack | $swstack = 10 ' default use 10 for the SW stack | ||
Line 114: | Line 114: | ||
− | Dim A As Byte , B As Byte ' | + | Dim A As Byte , B As Byte 'Einige Variablen dimensionieren |
− | Declare Sub Test(b1 As Byte , Byval B2 As Byte) ' | + | Declare Sub Test(b1 As Byte , Byval B2 As Byte) 'Subroutine deklarieren |
− | A = 65 ' | + | A = 65 'Der Variablen A einen Wert zuweisen |
− | Call Test(a , 5)' | + | Call Test(a , 5)'Subroutine Test mit einer Variablen und einer Konstanten aufrufen |
− | Test A , 5 'alternative | + | Test A , 5 'alternative Aufrufmöglichkeit |
− | Print A ' | + | Print A 'Den neuen Wert ausgeben |
End | End | ||
− | Sub Test(b1 As Byte , Byval B2 As Byte) ' | + | Sub Test(b1 As Byte , Byval B2 As Byte) 'Benutzen Sie die selben Variablennamen wie bei der Deklaration |
− | Print B1 ' | + | Print B1 'Ausgabe |
Print Bcd(b2) | Print Bcd(b2) | ||
− | B1 = 10 ' | + | B1 = 10 'Neuzuweisung |
− | B2 = 15 ' | + | B2 = 15 'Neuzuweisung |
End Sub | End Sub | ||
− | </source><br/>[[File:Notice.jpg|left|Notice.jpg]] | + | </source><br/>[[File:Notice.jpg|left|Notice.jpg]]Ein wichtiger Punkt ist, dass b2 in der Subroutine verändert werden kann aber sich diese Veränderung nicht im aufrufenden Programm auswirkt! |
− | Variable A | + | Variable A wird verändert. |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Das ist der Unterschied zwischen dem BYVAL und dem BYREF im Deklatationsteil der Subroutine. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Wenn man BYVAL benutzt bedeutet das, dass man den WERT des Arguments übergibt. Es wird eine Kopie der Variablen erzeugt und der Subroutine übergeben. Dadurch kann der Wert in der Subroutine benutzt und verändert werden aber Veränderungen beeinflussen nicht den aufrufenden Parameter. Das wäre bei Übergabe einer Konstanten ja auch unmöglich. | |
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
Line 144: | Line 144: | ||
<span style="font-family: Arial;"> </span> | <span style="font-family: Arial;"> </span> | ||
− | + | Wenn BYVAL nicht angegeben wird dann wird standardmäßig BYREF verwendet und die Adresse der Variablen übergeben. Wenn im obigen Beispiel eine Neuzuweisung an B1 erfolgt dann wird tatsächlich der Parameter A verändert. | |
<br/>{{Languages}} | <br/>{{Languages}} | ||
[[Category:BASCOM Language Reference/de]] | [[Category:BASCOM Language Reference/de]] |
Latest revision as of 00:53, 13 March 2013
Contents |
Funktion
Ruft eine Subroutine auf und führt sie aus.
Syntax
CALL Test [ (var1, var-n) ]
Remarks
Var1 |
BASCOM-Variable oder Konstante. |
Var-n |
BASCOM-Variable oder Konstante. |
Test |
Name der Subroutine. In diesem Fall Test. |
Man kann Subroutinen mit oder ohne Parameterübergabe aufrufen.
Es ist wichtig, dass die Subroutine deklariert wird bevor sie aufgerufen wird. Natürlich muss die Anzahl der deklarierten Parameter mit der Anzahl der übergebenen Parameter übereinstimmt.
Es ist außerdem wichtig, dass die Parameter bei Übergabe von Konstanten mit BYVAL deklariert werden.
Mit dem CALL-Befehl kann man Prozeduren und Subroutinen aufrufen.
Zum Beispiel: Call Test2
Der CALL-Befehl ermöglicht es, eigene Befehle zu definieren.
Man muss CALL nicht explizit schreiben:
Test2 ruft ebenfalls die Subroutine test2 auf.
Wenn man CALL nicht explizit schreibt dann müssen die Klammern weggelassen werden.
Also muss Call Routine(x,y,z) geschrieben werden als Routine x,y,x
Im Gegensatz zu normalen Unterprogrammen die mit GOSUB aufgerufen werden erlaubt der CALL-Befehl die Übergabe von Parametern.
Durch Benutzung von CONFIG SUBMODE=NEW braucht man nicht jede Subroutine bzw. Funktion vorher zu deklarieren.
Siehe auch
DECLARE , SUB , EXIT , FUNCTION , LOCAL , CONFIG SUBMODE
Beispiel
$regfile = "m48def.dat" ' Mikrocontroller $crystal = 8000000 ' Taktfrequenz $baud = 19200 ' Baudrate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Dim A As Byte , B As Byte 'Einige Variablen dimensionieren Declare Sub Test(b1 As Byte , Byval B2 As Byte) 'Subroutine deklarieren A = 65 'Der Variablen A einen Wert zuweisen Call Test(a , 5)'Subroutine Test mit einer Variablen und einer Konstanten aufrufen Test A , 5 'alternative Aufrufmöglichkeit Print A 'Den neuen Wert ausgeben End Sub Test(b1 As Byte , Byval B2 As Byte) 'Benutzen Sie die selben Variablennamen wie bei der Deklaration Print B1 'Ausgabe Print Bcd(b2) B1 = 10 'Neuzuweisung B2 = 15 'Neuzuweisung End Sub
Ein wichtiger Punkt ist, dass b2 in der Subroutine verändert werden kann aber sich diese Veränderung nicht im aufrufenden Programm auswirkt!
Variable A wird verändert.
Das ist der Unterschied zwischen dem BYVAL und dem BYREF im Deklatationsteil der Subroutine.
Wenn man BYVAL benutzt bedeutet das, dass man den WERT des Arguments übergibt. Es wird eine Kopie der Variablen erzeugt und der Subroutine übergeben. Dadurch kann der Wert in der Subroutine benutzt und verändert werden aber Veränderungen beeinflussen nicht den aufrufenden Parameter. Das wäre bei Übergabe einer Konstanten ja auch unmöglich.
Wenn BYVAL nicht angegeben wird dann wird standardmäßig BYREF verwendet und die Adresse der Variablen übergeben. Wenn im obigen Beispiel eine Neuzuweisung an B1 erfolgt dann wird tatsächlich der Parameter A verändert.
Languages | English • Deutsch |
---|