[开发工具] 奇怪啊,难道是优化设计不合理?(STM8S)

[复制链接]
3498|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的全局变量,理论上不会出现上述情况,对否?

明天试下再看看是否可行。
computer00 发表于 2009-6-1 22:07 | 显示全部楼层

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

当然,如果一直没有读访问,只有写访问的话,也可能被优化掉的。
 楼主| STUSER 发表于 2009-6-3 20:09 | 显示全部楼层

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

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

本版积分规则

6

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部