现在我在做LINUX+ARM串口通信的项目,本来编写了一个很简单的一个串口发送程序,可是发现了一个问题: 我的代码如下: int main() { int length,retv,spfd; char *buffer; char frame[]={0xA1,0x23,0x00,0x34,0x76}; spfd = open("/dev/ttyS0",O_RDWR|O_NOCTTY);
串口打开,设置等操作。。。。省略 length = sizeof(frame)/sizeof(char); buffer =(char *)malloc(length);
strncpy(buffer,frame,length); write(spfd, buffer,length);
free(buffer); close(spfd); } 结果: 收到的字符是0xA1,0x23,0x00,0x00,0x00 也就是说,从0x00之后的都变为0x00.
我查找了相关资料,分析如下: 在C语言中,空格(ASCII为0,即0X00)是串结束符号,所以0x00符以ASCII文本方式是不能从串口发送的,解决的办法是指定数据发送的长度,这样数据就不会停止了。
问题分析:我自己的程序中,已经指定了发送长度length,可是为什么还是在0x00之后的数据不发送??难道0x00比指定长度有更高的优先级?
高手请出手。。。。 谢谢!