B
blacky
Hallo, ich habe folgendes geschrieben:
Wie man erkennen kann, wird einfach das Statusregister der parallelen Schnittstelle abgefragt. Wenn BIT 4 des Statusregisters 0 ist, wird die Schleife verlassen. Nun möchte ich die Schleife weg bekommen, weil diese die ganze Zeit CPU Zeit beansprucht. Das konnte ich mit dem usleep Befehl zwar minimieren aber sauber ist es denke trotzdem nicht. Jetzt möchte ich, dass das Programm komplett pausiert, bis sich im Statusregister etwas ändert. Wie kann ich das erreichen? Sind Interrupts der richtige Ansatz? Wäre super wenn ihr auch ein Beispiel machen könntet!
Danke im voraus!
Code:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/ppdev.h>
#include <sys/ioctl.h>
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
int main(int argc, char *argv[])
{
int port;
unsigned char data=0xFF;
port = open("/dev/parport0", O_RDWR);
if ( port == -1 )
{
printf("Error");
}
ioctl( port, PPCLAIM, NULL );
while (CHECK_BIT(data, 4))
{
usleep(50000);
ioctl( port, PPRSTATUS , &data );
printf("Der Wert ist %d\n", data);
}
ioctl( port, PPRELEASE, NULL );
close( port );
return EXIT_SUCCESS;
}
Danke im voraus!