[STM8] STM8 IAR确定地址被优化掉的问题

[复制链接]
2559|10
 楼主| liuguobing 发表于 2015-10-24 16:27 | 显示全部楼层 |阅读模式
本帖最后由 liuguobing 于 2015-10-26 16:06 编辑

项目:使用 STM8 做遥控器,每个遥控器需要一个固定且唯一的地址,在烧录时,由编程器对地址进行递增。

在  xx.icf 文件中,增加如下部分:


define region RfAddr = [from 0x9FF0 size 3];
place in RfAddr                        { ro section .RfAddr };

在程序中,进行如下定义:
__root uc8 AddrCode[3] @ ".RfAddr" = {1,2,3};        // 当前遥控器唯一地址码,在编程时通过编程器写入,每次编程自动加一


取地址程序:
        inRfCode.AddrCode.h = AddrCode[ADR_H];
        inRfCode.AddrCode.m = AddrCode[ADR_M];
        inRfCode.AddrCode.l = AddrCode[ADR_L];

现在的问题是,我优化级别为 Low  时,没有问题,可以读到正确的地址。
而如果提高优化级别(Medium 或者 High),就失效了,每次读到的都是默认初始化地址,如: {1,2,3}。而非在编程时由编程器写入的地址码。

我测试过 STM8S003,STM8L101,STM8L152 都有同样的问题。
对于代码优化,曾经吃过亏,所以写代码也是比较注意了,力求规范吧,一般也不会因为优化问题而影响程序运行
但这次这个确实没搞太明白,心里也不踏实,另外,代码空间确实不够,还是得中级以上优化才行。



豆腐块 发表于 2015-10-24 17:52 | 显示全部楼层
优化级别设低点
gejigeji521 发表于 2015-10-24 18:42 来自手机 | 显示全部楼层
关闭优化功能,这样最安全。只要代码空间够用
迪卡 发表于 2015-10-24 19:59 | 显示全部楼层
优化功能可能会把某些代码优化掉,从而使运行不正常
冰河w 发表于 2015-10-24 21:09 | 显示全部楼层
楼上说的对,空间够的话就不要优化了
lefeng 发表于 2015-10-24 21:22 | 显示全部楼层
关于IAR编译器优化对程序的影响,网上有资料
http://wenku.baidu.com/view/58ef8cacdd3383c4bb4cd295.html
457344370 发表于 2015-10-25 12:15 来自手机 | 显示全部楼层
加个volatile试试
 楼主| liuguobing 发表于 2015-10-26 10:30 | 显示全部楼层
谢谢各位回复

对于代码优化,曾经吃过亏,延时时间改变以至于时序错误等。
不过之后这方面我是一直有注意的,不会使用 delay() 等函数,在该使用 volatile,const 的地方也都不会落,所以程序上一般调高优化级别都不会对程序执行有影响
但这次这个确实没搞太明白,心里也不踏实
另外,代码空间确实不够
舍恩 发表于 2015-11-9 20:36 | 显示全部楼层
学习学习
拉克丝 发表于 2015-11-9 21:22 | 显示全部楼层
这次是什么原因,怎么解决的呢
 楼主| liuguobing 发表于 2015-11-20 15:11 | 显示全部楼层
拉克丝 发表于 2015-11-9 21:22
这次是什么原因,怎么解决的呢

其实问题没有解决,只有调低优化级别
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

86

帖子

4

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