Gambas Interpreter Crash

Fragen zum Thema Installation von Gambas

Gambas Interpreter Crash

Beitragvon CarloScr » Di 16. Dez 2014, 10:41

Hallo,

ich benutze Gambas 3.6.2 unter Ubuntu 14.04 auf einen BananaPI und möchte gerne auf USB-Messhardware zugreifen. Dazu benutze ich eine Bibliotheksfunktion
int PMD_Find_Interface(HIDINTERFACE ** hid, int interface, int product_ID) aus der Bibliothek "libmcchid.so". Ich habe die funktion in Gambas als EXTERN PMD_Find-Interface(hid as pointer, int interface, int interface_ID) AS integer IN "libmcchid" definiert. Die function scheint erkannt zu werden, weil, wenn ich den Namen ändere kommt eine Fehlermeldung, die besagt, dass dass die funktion in der angegebenen Bibliothek nicht existiert. Also muß es an den Parametern liegen. Aber m.E ist die Definition in Gambas richtig. Was kann ich hier weiter tun um das rauszufinden ?
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon tux_ » Di 16. Dez 2014, 15:34

Wie rufst du die Funktion auf? Woher bekommst du z.B. das "hid"-Argument fuer die Funktion? Bist du sicher, dass du einen HIDINTERFACE **, nicht etwa einen HIDINTERFACE * uebergibst?
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Mo 12. Jan 2015, 11:20

Der Rückgabe/übergabewertis ist tatsächlich HIDInterface**.
HIDInterface ist eine Struktur mit 52 Bytes Länge. Der Inhalt selbst interessiert mich nicht, aber ich muß die Daten an andere Funktionen übergeben. Ich rufe die Funktion auf mit:

zunächst habe ich mal ein einfachere variante gewählt:

Dim hid_p As Pointer
...
interface = PMD_Find_Interface(VarPtr(hid_p, interface, productID)

aber das führt zum besagten Crash
In Wirklichkeit soll die Funktion siebenmal aufgerufen werden und der Argumentwert in einem Feld aus sieben Pointern abgelegt werden.

Benoit riet mir es so zu tun:

Private Hid as New Pointer[7]
...
interface = PMD_Find_Interface(VarPtr(Hid[7], interface, productID)

aber das führt zu einem: Syntax error. VarPtr takes only one identifier
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon tux_ » Mo 12. Jan 2015, 14:57

Ja, ich habe die Diskussion im Bug-Tracker verfolgt.

HIDInterface ist eine Struktur mit 52 Bytes Länge.


Die Laenge der Strukturen spielt ja keine Rolle, da du scheinbar ein Array von (uninitialisierten) Zeigern uebergeben willst.

aber das führt zu einem: Syntax error. VarPtr takes only one identifier


Sieh dir die Mail von Minisini noch einmal an. Er uebergibt nur das Array, nicht alle drei Argumente, an VarPtr. Hier der relevante Auszug aus der Konversation fuer die anderen:

> 1.) HIDInterface* hid[7]; how to transscribe this in Gambas

Private Hid As New Pointer[7]

> 2.) interface = PMD_Find_Inteface ( &hid[i], i, USB1608FS_PID); how to
> setup this call

Const USB1608FS_PID As Integer = &H007D& ' from usb_1608FS.h
...
PMD_Find_Interface(VarPtr(Hid[I]), I, USB1608FS_PID)


In Wirklichkeit soll die Funktion siebenmal aufgerufen werden und der Argumentwert in einem Feld aus sieben Pointern abgelegt werden.


In etwa so?

gambas code
Dim Hid as New Pointer[7]
Dim iInd As Integer
Dim interface As IrgendeinTyp ' Mir unbekannt

For Each iInd = 0 To 6
interface = PMD_Find_Interface(VarPtr(Hid[iInd]), iInd, productID)
Next


Das ist die richtige Uebersetzung des C-Schnipsels (in einer Schleife verpackt), den du angegeben hast. Ob das tatsaechlich das ist, was du mit der Bibliothek tun sollst, weiszt allein du.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Mo 12. Jan 2015, 15:35

Ja, genau das habe ich gemacht wie Du es vorgeschlagen hast, nur mit For.. Next schleife, aber genau das funktioniert nicht und ergibt den Syntax Error
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon tux_ » Mo 12. Jan 2015, 16:58

Zeigst du uns bitte den ganzen Code? Als Quell-Archiv am besten.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Mo 12. Jan 2015, 17:14

Du meinst den Code der die Funktionen enthält, auf den ich zugreifen will ?
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Mo 12. Jan 2015, 17:26

Am einfachsten gehts, wenn Du das vom FTP-Server herunterlädst
ftp lx10.tx.ncsu.edu
>username:anonymus
>password:emailaddress
>cd pub/Linux/drivers
>get 61-mcc.rules
>cd USB
>get libhid-0.2.16.tar.gz
>get MCCLIBHID.1.62.tgz
>exit

Dann hast du alles
Installation:
See http://www.mccdaq.com/TechTips/TechTip-9.aspx
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Mo 12. Jan 2015, 17:38

Ich habe vergessen die Anwendung anzugeben die ich in Gambas nachbilden will: test-usb1608FS
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon tux_ » Mo 12. Jan 2015, 17:54

Ich meine den Code, der den Fehler wirft -- den Gambas-Code. Tut mir leid, ich werde mir den C-Code nicht ansehen. Ich bin schon mit einem Bein in der Pruefungszeit und habe keine Zeit uebrig, in der ich dir so umfangreich zu helfen versuchen koennte.
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Mo 12. Jan 2015, 19:29

Hier ist der Code mit dem ich mich gerade rumschlage:


gambas code
Extern hid_init() As Integer In "libhid"
Extern PMD_Find_Interface(hid As Pointer, interface As Integer, prod_ID As Integer) As Integer In "libmcchid"

Const HID_RET_SUCCESS As Integer = 0
Private Const USB1608FS_PID As Integer = &7d



Public Sub _new()

End

Public Sub Form_Open()

Dim Hid As New Pointer[7]
Dim ret_int As Integer
Dim i As Integer
Dim interface As Integer

ret_int = -1
ret_int = hid_init()
If ret_int <> HID_RET_SUCCESS Then Debug "HID-Initialisation failed"
For i = 0 To 6
interface = PMD_Find_Interface(VarPtr(Hid(i)), i, 125)

Next i

End


Na dann wünsch ich Dir mal viel Erfolg bei Deinen Prüfungen !!!!
Zuletzt geändert von tux_ am Mo 12. Jan 2015, 21:16, insgesamt 1-mal geändert.
Grund: Fuer Gambas-Code haben wir bessere Code-Tags im Editor
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon tux_ » Mo 12. Jan 2015, 21:19

Auf Array-Elemente greift man in Gambas mit eckigen Klammern zu und auf das NEXT in einer For-Next-Schleife folgt nichts weiter. Syntaktisch sollte folgender Code korrekt sein:
gambas code
Extern hid_init() As Integer In "libhid"
Extern PMD_Find_Interface(hid As Pointer, interface As Integer, prod_ID As Integer) As Integer In "libmcchid"

Const HID_RET_SUCCESS As Integer = 0
Private Const USB1608FS_PID As Integer = &7d ' = 125

Public Sub Form_Open()
Dim Hid As New Pointer[7]
Dim ret_int As Integer
Dim i As Integer
Dim interface As Integer

ret_int = -1
ret_int = hid_init()
If ret_int <> HID_RET_SUCCESS Then Debug "HID-Initialisation failed"
For i = 0 To 6
interface = PMD_Find_Interface(VarPtr(Hid[i]), i, 125)
Next
End
Achtung: Es passiert, dass ich einen frisch geschrieben Beitrag innerhalb von 10 Minuten noch 3-4 Mal aendere!
tux_
Site Admin
 
Beiträge: 941
Registriert: Di 11. Nov 2008, 20:05

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Di 13. Jan 2015, 09:29

Wie Du es vorgeschlagen hast, also mit eckigen Klammern, liefert das selbe Resultat. Ich habe leider keine Anhaltspunkte mehr, wie ich das lösen soll. Ich glaube Gambas ist dafür nicht geeignet, was ich eigentlich nicht verstehe
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon CarloScr » Di 13. Jan 2015, 09:48

Ich habs jetzt nochmal so versucht:
Code: Alles auswählen
Extern hid_init() As Integer In "libhid"
Extern PMD_Find_Interface(hid As Pointer, interface As Integer, prod_ID As Integer) As Integer In "libmcchid"

Const HID_RET_SUCCESS As Integer = 0
Private Const USB1608FS_PID As Integer = &7d
'Private hid As New Pointer[7]


Public Sub Form_Open()

Dim ret_int As Integer
Dim i As Integer
Dim interface As Integer
Dim hid_p As Pointer[]
Dim hid_z As Pointer

ret_int = -1
ret_int = hid_init()
If ret_int <> HID_RET_SUCCESS Then Debug "HID-Initialisation failed"
hid_p = New Pointer[](7)
For i = 0 To 6
  hid_p[i] = Alloc(1000)
  hid_z = hid_p[i]
  interface = PMD_Find_Interface(VarPtr(hid_z), i, 125)
 
Next

End

offensichtlich akzeptiert VarPtr() hid_p[i] nicht als Argument. Ich initailsiere jetzt mal die Pointer, aber das bringt auch nichts.Der Syntaxfehler ist weg aber dafür habe ich wieder den Crash.
CarloScr
Foriker
 
Beiträge: 40
Registriert: Do 11. Dez 2014, 13:14

Re: Gambas Interpreter Crash

Beitragvon gambi » Fr 16. Jan 2015, 13:54

Hallo,
ich denke, da ist ein Fehler in deinem Code.

"hid_p = New Pointer[](7)" sollte in "hid_p = New Pointer[7]" umbenannt werden.

gg
gambi
Foriker
 
Beiträge: 130
Registriert: Mi 8. Mai 2013, 21:46

Nächste

Zurück zu Wie geht was ...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron