打印
[STM8]

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

[复制链接]
2152|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 | 只看该作者
优化功能可能会把某些代码优化掉,从而使运行不正常

使用特权

评论回复
5
冰河w| | 2015-10-24 21:09 | 只看该作者
楼上说的对,空间够的话就不要优化了

使用特权

评论回复
6
lefeng| | 2015-10-24 21:22 | 只看该作者
关于IAR编译器优化对程序的影响,网上有资料
http://wenku.baidu.com/view/58ef8cacdd3383c4bb4cd295.html

使用特权

评论回复
7
457344370| | 2015-10-25 12:15 | 只看该作者
加个volatile试试

使用特权

评论回复
8
liuguobing|  楼主 | 2015-10-26 10:30 | 只看该作者
谢谢各位回复

对于代码优化,曾经吃过亏,延时时间改变以至于时序错误等。
不过之后这方面我是一直有注意的,不会使用 delay() 等函数,在该使用 volatile,const 的地方也都不会落,所以程序上一般调高优化级别都不会对程序执行有影响
但这次这个确实没搞太明白,心里也不踏实
另外,代码空间确实不够

使用特权

评论回复
9
舍恩| | 2015-11-9 20:36 | 只看该作者
学习学习

使用特权

评论回复
10
拉克丝| | 2015-11-9 21:22 | 只看该作者
这次是什么原因,怎么解决的呢

使用特权

评论回复
11
liuguobing|  楼主 | 2015-11-20 15:11 | 只看该作者
拉克丝 发表于 2015-11-9 21:22
这次是什么原因,怎么解决的呢

其实问题没有解决,只有调低优化级别

使用特权

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

本版积分规则

14

主题

86

帖子

4

粉丝