Variable aus Dll nur einmal initialisieren
-
Moin, Moin.
Ich habe flogendes Proble:
Möchte einen MCP2210 Chip via c# Form programmieren.
Die Dll ist mitgeliefert, läuft aber nur bis net. v. 3.5, was aber nicht weiter schlimm sein sollte.
Zudem ist ein Beispielprogramm mitgeliefert.In diesem Beispielprogramm wird eine variable UsbSpi erzeugt.
... MCP2210.DevIO UsbSpi= new DevIO(0x04D8,0x00DE);...
Danach wird ein Datensatz übertragen.
Bei der 1. Übertragung klappt alles wunderbar, aber bei der 2. Übertragung entspricht der return Wert des Sende-Befehls: ensure dll was initialized properly.
Jetzt folgt wieder ein Stück code, dann brauche ich es nicht erzählen:
private void Send() { int rslt; MCP2210.DevIO UsbSpi= new DevIO(0x04D8,0x00DE); byte[] gpioPinDes = { 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1 }; //Set all to CS rslt = UsbSpi.Settings.SetGpioConfig(MCP2210.DllConstants.CURRENT_SETTINGS_ONLY, gpioPinDes, 0xFFFF, 0xFFFF); }
Ich vermute den Fehler darin, dass ich UsbSpi jedes mal wieder neu erstelle.
Jetzt die Frage: wie kann ich die MCP2210.D... Zeile auslagern?
ich habe es schon mit einer
public static class global { MCP2210.DevIO UsbSpi= new DevIO(0x04D8,0x00DE); }
und
private void send() { ... rslt = global.UsbSpi.Settings. ... }
versucht, aber da habe ich das gleiche Problem, beim ersten übertragen klappt es und beim 2. nicht mehr.
-
Die global-Umsetzung sollte so eigentlich klappen.
Die Fehlermeldung kommt bei den Microchip Devkits glaube ich generell gerne bei Kommunikationsproblemen. Ich kenne den MCP2210 jetzt nicht, aber sofern man da irgendwie die Geschwindigkeit der Datenübertragung einstellen kann würde ich da bei den Einstellungen mal rumspielen.
-
Danke, mit der Geschwindigkeit hatte es nichts zu tuen.
War nen Programmierfehler, man darf die initialisierung von UsbSpi nich in eine eigene Klasse packen, sonder musste sie in der Form Klasse als Global initialisieren.