Das beschreiben und auslesen des PICs geht nur in der Hauptschleife, es soll aber in eine Procedure verpackt werden.. Eine Procedure zum lesen und eine zum schreiben
Und genau dort geht es nicht mehr.
Ich bekomme dann immer die Fehlermeldungen in beiden Proceduren => invalid memory access (read error at address 64)
Ich habe hier mal den Code.. ich selber vermute das ein Parameter nicht übergeben wird.. aber welcher.. ich finde den Fehler einfach nicht und nun brauche ich Hilfe von Profis..
Code: Alles auswählen
hDLLINST.l = LoadLibrary_(@"usb.dll")
Prototype.l _MPUSBGetDLLVersion()
Prototype.l _MPUSBGetDeviceCount(pVID_PID.s)
Prototype.l _MPUSBOpen(instance,pVID_PID.s,pEP.s,dwDir,dwReserved)
Prototype.l _MPUSBWrite(handle,pData,dwLen,pLength,dwMilliseconds)
Prototype.l _MPUSBRead(handle,pData,dwLen,pLength,dwMilliseconds)
Prototype.l _MPUSBClose(handle)
Global _MPUSBGetDLLVersion._MPUSBGetDLLVersion = GetProcAddress_(hDLLINST.l , "_MPUSBGetDLLVersion")
Global _MPUSBGetDeviceCount._MPUSBGetDeviceCount = GetProcAddress_(hDLLINST.l , "_MPUSBGetDeviceCount")
Global _MPUSBOpen._MPUSBOpen = GetProcAddress_(hDLLINST.l , "_MPUSBOpen")
Global _MPUSBWrite._MPUSBWrite = GetProcAddress_(hDLLINST.l , "_MPUSBWrite")
Global _MPUSBRead._MPUSBRead = GetProcAddress_(hDLLINST.l , "_MPUSBRead")
Global _MPUSBClose._MPUSBClose = GetProcAddress_(hDLLINST.l , "_MPUSBClose")
Global Dim USB_In. c (64)
Global Dim USB_Out.c (64)
#VID = "vid"
If Usbgeraete = _MPUSBGetDeviceCount(#VID)
MessageRequester("Info", "Kein Device gefunden", 0)
;End
EndIf
;----------------------------------------------------------------------------------
Procedure USB_Schreiben()
S = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 0 , 0)
_MPUSBWrite(S, @USB_Out(0), 64, 0, 50)
_MPUSBClose(S)
EndProcedure
Procedure USB_Lesen()
L = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 1 , 0)
_MPUSBRead (L , @USB_In(0) , 64 ,64 + @USB_In(0) , 100)
_MPUSBClose(L)
EndProcedure
;---------------------------------------------------------------------------------
If OpenWindow(0, 246, 185, 850, 311, "USB-Test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
CreateGadgetList(WindowID(0))
StringGadget(1, 20, 10, 810, 90, "")
StringGadget(2, 20, 160, 810, 90, "")
ButtonGadget(3, 380, 120, 130, 20, "ok")
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 3
For Q = 0 To 64
USB_Out(Q) = Val(StringField(GetGadgetText(1), Q + 1, ",") )
Next Q
;USB_Schreiben()
USB_Lesen()
;---------------------------------------------------------------------------------
;{ USB_Schreiben
S = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 0 , 0); diese beiden sollen als
_MPUSBWrite(S, @USB_Out(0), 64, 0, 100) ; Proceduren ausgelagert
_MPUSBClose(S) ; werden.. siehe oben..
;}
;{ USB_Lesen
Dim USB_In.c(64)
L = _MPUSBOpen (0, #VID, "\MCHP_EP1" , 1 , 0)
_MPUSBRead (L, @USB_In (0) , 64 , 64 + @USB_In(0), 100)
_MPUSBClose(L)
;}
;---------------------------------------------------------------------------------
Text.s = ""
For I = 0 To 63
Text + Str(USB_In(I))+", "
Next i
SetGadgetText(2, Text)
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
End
gruß Günni