Hallo Daniel,
ich hab den Code jetzt mal aufgeräumt und alles rausgeworfen was ich im Moment nicht brauche.
Welche manpages meinst du? In der "open" hab ich nichts entdeckt. Wie vielleicht schon erwähnt ich bin leider kein Profi deshalb wohl auch die dummen Fragen.Code:// Compile GCC -o serial_wiring -l rt serial_wiring.c -lwiringPi #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> //WiringPi include für SEN/STA Erkennung #include <wiringPi.h> //Konfig RASPI USART #define BAUDRATE B9600 // 9600 Baud definieren für 8E1 I-Bus char MODEMDEVICE[]= "/dev/ttyAMA0"; // Schnittstelle wählen int getit; //Nachrichtenblock angekommen int fd; // File descriptor struct termios newtio={}; unsigned char receive() //Zeichen empfangen { int res; unsigned char buffer; res = read(fd, &buffer, 1); getit = fd; return buffer; } int init() //Schnittstelle parametrieren und öffnen für I-Bus 9600 8E1 { //O_RDONLY, O_WRONLY or O_RDWR - //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck) // man 2 open fuer mehr Infos - see "man 2 open" for more info // O_NOCTTY No ControllTeleType fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY ); if (fd < 0){ printf("Fehler beim oeffnen von %s\n", MODEMDEVICE); exit(-1); } memset(&newtio, 0, sizeof(newtio)); newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD | PARENB; //setzt Einstellungen vom UART newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; newtio.c_lflag = 0; /* set input mode (non-canonical, no echo, ...) */ newtio.c_cc[VTIME] = 0; /* inter-character timer unused */ newtio.c_cc[VMIN] = 1; /* blocking read until 1 chars received old 1 */ newtio.c_cc[VSTART] = 0; /* Ctrl-q startet Datenübertragung */ newtio.c_cc[VSTOP] = 0; /* Ctrl-s stoppt Datenübertragung*/ tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &newtio); return fd; } int main(int argc, char** argv) //Programmstart { //new int pin = 7; //GPIO 4 int value = 0; // Deklaration Eingangswert GPIO4 getit = 0; printf ("Raspberry Test UART+wiringPi\n") ; if (wiringPiSetup () == -1) exit (1) ; //Fehlerrückgabe wiringPi pinMode(pin,INPUT); //wiringPi GPIO4 Pin7 deklarieren char c; init(); //Schnittstelle UART parametrieren und öffnen //sleep(5); //nix tun while (1) { value = digitalRead (pin); printf("Status SEN/STA %d \n", value ); //printf("SEN/STA: %d\n", value); // BUSRUHE? c=receive(); //if((value==1)){ printf("MESSAGE %X\n", c); // c in Hex ausgeben %d = Dezimal %H = Hex } close (fd); return 0; }
Wie geht das genau mit SIGIO bzw in welchem man finde ich das?
Grüße
Rainer







Zitieren

Lesezeichen