LinuxSir.cn,穿越时空的Linuxsir!

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

请教,怎么向linux下串口发送16进制数?比如0xFA之类的?

[复制链接]
发表于 2005-5-19 17:56:36 | 显示全部楼层 |阅读模式
write函数都是按字符写入的。。。。。。。
发表于 2005-5-19 18:06:13 | 显示全部楼层
进行类型转化,但是可能还得注意是大数端还是小数端的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-19 18:25:10 | 显示全部楼层
怎么类型转换亚,能给个列兹吗?
多谢
回复 支持 反对

使用道具 举报

发表于 2005-5-19 22:33:09 | 显示全部楼层
你好像没把问题问清楚啊,什么是“write函数都是按字符写入的。。。。。。。”?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 09:23:58 | 显示全部楼层
就是如果 char *sdata="32"; write(fdcom,sdata,2)的话,是分别向端口写入3和2这两个字符,而我想要写入的是0x20h。
已经找到一个解决办法,比如:int i =32; char *sdata = i; write(fdcom,sdata,1)就可以向端口写入0x20H了,不知还有其他什么好点的办法吗?
现在的问题是总是读不到数据。。。郁闷
FD_ZERO (&fs_read);
    FD_SET (fdCom, &fs_read);
    tv_timeout.tv_sec = TIMEOUT_SEC (datalength, 115200);
    tv_timeout.tv_usec = TIMEOUT_USEC;
    temp = select (fdCom + 1, &fs_read, NULL, NULL, &tv_timeout);
    if (temp) {
        len = read (fdCom, data, datalength);
        printf("the received len is: %d\n",len);
    }
    else
    return (-1);
这一段应该没错吧,用gdb可以看到temp==1,就是有可读取字符了,但read返回总是-1。不知道问题出在哪里了?
高手们谁有现成的列子,发上来学习一下呀,多谢多谢。。。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 09:25:40 | 显示全部楼层
端口是这么设置的
tcgetattr(fdCom, &termios_new);
     /*set baudrate at 115200Bps*/
        cfsetispeed(&termios_new,B115200);   
        cfsetospeed(&termios_new,B115200);
        /*set 8 bit */
        termios_new.c_cflag &= ~CSIZE;
        termios_new.c_cflag |= CS8;
        /*parity checking */
        termios_new.c_cflag &= ~PARENB;   /* Clear parity enable */
        /*1 stop bit */
        termios_new.c_cflag &= ~CSTOPB;
        /*no start bit */
        termios_new.c_cflag |= CLOCAL;
        termios_new.c_cflag |= CREAD;                //make port can read
        termios_new.c_cflag &= ~CRTSCTS;  //NO flow control
        termios_new.c_oflag = 0;
    termios_new.c_lflag  = 0;
    termios_new.c_cc[VTIME] = 1;       /* unit: 1/10 second. */
    termios_new.c_cc[VMIN] = 1; /* minimal characters for reading */
   
    tcflush (fdCom, TCIFLUSH);
                    /* 0 on success, -1 on failure */
    return (tcsetattr(fdCom, TCSANOW, &termios_new));
有问题吗?
为什么可以顺利发出去却收不到数据呢?
回复 支持 反对

使用道具 举报

发表于 2005-5-20 09:53:14 | 显示全部楼层
Post by friday182
就是如果 char *sdata="32"; write(fdcom,sdata,2)的话,是分别向端口写入3和2这两个字符,而我想要写入的是0x20h。
已经找到一个解决办法,比如:int i =32; char *sdata = i; write(fdcom,sdata,1)就可以向端口写入0x20H了,不知还有其他什么好点的办法吗?


-_-!!!

char c = 32;
write(fdcom, &c, 1);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 10:21:15 | 显示全部楼层
because I have to write many characters to serial port, so I have to define an array.........but it is not a problem now
the problem is about read() function. anyone can help me?
I use ioctl(fd,FIONREAD,&byte) can find there are two char in buffer, but the read() action always return -1, why....
please!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-20 11:21:19 | 显示全部楼层
my god!!
if add: data = (char *)malloc(20); before read(fdcom,data,length), it can work!
I am so stupid...........
回复 支持 反对

使用道具 举报

发表于 2005-5-20 11:24:50 | 显示全部楼层
用完了别忘了free。-_-!
回复 支持 反对

使用道具 举报

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

本版积分规则

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