这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 【我踩过的那些坑】小说一下我踩的坑memcpy函数

共1条 1/1 1 跳转至

【我踩过的那些坑】小说一下我踩的坑memcpy函数 2

院士
2025-07-23 16:50:47     打赏

memcpy函数大家肯定熟悉,使用也非常方便。昨天这个函数就导致了我调试近一小时的时间。

应用场景非常简单,在串口接收完成一帧数据后,把串口接收缓存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);

看到了吧!其实人家是先目的地址,然后是源地址将两个参数对调之后,程序运行符合预期了。

这个小坑一不小心就踩了,希望大家不要犯我的错误,赶紧避开吧!





关键词: memcpy    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]