首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux上C语言串口编程(有了解MINICOM原理的吗?)

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

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)试试

热点排行