Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588585
  • 博文数量: 752
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(752)

文章存档

2011年(1)

2008年(751)

我的朋友

分类:

2008-10-13 16:51:05

1、虚拟机下使用串口的方法
      使用vmwave,默认串口设备是没有添加的,通过vmwave将设备加入即可正常使用串口。虚拟机串口打开后,可能会占用windows下的串口。另外,虚拟机的串口收发比正常的速度的确要慢许多。

 

2、消除Linux串口收发的一些规则

Linux 串口收发有许多模式,如:

1 接收返回模式: 如果串口没有接收到数据,read()函数不返回。

2 数据接收\n才返回接收的数据,否则read()函数返回0

3 特殊字符解析问题,部分特殊字符接收/发送时,会被屏蔽或者转义。如发送0x0A 接收变为0x0A 0x0A 0x0D被屏蔽等。

4 接收反馈:如串口接收到数据,立即将该数据发送出去。

(上面是我遇到的一些问题,可能表述不很清楚,呵呵。如果用于收发txt文件,一般不大注意。)

 

3、解决问题的方法是,消除这些默认规则

关键是struct termios 的参数影响。 

 

struct termios 
        tcflag_t c_iflag;               
/* 输入模式旗标 */ 
        tcflag_t c_oflag;               
/* 输出模式旗标 */ 
        tcflag_t c_cflag;               
/* 控制模式旗标 */ 
        tcflag_t c_lflag;               
/* 区域模式旗标 */ 
        cc_t c_line;                    
/* 行控制 (line discipline) */ 
        cc_t c_cc[NCCS];           
/* 控制特性 */ 
}

 

 

由于研究不深,如果要消除所有上面的规则,我是如下处理的

 

struct termios options;

 

串口打开方式:

 

 open (“dev/ttyS0” , O_RDWR|O_NOCTTY| O_NDELAY );

 

消除收发模式规则:

options.c_lflag        = 0 ;
options.c_oflag        
= 0 ;
options.c_iflag        
= 0;


消除字符屏蔽规则:

  options.c_cc[VINTR]    = 0;       /* Ctrl-c */
 options.c_cc[VQUIT]    
= 0;   /* Ctrl- */
 options.c_cc[VERASE]    = 0;   /* del */
  options.c_cc[VKILL]    
= 0;   /* @ */
  options.c_cc[VEOF]     
= 0;   /* Ctrl-d */
  options.c_cc[VTIME]    
= 1;   /*  */
  options.c_cc[VMIN]     
= 0;   /*  */
  options.c_cc[VSWTC]    
= 0;   /* '' */
  options.c_cc[VSTART]   
= 0;   /* Ctrl-q */
  options.c_cc[VSTOP]    
= 0;   /* Ctrl-s */
  options.c_cc[VSUSP]    
= 0;   /* Ctrl-z */
  options.c_cc[VEOL]     
= 0;   /* '' */
  options.c_cc[VREPRINT] 
= 0;   /* Ctrl-r */
  options.c_cc[VDISCARD] 
= 0;   /* Ctrl-u */
  options.c_cc[VWERASE]  
= 0;   /* Ctrl-w */
  options.c_cc[VLNEXT]   
= 0;   /* Ctrl-v */
  options.c_cc[VEOL2]    
= 0;   /* '' */


以上设置,在其它参数串口设置前执行,如果你需要保留部分参数,请参阅http://blog.chinaunix.net/article.php?articleId=15964&blogId=60

在RedHat Feroda 4 下编译通过

【感谢】
感谢leeh、freedk、xulion 提供的帮助


--------------------next---------------------

阅读(570) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~