Realtime mit W2000
-
Hi,
ich frage über LPT1 daten von einem Inkrementalgeber ab.
Dazu benutze ich einen Thread der die Daten aus LPT1 ausliest und in einem Array speichert(normalerweise soll ein anderer Thread die Daten gleich für eine Ausgabe hernehmen).
Das Array benutze ich um die Daten graphisch auszuwerten ob die Signale korrekt verarbeitet werden, dabei stelle ich fest, dass ab und zu eine Signalverzerrung auftritt(d.h. der IG hat 10000 Inkremente pro Umdrehung, was ich rausbekomm sind so im Schnitt 9950), was eigentlich nicht sein dürfte, denn ich hab die Signale des Inkrementalgebers auch mit einem Oszi gemessen, dort sind sie einwandfrei.Meine Vermutung, der Thread legt sich ab zu mal mal schlafen, kann das sein?
W2000 ist mein BS, was mir mit LPT1 schon so einigen Kummer bereitet hat, als IDE benutz ich den BCB5.ein bischen Code:
void Thread(PVOID pvoid)
{
int ca;
bool bChange;
bool bDirection;
short data;
short tmpdata;
while (bEnd == 0)
{EnterCriticalSection(&cs);
data=LPT1->DataPort;
if (tmpdata != data &&bStart==true){array[ca]=data;ca++;}
if (data==254 && tmpdata==250){bDirection=true;}
if (data==254 && tmpdata==252){bDirection=false;}
if (data == 254 && data!=tmpdata)
{
switch(bDirection)
{
case true: position++;
break;
case false:position--;
break;
}
}
if (data==255){position=0;}
tmpdata=data;
LeaveCriticalSection(&cs);
Sleep(0);
}}
Vielleicht habt Ihr ja nen guten Tipp parat, ich bin am Ende, heul.......
-
ich bin zwar im Bereich Threads nicht der Ober-Checker, aber es ist normal, dass auch andere Threads vom OS CPU-Zeit zugewiesen bekommen... dagegen kann man AFAIK nix machen... sry
P. S. code-Tags verwenden
-
... dagegen kann man AFAIK nix machen... sry
Was ist AFAIK?
-
as far as i know