OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4757|回复: 0

memcpy异常复位(MDK优化等级造成)

[复制链接]

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2015-10-5
在线时间
9 小时
发表于 2021-1-12 22:29:59 | 显示全部楼层 |阅读模式
本帖最后由 wenjinzaime 于 2021-1-12 22:33 编辑

问题描述:memcpy造成异常复位;
开发环境:MDK(5.26.2.0)、优化等级(Level 3)
图片4.png



问题原因:猜测与编译器优化等级有关;
问题分析:
图片2.png

图片3.png
m_fdm_glb_data的地址为:0x1001D5C2;
出现异常复位位置在代码memcpy(&tmp_end_cd, &m_fdm_glb_data.end_cb_handle, sizeof(tmp_end_cd));”;通过简单分析未发现内存越界的情况;
通过观察其反汇编代码发现memcpy被编译优化为LDR r5,[r4,#0x40]LDRD r6,r7[r4,#0x44],由于r4+0x44地址非4字节对齐,使用LDRD指令将造成“对齐错误”,从而造成异常复位;


图片1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 12:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表