本帖最后由 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 都有同样的问题。
对于代码优化,曾经吃过亏,所以写代码也是比较注意了,力求规范吧,一般也不会因为优化问题而影响程序运行
但这次这个确实没搞太明白,心里也不踏实,另外,代码空间确实不够,还是得中级以上优化才行。
|