应用场景非常简单,在串口接收完成一帧数据后,把串口接收缓存rx_buf[]的数据copy到发送缓存tx_buf[]。于是,我就是把函数写成了这个样子:
memcpy(rx_buf, tx_buf, UART_FRAME_SIZE);
我也就想当然的按照字面的意思,把rx_buf拷贝到tx_buf,多长呢?UART_FRAME_SIZE字节。
结果,我的测试结果发现,我串口回环输出的数据一直为0x00。检查对端发送数据,为正常数据,再检查接收rx_buf[]中的数据,仍然是正确的,怎么就到tx_buf[]后就成了0x00呢?!
我还考虑了会不会是因为中断响应太快,导致数据发生了踩踏,只是一直没有怀疑过memcpy()函数我写错了。
百思不得其解之下,查看了memcpy()函数的说明!简直是捶胸顿足啊!memcpy()函数的正确用法如下:
void *memcpy(void *destin, void *source, unsigned n);
看到了吧!其实人家是先目的地址,然后是源地址!将两个参数对调之后,程序运行符合预期了。
这个小坑一不小心就踩了,希望大家不要犯我的错误,赶紧避开吧!