PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wo ist der Fehler? Sub Declare



DeltaEx
16.10.2005, 21:16
Wieso kriege ich denn Fehler?

BYVAL should be used in declaration [[112]]




Declare Sub Leftdir(ddir As Bit)
Declare Sub Rightdir(ddir As Bit)

If Command = 17 Then
Call Leftdir(1)
End If

If Command = 16 Then
Call Rightdir(1)
End If



Sub Leftdir(ddir As Bit)

If Ddir = 0 Then
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Else
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 0
End If

End Sub


Sub Rightdir(ddir As Bit)

If Ddir = 0 Then
Portb.0 = 0
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Else
Portb.0 = 0
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
End If

End Sub

oe9vfj
16.10.2005, 22:24
Der Datentyp Bit kann nicht als Parameter übergeben werden. Siehe dazu den Hilfetext bei DECLARE SUB
Die Fehlermeldung dazu ist in diesem Fall nicht hilfreich und tritt erst auf, wenn man die Funktion benützen will.

DeltaEx
16.10.2005, 23:38
ja danke!! Und wieso geht das nicht?

oe9vfj
17.10.2005, 20:39
Das hängt mit der Art zusammen, wie Parameter an SUB/FUNCIONs übergeben werden.
Auf den Softstack wird die RAM-Adresse des 1.Bytes des Parameters gelegt. Sofern die Variable BYREF übergeben wird, ist dies die Orginaladresse, bei BYVAL wird zuerst die Variable auf den Frame kopiert und dann die Adresse der Kopie im Frame auf den Softstack gelegt.
Bei Bit müsste noch die Bit-Position (0-7) im Byte irgendwo übergeben werden, dies ist aber nicht vorgesehen.
Je nach Anwendung müsste es aber möglich sein, das Problem zu umgehen. Z.B. vor dem Aufruf das Bit in ein Byte kopieren und in der Funktion den umgekehrten Vorgang.