打印

STM32 RW问题请教

[复制链接]
1171|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2013-9-11 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在单独的一个工程上可以正常工作,但是通过IAP更新到STM32,RW段某个内存的值随机变化。
假设这个内存是0x20000044,(我的RW段是0x20000000到0x20000818)我的栈顶是0x200010D0,调试观察了一下,在函数调用的时候这个值就会变化,但是我跳转到这个函数,单步执行,又不会变化,不知道是什么意思,哪位朋友给指点一下,先行谢谢了。
沙发
jxmzzr| | 2013-9-11 11:30 | 只看该作者
是不是优化?再或者是优化?
或者观察窗口显示错误?

使用特权

评论回复
板凳
wang168506| | 2013-9-11 12:04 | 只看该作者
来学习!

使用特权

评论回复
地板
huangfeng33| | 2013-9-20 19:07 | 只看该作者
RW段中存放的一般是静态变量,包括全局静态变量和局部静态变量,初始化或未初始化的。

按你描述的,在函数调用的时候,也就是正常运行的时候,这个0x20000044内存值有变化。但是在单步调试的时候,不变。我个人觉得可能是你当前这个跟踪的函数以外,有什么地方改变了它。在全速运行时,花不了多长时间就会发现值变了,但是单步调其实是很慢的,很难复现这个情况。

这样,你先查查0x20000044这个是被编译器分配来做什么用的,是不是中断向量表的一部分,还是说是什么静态变量的存储地址。接着再往下查,是静态变量的话,它是什么变量,在代码中查查被哪些地方读写过,有没有可能是被“多线程”方式改变了。

另外也比较怀疑是做IAP时有点问题,IAP过程如果用到中断向量表(这几乎是一定要用到的),一定要注意中断向量表重映射的问题,你说的0x20000044和0x20000000很近,0x20000000可能就是你这个STM32 CPU的RAM,重映射中断向量表的时候,一般要重映射到RAM中,不知道是不是IAP相关的代码影响到了这个内存值的变化,注意查查这个问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4195

帖子

31

粉丝