kann ne Sub keine variablen übernehmen??? Wär mir ja ganz neu!
Druckbare Version
kann ne Sub keine variablen übernehmen??? Wär mir ja ganz neu!
Du gibts beim call ja das "40" als literal an, daher das "byval"
bei "byref" (also so wie bei deinem declare) muß das argument in einer variablen stehen
anders:
Konkret heißt das, bei "byval" übergibt er der sub eine KOPIE des wertes, daher kann sie auch im Porgrammspeicher stehen.Code:Declare Sub Hand_drehen_links(v As Byte)
dim varia as byte
Do
varia = 40
Call Hand_drehen_links(varia)
Loop
End
Sub Hand_drehen_links(v As Byte)
M_5_v = 1
Compare1b = V
M_5_r = 0
Led = 1
End Sub
Bei "byref" (oder nix) übergibt er die (SRAM-) adresse der Variablen
Klaro ? :-)
Heißt also, er meckert gar nicht über die Zeile, sondern eigentlich darüber, dass in der Deklaration ix angegeben wird?
Hallo, hier ein praktisches Beispiel:
Ich möchte für einen Schrittmotor die Prozedur Vorwärts1(Schritte) haben, der Wert für die Schrittzahl soll im im Kopf übergeben werden. Ich deklariere die Prozedur Vw1 so:
1. Declare Sub Vw1(byval Schritte As Word)
2. Am Ende des Programms (nach END!) steht die Definition der Prozedur, damit Bascom weiß was abzuarbeiten ist:
Sub Vw1(by Val Schritte As Byte) 'Schrittmotor links drehen
For J = 1 To Schritte
Portb.4 = 1 : Portb.5 = 1 : Waitms 3
Portb.5 = 0 : Waitms 5
Next
End Sub
3. Im Programm rufe ich die Prozedur z.B. auf mit
Call Vw1(50)
Dann dreht der Motor 50 Schritte weit.
jipp klappt danke fuer die hilfe...
@lunarman: bingo, genau
Guck mal da
https://www.roboternetz.de/wissen/in...b_.26_Function
Tip: "byval" ist püraktisch, weil man variable UND Festwerte gemischt übergeben kann
aaaaaaber:
Das Kopieren kommt bei jedem "Call"-Argument dann dazu, das frißt FRAMESIZE + Programmspeicher + Code
(bei einem String ist das ganzschön)