Stack des Warrios leeren?
Moderator: Guido Körber
Stack des Warrios leeren?
Hallo Warriors, folgendes Problem:
ich muss zu definierten Zeitenpunkten diverse Signale von zwei Maschine lesen, und benutze dazu IowKitReadNonBlocking.
Es funktioniert noch nicht so wie gewünscht. Der Warrior hat scheinbar einen Stack für die Ports (welche Tiefe?).
Daher kann ich mit IowKitReadNonBlocking etliche alte Ereignisse lesen(, die ich gar nicht aufzeichnen muss).
Gibt es eine Möglichkeit den Stack vor dem Lesen zu leeren?
Danke Michael Vanderheyden
ich muss zu definierten Zeitenpunkten diverse Signale von zwei Maschine lesen, und benutze dazu IowKitReadNonBlocking.
Es funktioniert noch nicht so wie gewünscht. Der Warrior hat scheinbar einen Stack für die Ports (welche Tiefe?).
Daher kann ich mit IowKitReadNonBlocking etliche alte Ereignisse lesen(, die ich gar nicht aufzeichnen muss).
Gibt es eine Möglichkeit den Stack vor dem Lesen zu leeren?
Danke Michael Vanderheyden
Re: Stack des Warrios leeren?
Gerade habe ich die Methode "IowKitReadImmediate"
entdeckt, ich denke das habe ich gesucht.
Michael
entdeckt, ich denke das habe ich gesucht.
Michael
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Stack des Warrios leeren?
Was genau soll denn gelesen werden? IO-Pins oder ein Special-Mode?
Wenns denn die IO-Pins sind könnte man auch über den Special-Mode 0xFF gehen, der den aktuellen Pin-Status zurückliefert.
IowKitReadImmediate() ist nämlich nur für den IO-Warrior 24 und 40 gültig.
Wenns denn die IO-Pins sind könnte man auch über den Special-Mode 0xFF gehen, der den aktuellen Pin-Status zurückliefert.
IowKitReadImmediate() ist nämlich nur für den IO-Warrior 24 und 40 gültig.
Re: Stack des Warrios leeren?
Hallo,
Es sollen die IO Pins gelesen werden, es sind 2 Stück "Warrior 24", die aus zwei Threads bedient werden.
Jeder Thread überwacht die Ports eines Warrior.
Mit IowKitReadImmediate habe ich ein Problem bemerkt, ich lese alle 10ms. (Aus den Threads)
Das geht ein Paar mal gut, dann bleibt der Tread in IowKitReadImmediate stehen!
Ich habe dafuer keine Erklärung. Wird in IowKitReadImmediate irgendwas mit threads gemacht?
Michael
Es sollen die IO Pins gelesen werden, es sind 2 Stück "Warrior 24", die aus zwei Threads bedient werden.
Jeder Thread überwacht die Ports eines Warrior.
Mit IowKitReadImmediate habe ich ein Problem bemerkt, ich lese alle 10ms. (Aus den Threads)
Das geht ein Paar mal gut, dann bleibt der Tread in IowKitReadImmediate stehen!
Ich habe dafuer keine Erklärung. Wird in IowKitReadImmediate irgendwas mit threads gemacht?
Michael
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Stack des Warrios leeren?
Die Lesefunktion in der DLL nutzt auch einen Thread, der auf die Daten wartet.
Allerdings sollte das bei ReadImmediate nicht der Fall sein da man dort ja sofort die IO-Ports zurückgeliefert bekommt.
Ein Versuch wäre mit IowKitSetTimerout() einen abbruch einzustellen, der nach X Milisekunden das Lesen unterbricht falls mal
was hängen bleibt.
Allerdings sollte das bei ReadImmediate nicht der Fall sein da man dort ja sofort die IO-Ports zurückgeliefert bekommt.
Ein Versuch wäre mit IowKitSetTimerout() einen abbruch einzustellen, der nach X Milisekunden das Lesen unterbricht falls mal
was hängen bleibt.
Re: Stack des Warrios leeren?
Hallo,
>Ein Versuch wäre mit IowKitSetTimerout() einen abbruch einzustellen, der nach X Milisekunden das Lesen unterbricht falls mal
>was hängen bleibt.
Ok teste ich mal!
ich habe nun wieder auf IowKitReadNonBlocking umgestellt, da laufen die Threads ohne Probleme.
Es taucht ein anderes Problem auf, Port 0.0 zappelt bei beiden Warriors immer mal, dh. ich lese dann immer mal 0xFE dort!
Bei Beiden Warriors! Wie kann sowas passieren?
Michael
>Ein Versuch wäre mit IowKitSetTimerout() einen abbruch einzustellen, der nach X Milisekunden das Lesen unterbricht falls mal
>was hängen bleibt.
Ok teste ich mal!
ich habe nun wieder auf IowKitReadNonBlocking umgestellt, da laufen die Threads ohne Probleme.
Es taucht ein anderes Problem auf, Port 0.0 zappelt bei beiden Warriors immer mal, dh. ich lese dann immer mal 0xFE dort!
Bei Beiden Warriors! Wie kann sowas passieren?
Michael
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Stack des Warrios leeren?
Läuft das ganze mit unseren Starterkits oder ist das eine eigene Platine wo die IO-Warrior drauf sitzen?
Re: Stack des Warrios leeren?
Auf den Startkits, diese sollten dann in Geräte eingebaut werden, die die Messplätze steuern. DIe Warriors sollen auf einen Rechner protokollieren.
Michael
Michael
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Stack des Warrios leeren?
Was hängt denn dran an dem Pin?
Re: Stack des Warrios leeren?
An dem einem Warrior hängt ein Pullup widerstand, an dem anderen nichts.
Michael
Michael
Re: Stack des Warrios leeren?
Hallo, ich weiss nicht weiter,
deshalb hab ich ein sample gemacht.
Vielleicht kann man sich das mal ansehen: Ich haenge das Test - consolenprogramm und den Quelltext mal an.
Man muss das Programm starten und irgendwann fängt es an zu zapplen, bei beiden Warrior'n.
Hier ist aber nur einer angesteckt.
Michael
deshalb hab ich ein sample gemacht.
Vielleicht kann man sich das mal ansehen: Ich haenge das Test - consolenprogramm und den Quelltext mal an.
Man muss das Programm starten und irgendwann fängt es an zu zapplen, bei beiden Warrior'n.
Hier ist aber nur einer angesteckt.
Michael
Re: Stack des Warrios leeren?
Hallo,
ich hab das Modul und das Programm nochmal auf einem anderen Rechner probiert. Hier gibt es auch Port 0 Signale.
Wenn ich noch dazu die Pullup Widerstände mit einem Draht von Masse überstreiche (Klavier spielen halt), bleibt auch dieses simple Programm stehen.
Dh. IowKitReadNonBlocking liefert nichts mehr und der resultcode ist 0.
IowKitSetTimerout bringt auch nichts, er fängt sich dann nicht mehr.
Michael
ich hab das Modul und das Programm nochmal auf einem anderen Rechner probiert. Hier gibt es auch Port 0 Signale.
Wenn ich noch dazu die Pullup Widerstände mit einem Draht von Masse überstreiche (Klavier spielen halt), bleibt auch dieses simple Programm stehen.
Dh. IowKitReadNonBlocking liefert nichts mehr und der resultcode ist 0.
IowKitSetTimerout bringt auch nichts, er fängt sich dann nicht mehr.
Michael
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Stack des Warrios leeren?
Also ich hab hier ein Jungfräuliches Starterkit mit dem IO-Warrior24 drauf.
Habe das ganze mit dem Debug-Tool laufen lassen (das aus dem Anhang ein paar Posts oberhalb).
Bei mir kann ich das beschriebene Fehlverhalten nicht nachstellen.
Oder hab ich das beschriebene Fehlverhalten nicht richtig verstanden?
Solang ich an einem Pin nichts ändere (das genannte Klavierspielen, allerdings ohne Widerstand) gibt das Programm auch nicht zurück.
Wenn ich dann am Port 0 einen der Pins mit dem am GND angeschlossenen Kabel berühre seh ich auch eine Änderung im Programm.
Habe das ganze mit dem Debug-Tool laufen lassen (das aus dem Anhang ein paar Posts oberhalb).
Bei mir kann ich das beschriebene Fehlverhalten nicht nachstellen.
Oder hab ich das beschriebene Fehlverhalten nicht richtig verstanden?
Solang ich an einem Pin nichts ändere (das genannte Klavierspielen, allerdings ohne Widerstand) gibt das Programm auch nicht zurück.
Wenn ich dann am Port 0 einen der Pins mit dem am GND angeschlossenen Kabel berühre seh ich auch eine Änderung im Programm.
Re: Stack des Warrios leeren?
Hallo,
1. Der Screenshot zeigt folgendes:
programm gestartet, und nichts gemacht, einfach gewartet.
(evtl. ein bischen USB Mouseverkehr und USB Tastatur nebenher)
Es kommen zufällige Signale auf Port 0 (getestet auf beiden Warriormodulen)
Lassen Sie die Applikation doch mal eine Weile laufen.
2. Dann mit einem Draht "klaviermässig" die Ports(0..7) des Warriors nach Masse gezogen.
Eine Weile (10-20sec) geht das gut, dann kommt kein Ergebnis mehr.
Die Warrior sind sauber von einem Fachmann aufgebaut. Ich bin nur der Softwareentwickler :)
Michael
1. Der Screenshot zeigt folgendes:
programm gestartet, und nichts gemacht, einfach gewartet.
(evtl. ein bischen USB Mouseverkehr und USB Tastatur nebenher)
Es kommen zufällige Signale auf Port 0 (getestet auf beiden Warriormodulen)
Lassen Sie die Applikation doch mal eine Weile laufen.
2. Dann mit einem Draht "klaviermässig" die Ports(0..7) des Warriors nach Masse gezogen.
Eine Weile (10-20sec) geht das gut, dann kommt kein Ergebnis mehr.
Die Warrior sind sauber von einem Fachmann aufgebaut. Ich bin nur der Softwareentwickler :)
Michael
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Stack des Warrios leeren?
Wozu ein Pullup? Der IO-Warrior hat eigene intern.MichaelV wrote:An dem einem Warrior hängt ein Pullup widerstand, an dem anderen nichts.
Ist das irgend was an Kabel an dem IO-Warrior?
Wo hängt der Pullup dran? An der USB Versorgung?
Ist ein Hub zwischen Rechner und IO-Warrior?
Ist die USB Versorgungsspannung in Ordnung? Da haben wir schon "interessante" Sachen erlebt, z.B. 3,5V statt 5V.