打印
[开发工具]

奇怪啊,难道是优化设计不合理?(STM8S)

[复制链接]
2646|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STUSER|  楼主 | 2009-6-1 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
环境:STM8S105,RLINK,swim接口,STVD,COSMIC。
lReg定义为局部变量;GPIOG_PIN_0已配置为输入口(图中可以看到GPIO->DDR为0x02);
为什么lReg的值为0呢?我试了下将断点设在红线处(597行)时,单步运行,lReg是0x01。。。全速运行却始终为0。。。

WHY???
沙发
香水城| | 2009-6-1 21:38 | 只看该作者

如果怀疑是编译器优化的问题,可以检查一下反汇编指令

一般讲,如果你的程序中没有其它部分(贴出的图看不到)再用到局部变量lReg的内容,编译器完全可以把它优化掉。

使用特权

评论回复
板凳
computer00| | 2009-6-1 21:44 | 只看该作者

这个变量可能被分配到了寄存器中,如果接下来不再用了,

那么就可能被分配到其它用途,从而它的值发生了变化。

使用特权

评论回复
地板
STUSER|  楼主 | 2009-6-1 21:57 | 只看该作者

那么:如果我把lReg定义为……

3Q两位。。。

那么:如果我把lReg定义为static的全局变量,理论上不会出现上述情况,对否?

明天试下再看看是否可行。

使用特权

评论回复
5
computer00| | 2009-6-1 22:07 | 只看该作者

恩。定义为static的局部变量或者全局变量,就不会出现了

当然,如果一直没有读访问,只有写访问的话,也可能被优化掉的。

使用特权

评论回复
6
STUSER|  楼主 | 2009-6-3 20:09 | 只看该作者

换成static、volatile也还是不行。。。

使用特权

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

本版积分规则

6

主题

18

帖子

0

粉丝