Stack des Warrios leeren?

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Stack des Warrios leeren?

Post by MichaelV »

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
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

Gerade habe ich die Methode "IowKitReadImmediate"
entdeckt, ich denke das habe ich gesucht.

Michael
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Stack des Warrios leeren?

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

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
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Stack des Warrios leeren?

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

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
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Stack des Warrios leeren?

Post by Christoph Jung »

Läuft das ganze mit unseren Starterkits oder ist das eine eigene Platine wo die IO-Warrior drauf sitzen?
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

Auf den Startkits, diese sollten dann in Geräte eingebaut werden, die die Messplätze steuern. DIe Warriors sollen auf einen Rechner protokollieren.
Michael
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Stack des Warrios leeren?

Post by Guido Körber »

Was hängt denn dran an dem Pin?
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

An dem einem Warrior hängt ein Pullup widerstand, an dem anderen nichts.

Michael
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

Hallo, ich weiss nicht weiter,

deshalb hab ich ein sample gemacht.
Vielleicht kann man sich das mal ansehen:
testcaller.jpg
testcaller.jpg (33.29 KiB) Viewed 11168 times
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
Attachments
main.zip
(1 KiB) Downloaded 228 times
Debug.zip
(117.7 KiB) Downloaded 228 times
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

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
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Stack des Warrios leeren?

Post by Christoph Jung »

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.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
MichaelV
Posts: 32
Joined: Mon May 30, 2011 4:16 pm

Re: Stack des Warrios leeren?

Post by MichaelV »

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
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Stack des Warrios leeren?

Post by Guido Körber »

MichaelV wrote:An dem einem Warrior hängt ein Pullup widerstand, an dem anderen nichts.
Wozu ein Pullup? Der IO-Warrior hat eigene intern.

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.
Post Reply