PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LINUX UART WRITE Problem



tank001
03.05.09, 19:21
Hallo,

ich versuche gerade einige Byte per UART zu verschicken, leider bisher ohne Erfolg. Als Example verwende ich das NON-CANONIAL Example von TLDP.
Leider kann ich nichts senden(write), empfangen geht aber(read).

Ich verwende 2PCs mit einem Nullmodemkabel. Ueber Minicom klappt alles perfekt.

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <termios.h>

#include <stdio.h>

#include <unistd.h>

#include <string.h>



#define BAUDRATE B115200

#define MODEMDEVICE "/dev/ttyS0"

#define _POSIX_SOURCE 1 /* POSIX compliant source */

#define FALSE 0

#define TRUE 1



volatile int STOP=FALSE;



main()

{

int fd,c, res;

struct termios oldtio,newtio;

char buf[255];



fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );

if (fd <0) {perror(MODEMDEVICE); return (-1); }



tcgetattr(fd,&oldtio); /* save current port settings */



bzero(&newtio, sizeof(newtio));

newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;

newtio.c_iflag = IGNPAR;

newtio.c_oflag = 0;



/* set input mode (non-canonical, no echo,...) */

newtio.c_lflag = 0;



newtio.c_cc[VTIME] = 0; /* inter-character timer unused */

newtio.c_cc[VMIN] = 5; /* blocking read until 5 chars received */



tcflush(fd, TCIFLUSH);

tcsetattr(fd,TCSANOW,&newtio);





while (STOP==FALSE) { /* loop for input */

res = read(fd,buf,255); /* returns after 5 chars have been input */

buf[res]=0; /* so we can printf... */

printf(":%s:%d\n", buf, res);

write(fd,buf,res);

if (buf[0]=='z') STOP=TRUE;

}

tcsetattr(fd,TCSANOW,&oldtio);

}

lkwg82
04.05.09, 09:01
ich habe mich vor 2 Jahren im 6.Semester auch einmal mit der Programmierung eines Kerneltreibers aka Linux Kernel Modul befasst.

Ich biete dir hier meinen Code im Anhang mit an.

lkwg82
04.05.09, 09:29
So nun hier nochmal die Doku, ohne die ist vieles "doof" ;).

http://www.lgohlke.de/hp5/hp/english/download/studium/kernel_treiber_documentation.pdf.jsp