2 salesman tangseng Salesman_Tangseng 于 2016.09.22 15:36 提问

C++缓存清空确认和采集串口数据

memset(CDataCommunication::USART_Buffer,0,sizeof(CDataCommunication::USART_Buffer));
CDataCommunication::USART_Port.Read(CDataCommunication::USART_Buffer,mRead_length,&mRead);
开了个读串口线程,在线程中进行了两步操作:1、给buffer赋值0,;2、再串口读取数据到buffer
遇到的问题:线程运行多遍下来后,偶尔得到的buffer会全是0
想问一下,是memset发生在read之后导致的吗?怎么解决?有没有确认memset操作完成之后,再进行read的办法

1个回答

yss28
yss28   2016.09.24 00:20

你的现在做法,每次读串口数据之前重置buffer为0。那么是否存在下列情况:

你这个读线程执行较快,一个时刻,你想读1kb数据,但是串口中无数据或者只有0.5kb数据,你打印的1kb的buffer内容就看到了0

一般读串口接口调用后会返回一个实际读到的数据长度,打印buffer时是否用了此值

Csdn user default icon
上传中...
上传图片
插入图片