硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5556|回复: 6
收起左侧

[有问必答] 为什么形参被无故改变

[复制链接]

12

主题

142

回帖

178

积分

初级会员

积分
178
发表于 2021-3-21 11:58:02 | 显示全部楼层 |阅读模式
在调用E2P_WData()函数地方的实参值为0x1530,通过查看汇编可以看到会被暂存到R0寄存器,R0值也为0x1530,但执行到E2P_WData()函数内部时,形参E2P_Dest值却变成了0x8510,因为R0寄存器的值也变成0x8510,R5的寄存器也是0x8510,是R0赋值给他的。没想明白是什么原因导致的.
微信图片_20210321114545.png
微信图片_20210321114702.png
回复

使用道具 举报

0

主题

221

回帖

221

积分

高级会员

积分
221
发表于 2021-3-21 20:46:28 | 显示全部楼层
进到E2P_Write里面的时候再看值,中间过程不重要。
回复

使用道具 举报

12

主题

142

回帖

178

积分

初级会员

积分
178
 楼主| 发表于 2021-3-22 07:02:01 | 显示全部楼层
regbbs 发表于 2021-3-21 20:46
进到E2P_Write里面的时候再看值,中间过程不重要。

看过了,E2P_Dest一样的值
回复

使用道具 举报

0

主题

221

回帖

221

积分

高级会员

积分
221
发表于 2021-3-22 20:09:27 | 显示全部楼层
变量前面加const试试?
这个情况没遇到过,或者改下优化等级看看。
回复

使用道具 举报

12

主题

142

回帖

178

积分

初级会员

积分
178
 楼主| 发表于 2021-3-23 12:19:33 | 显示全部楼层
regbbs 发表于 2021-3-22 20:09
变量前面加const试试?
这个情况没遇到过,或者改下优化等级看看。

优化等级是0的,不是编译的问题,是因为中断函数里的一个子函数在某种条件下会调用EEPROM写操作,导致重入问题
回复

使用道具 举报

0

主题

125

回帖

125

积分

初级会员

积分
125
发表于 2021-3-26 12:18:07 | 显示全部楼层
第二张图的断点再往前一行打断点, 这才可以看到R0的变化过程
回复

使用道具 举报

20

主题

399

回帖

459

积分

高级会员

积分
459
发表于 2021-3-26 14:29:45 | 显示全部楼层
重入问题,可以用sem或者mutex保护,看看有没有帮助
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-16 17:01 , Processed in 0.273280 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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