-
Hi PicNick,
sieht intresannt aus. Habs auch schon probiert, funktioniert soweit ganz gut mit dem senden und empfangen. Jedoch versteh ich das ganze noch nicht ganz. Bin ich der richtigen Annahme, daß das Single direkt aus dem Speicher Byte für Byte gelesen und gesendet wird? Oder lieg ich damit falsch? Ein Single besteht doch immer 4 Bytes?
Senden:
Code:
Sub Sendsingle(byval Einesingle01 As Single)
local cnt as byte
local vll as byte
Adr01 = Varptr(einesingle01) ' adresse von der single
For Cnt = 1 To 4
Vll = Inp(adr01) ' lesen byte aus SRAM
Printbin Vll; ' senden
Incr Adr01 ' address ++
Next
End Sub
Empfangen:
Code:
Sub Recsingle(byval Einesingle01 As Single)
local cnt as byte
local vll as byte
Adr01 = Varptr(einesingle01) ' adresse von der single
For Cnt = 1 To 4
Inputbin Vll, ' empfangen
Out Adr01 , Vll ' schreibt in SRAM
Incr Adr01 ' address ++
Next
End Sub
-
Das stimmt schon. das sub-argument ist die adresse vom 1.Byte. in der schleife wir die adresse inkrementiert, also, 2., 3., u. 4. Byte, je nachdem, was als Länge angegeben wird.
Aufpassen: wenn du varptr in der sub machst, kriegst du nicht die addresse vom single selbst, sondern von der "byval" Kopie. beim Senden macht das nix. ist halt einmal ums Eck, aber beim empfangen steht dann im original nix drin.
deshalb müßte varptr eigentlich der aufrufer vor dem call machen.
-
Ok, habs verstenden. Danke für den Tip mit "varptr"....hab mich schon über die seltsamen Effekte gewundert. Da muß ich wohl nicht "byval" sondern "byref" verwenden.
-
das Blöde ist, daß Bascom per default sowieso immer die Adresse auf den Softstack legt
https://www.roboternetz.de/wissen/in...b_.26_Function
d.h. den Varptr könnt' man sich sparen, nur müßt man dann die adresse vom Stack holen, wohl mit inline assembler.