iow40 liest falsch??

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

Moderator: Guido Körber

Post Reply
dietmar
Posts: 5
Joined: Mon Aug 30, 2010 5:42 pm

iow40 liest falsch??

Post by dietmar »

Hallo,

mein iow40 (Ubuntu 10.04) soll an Port 0 Pin 2 in einer Schleife Werte einlesen. Häufig liefert er mit von dort eine 0 obwohl ein angeschlossener Logiktester
eine 1 anzeigt (und umgekehrt). Das scheint dann so zu sein, wenn an dem Pin abwechselnd 0en und 1en ankommen. Nach einmal der Folge 0-0 oer 1-1
ist er wieder gleicher Meinung wie der Logiktester. Kann es sein, dass da ein Pufferspeicher existiert und iow40 nicht exakt den Wert ausgibt, der am Pin anliegt, sondern den (veralteten?) Wert des Puffers?

Zum Verständnis der Funktion inb(): Über Port 1 wird zunächst eine Byte an einen externen Adressdekodierer ausgegeben. Daraufhin wird Pin2 entweder 0 oder 1.

int inb(fp,adresse){
char in[4],fehl;
int erg,i,j;
fd_set rfds;
fd_set wrfds;
int retval=-1;
struct timeval tv;
tv.tv_sec=1;
tv.tv_usec=0;
FD_ZERO(&wrfds);
FD_SET(fp,&wrfds);
retval = select(fp+1,NULL,&wrfds,NULL,&tv);
if(retval == -1){
perror("error in select schreiben");
return(8);
}

else{
if(FD_ISSET(fp,&wrfds)){
in[1] = adresse & 0x0ff;
in[0] = 0xff;
in[2] = 0xff;
in[3] = 0xff;
if(write(fp,in,4) != 4){
printf("Fehler beim Schreiben 1: %d\n",errno);
perror("Fehler; ");
}
}
}
FD_ZERO(&rfds);
FD_SET(fp,&rfds);
retval = select(fp+1,&rfds,NULL,NULL,&tv);

if(retval == -1){
perror("error in select");
return(7);
}
else if(retval == 0){
printf("Keine neuen Daten \n");
return(7);
}
else{
if(FD_ISSET(fp,&rfds)){
j=read(fp,in,4);
if(j != 4){
printf("Fehler beim Lesen: %d\n",errno);
perror("HÄ? ");
}
}
}
erg = in[0] & 0x04;

return(erg);
}
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: iow40 liest falsch??

Post by Guido Körber »

Das Buffern passiert auf Rechnerseite. Ich bin mit Ubuntu nicht gerade Spezialist, weiss nicht genau wie es da im Detail aussieht, jedenfalls haben wir in der Library zu IO-Warrior verschiedene Lesefunktionen, mit IOWkitReadNonBlocking kann man ggf. so lange lesen bis die Funktion mit dem Flag zurück kommt, das besagt, dass keine neuen Daten da sind, dann hat man den neuesten Stand.
dietmar
Posts: 5
Joined: Mon Aug 30, 2010 5:42 pm

Re: iow40 liest falsch??

Post by dietmar »

Das geht dann aber wohl nicht mehr mit dem Kernel-Modul???
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: iow40 liest falsch??

Post by Guido Körber »

Doch, es muss dann das IOWKIT aus unserem SDK oben drauf installiert werden. Damit wird die Benutzung der IO-Warrior auch teilweise deutlich einfacher.
dietmar
Posts: 5
Joined: Mon Aug 30, 2010 5:42 pm

Re: iow40 liest falsch??

Post by dietmar »

Vielen Dank. Ich werde es probieren!

Dietmar
Post Reply