如何使用select实时监听串口通信?

zl198183 2008-02-13 09:49:23
如题,想在实时监听2440板子的串口数据,不知道用select怎么写?
...全文
367 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinalxkid 2010-12-06
  • 打赏
  • 举报
回复
回复。。阅读 !!!
cceczjxy 2008-02-15
  • 打赏
  • 举报
回复
INT32 ReadComPort (INT32 ComPort, void *data, INT32 datalength)
{
INT32 retval = 0;

FD_ZERO (&fs_read);
FD_SET (fd[ComPort], &fs_read);
tv_timeout.tv_sec = 0;//TIMEOUT_SEC (datalength, GetBaudrate ());
tv_timeout.tv_usec = 150000;//TIMEOUT_USEC;

retval = select (fd[ComPort] + 1, &fs_read, NULL, NULL, &tv_timeout);
if (retval)
return (read (fd[ComPort], data, datalength));
else
return (-1);
}
用户 昵称 2008-02-13
  • 打赏
  • 举报
回复
try



#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>

#define BAUDRATE B115200

open_port(void)
{
int fd,speed;
struct termios newtio;

fd = open("/dev/ttyS0",O_RDWR|O_NOCTTY|O_NDELAY);
if(fd==-1)
{
perror("open_port:Unable to open /dev/ttyS0");
}


tcgetattr(fd,&newtio);

bzero(&newtio,sizeof(newtio));
//setting c_cflag
newtio.c_cflag |= (CLOCAL|CREAD);
newtio.c_cflag &=~PARENB;
newtio.c_cflag &=~PARODD;
newtio.c_cflag &=~CSTOPB;
newtio.c_cflag &=~CSIZE;
newtio.c_cflag |=CS8;
newtio.c_oflag|=OPOST;
//setting c_iflag
newtio.c_iflag &=~(IXON|IXOFF|IXANY);

cfsetispeed(&newtio,BAUDRATE);
cfsetospeed(&newtio,BAUDRATE);
printf("speed=%d\n",BAUDRATE);
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);

return(fd);
}


main()
{
int fd,n,i;
unsigned char buff[256];
fd = open_port();
while(1){
n = read(fd,buff,256);
if(n>0){
printf("n=%d\n",n);
for(i=0;i<n;i++)
printf("%02X:",buff[i]);
//printf("%c",buff[i]);
printf("\n");
}
}
close(fd);
}

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧