大家好,我通过avr单片机定时发送数据由labview 接受处理,现在单次16字节稳定正确,但把两次或者4次数据一起发送时,就是32或者64字节时,总是有很多时候接受到数据不到32或者64字节,请问大家是什么问题,可以改进不
发送方式,有printf(%c), printf(%s),put_s等多种方式,但效果一样
谢谢你的回复,目前一帧也就是一次我发送16bytes,没有’\n‘结束符号。相关程序关键点如下:
unsigned char cctv[16]={0};
cctv[0]=0x55;
IMU_ReadPage(0xd0,0x1b,8,&cctv[1]);
Delayus(20);
IMU_ReadPage(0x70,0x02,7,&cctv[9]);
put_s(cctv);
现在我调试发现在16字节读取时,读Visa返回有时候5字节或10字节,说明接收不成功,但通过看保存的文件输出最终还是50毫秒,所以很纳闷,读Visa返回有时候5字节或10字节,是什么情况

接收字节不确定说明LabVIWE读取速度高于单片机2bytes发送速度。
单片机2Bytes数据还没发送完毕,生产者循环中的VISA Read就已经读取了。那读到的当然是一部分数据。
如果您单片机发送的帧有一个固定的结束符,那么可以通过设置VISA Property(Instrument I/O >> VISA >> VISA Advanced >> Property)里面的可以通过设置Terminal Char = ’\n‘ 来确保接收到一帧完整的数据。
发送端改成cctv[16]='\n'; 串口接收属性更改,然后再cctv里面有0x0a的都改成0x0b,每次发送17字节.结果返回值还是会有5或者8的显示,不是固定在16,如果单次接收16个字节以上,前面的值重复出现,比如接收17个,最后一位就是0X55,而不是0X0A。
似乎您的设置没有起作用。
请问您的property node是在VISA Serial Open VI之后, VISA Read 之前,并且串联在VISA Resource Name 紫色那根线上的吗?