|
本帖最后由 lvpengandy 于 2012-8-8 11:34 编辑
最近在做电表645规约,
在编程时经常用到memcpy函数,
当然也必须使用volatile来修饰通信接收到的数据缓冲数组,
即是volatile unsigned char Rx_Buf[ 200];//接收缓冲
而发送缓冲一般不用volatile修饰,
即是unsigned char Tx_Buf[ 200];//发送缓冲
我为了验证通讯的正常与否,
就在接收数据完毕之后立即把接收缓冲数组的数据copy到发送缓冲数组中,
因此就用到了memcpy函数,
即memcpy( &Tx_Buf[0], (unsigned char *)Rx_Buf [0], 200 );
这里,因为Rx_Buf 是volatile修饰的,所以必须进行强制转换,否则会因为不符合memcpy参数的类型要求而导致编译不通过
最后竟然发现copy的数据不是接收缓冲中的数据,而是一些固定的值,是“0x18,0xf0,0x9f,0xe5”等等数据,
奇怪的是每次的数据都是这几个。
发现原因了,就只能修改这个copy过程了,
换成for循环肯定没问题的。
后来我在发帖时,突然想试试另一种写法,
即memcpy( Tx_Buf, (unsigned char *)Rx_Buf , 200 );
结果竟然编译通过,结果也是正确的了!OMG,这到底怎么回事啊 ???
----------------------------------------------------------------------
文笔不太好,所以写的可能不是很通顺,以后我会努力做到最好的!谢谢 |
|