Programmpause bis parport0 sich ändert?

Dieses Thema im Forum "C/C++" wurde erstellt von blacky, 30.05.2009.

  1. blacky

    blacky Doppel-As

    Dabei seit:
    25.07.2006
    Beiträge:
    132
    Zustimmungen:
    0
    Hallo, ich habe folgendes geschrieben:
    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;
    }
    
    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!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 30.05.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ohne wirklich Ahnung zu haben: laesst sich das nicht eventuell wie in der Socket Programmierung mit Select machen (sys/select.h)? Select kann schliesslich mit beliebigen File Deskriptoren arbeiten.
    Zumindest wuerde dann solange geblockt, bis etwas gelesen werden kann. Ob das tatsaechlich sinnvoll ist, haengt wahrscheinlich auch davon ab, wieviele Daten so an dem Port ankommen.

    Doch das ist wie gesagt nur ein rundstreunender Gedanke, Erfahrung habe ich damit keine.

    mfg,
    bytepool
     
  4. blacky

    blacky Doppel-As

    Dabei seit:
    25.07.2006
    Beiträge:
    132
    Zustimmungen:
    0
    Nunja, richtig viele Daten sind das nicht :D , es geht hier eigentlich nur um einen Schalter.
     
Thema:

Programmpause bis parport0 sich ändert?