LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 885|回复: 1

关于串口编程的一个疑问

[复制链接]
发表于 2009-8-5 10:37:31 | 显示全部楼层 |阅读模式
初学Linux编程,看到串口这里,有个疑问。
配置串口时用到两个数组:int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,//
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400,19200,9600,4800,2400,1200,300,
38400,19200,9600, 4800, 2400, 1200,300, };

为什么数组中有一半的数字是重复的?谢谢!
 楼主| 发表于 2009-8-6 08:27:58 | 显示全部楼层
贴代码了,,原文在这里http://www.ibm.com/developerworks/cn/linux/l-serials/index.html

设置波特率的例子函数:

/**
*@brief  设置串口通信速率
*@param  fd     类型 int  打开串口的文件句柄
*@param  speed  类型 int  串口速度
*@return  void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
                               B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400,  19200,  9600,  4800,  2400,  1200,  300, 38400,
                       19200,  9600, 4800, 2400, 1200,  300, };

void set_speed(int fd, int speed){
        int   i;
        int   status;
        struct termios   Opt;        
                tcgetattr(fd, &Opt);
        for ( i= 0;  i < sizeof(speed_arr) / sizeof(int);  i++) {
                if  (speed == name_arr) {
                             tcflush(fd, TCIOFLUSH);
                             cfsetispeed(&Opt, speed_arr);
                          cfsetospeed(&Opt, speed_arr);
                           status = tcsetattr(fd1, TCSANOW, &Opt);
                          if  (status != 0) {
                                        perror("tcsetattr fd1");
                                  return;
                             }
                            tcflush(fd,TCIOFLUSH);

                   }
          }
}

for循环里没有用到数组后面重复的数字啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表