读书人

Linux上C语言串口编程(有了解MINICOM

发布时间: 2012-10-19 16:53:37 作者: rapoo

Linux下C语言串口编程(有了解MINICOM原理的吗?)
遇到了个很难解决的小问题,特来次求教,谢谢各位了,我遇到的情况如下:

我的电脑通过串口连接到一个嵌入式的目标机上了,目标机的标准输入输出是串口(类似通过串口配置交换机的界面),我想通过读串口数据将串口的输出数据都在主机显示出来,目前遇到一个小问题就是我总是输出不了最后一行数据(“MPC8610HPCD login:"),但是我需要读到这一行里的“login“来做判断跟串口进行交互,最后一行数据是个登录输入用户名的提示行,我所看到最后一行和其他行的区别就是它没有换行,需要直接在“MPC8610HPCD login:"后输入用户名回车再输入密码之类的,但是minicom可以完全正常显示,显示区别如下:

最后几行
minicom:
EXT2-fs error (device sda3): ext2_free_blocks: bit already cleared for block 143

Debian GNU/Linux 3.1 MPC8610HPCD ttyS0

MPC8610HPCD login:
我的代码只能输出:
EXT2-fs error (device sda3): ext2_free_blocks: bit already cleared for block 143

Debian GNU/Linux 3.1 MPC8610HPCD ttyS0


看了一下午minicom源码,貌似在参数配置上跟minicom几乎找不到区别,但是还是没看懂输出的方式!还有什么VT100也不太明白

char *dev = "/dev/ttyS0"; //串口配置部分
int fd = OpenDev(dev);
fcntl(fd, F_SETFL, FNDELAY);

struct termios options;

tcgetattr(fd, &options);
cfsetispeed(&options,B115200);
cfsetospeed(&options,B115200);

options.c_cflag|=(CLOCAL|CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

options.c_cflag &= ~CRTSCTS;
options.c_iflag &=~(IXON | IXOFF | IXANY);

options.c_iflag |= INPCK;

options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_oflag &= ~OPOST;

options.c_cc[VTIME] = 150;
options.c_cc[VMIN] = 0;

tcsetattr(fd,TCSANOW,&options);
tcflush(fd,TCIOFLUSH);



while (1) //main里是这么调getData的
{
getData(fd,result,&cur);
}

int getData(int fd, char* result, int* cur) //这个是读串口的函数
{

int nread,i;
char buff[1024];
nread = read(fd, buff, 1024);
//printf("\ncomecomecome : %d\n",nread);
if (nread<=0)
{
return -1;
}
for (i=0;i<nread;++i)
{
result[*cur+i]=buff[i];
printf("%c",buff[i]);
}
(*cur)=(*cur)+nread;
return 0;
}

[解决办法]
帮顶 ~~
[解决办法]
帮顶!专接非技术分!
[解决办法]
printf 需要在最后加 \n 才能输出数据。
[解决办法]
路过,帮顶。
[解决办法]
fflush(stdout)试试

读书人网 >C语言

热点推荐