xtang先生和各位高手:
不好意思又要麻烦你们关于串口编程的问题,折腾了3天,没什么进展:
我的x86(celeron650MHz)的串口com1和一个sensor连接, 我想用write写命令给它。具体一些, 我想发的数据包构成如下:
UU SF (0x)01 (0x)0001 Value Checksum
其中: UU, SF 是字符(转换成16进制是5555和5346),
value是(0x)0000, Checksum是(0x)009B
所以我要达到目的,要send 0x5555 5346 01 0001 0000 009B
我是这样做的:
(程序有点长,就写了这么多,编译时没错,必要的 <.h>初始设置都做了,baud设成38400,同于sensor的默认设置)。
#include <_pack1.h>
。
。
。
typedef struct{
int16_t R_header;
int16_t CMD;
int8_t Input;
int16_t Type;
int16_t Value;
int16_t R_Checksum;
} CMD_message;
.
.
main()
{ int first_time;
first_time =1;
CMD_message mymsg;
.
.
FD = open(“dev/ser1”, O_RDWR);
.
if (first_time ==1)
{
mymsg.R_header = 0x5555;
mymsg.CMD = 0x5346;
mymsg.Input = 0x01;
mymsg.Type = 0x0001;
mymsg.Value = 0x0000;
mymsg.R_Checksum = 0x009B;
iByteWrite = write(FD, &mymsg, sizeof(CMD_message));
tcflush(FD,TCIFLUSH);
first_time =0;
}
.
.read(FD, &buf, sizeof(BUF));
.
}
结果不成,我仍然能连续不断的获得数据(sensor的默认发送模式), 如果命令(实际这是一条让sensor暂停发送数据的命令)成功送出,我又清掉了输入缓存, 正确结果是我不能再读到任何字节,或读到有限几个字节。请您指导一下我哪里出错了呢?
如果不麻烦的话,还有这几个派生的问题:
1。write()函数的实质是不是将mymsg的数据写入output register(default2048的),之后再通过null modem送到sensor里,是吗?我的sensor是不断的发数据的,这样以来send命令有机会送出数据吗?
2。我这种情况可否用out8/16/32()等函数实现呢,我感觉送的是一条命令,就没考虑,但这种可能性有吗?
3。 看了您以前的答疑, 您说“串口用来送字符,不关心内容”,这是不是说qnx的串口只能用来送字符型数据呀?
4。 有篇答复您说, 可以将串口设成raw模式,给我的帖子也说过可以用 -I ,
-O命令改缓存大小,请问是不是在shell窗口里就能实现,还是必须写在image里面?
再次感谢您,liug先生和大家的多次帮助!!!!!