[技术问答] N76E003开在尺优先9级优化必然出bug

[复制链接]
1266|5
 楼主| imdx 发表于 2020-8-29 11:10 | 显示全部楼层 |阅读模式
查了半天,最后看汇编代码找到的原因,是新唐特有的寄存器TA保护机制造成的。
似乎也没有比较好的解决办法,只能不用9级优化。
 楼主| imdx 发表于 2020-8-29 11:12 | 显示全部楼层
这个TA保护机制一点也不好,还不如TI的EALLOW保护机制好。
都是写两次指令,还不如写0xAA打开保护,写0x55关闭保护,这样来的灵活,优化器也不会出错。
连续写0xAA 0x55开启几个周期这个设计就给优化器挖坑了。
taobaofarmer 发表于 2020-8-29 13:22 | 显示全部楼层
我从来不用优化,0级,就是关闭优化了,代码的高效和简约靠水平来保证,代码写的滥,开多少级优化都不行,而且高等级的优化有时候会在重要的时序控制差一个NOP都不行的时候给你偷偷的偷工减料了,从而造成时序跟你的代码怎么也对不上
 楼主| imdx 发表于 2020-8-29 18:38 | 显示全部楼层
taobaofarmer 发表于 2020-8-29 13:22
我从来不用优化,0级,就是关闭优化了,代码的高效和简约靠水平来保证,代码写的滥,开多少级优化都不行, ...

你刚好弄反了,写的烂的代码,一开优化就挂。良好的代码要在各种优化级别下都正常运行。
同样的代码,开不开优化,尺寸能差好几倍。C51那点FLASH如果不开优化空间还够用,只能说你的代码太简单了。
taobaofarmer 发表于 2020-8-29 23:26 | 显示全部楼层
的确是,我的都是简单的产品,卖了11年了也没出现啥问题,大道至简,我现在用的MCU是16K FLASH的,我的程序14.几K,不开优化刚好够用,我从来不希望编译器参与我代码的优化
jasontu 发表于 2020-8-31 08:13 | 显示全部楼层
使用以下的方式,可以让局部代码不最佳化。
https://www.keil.com/support/docs/2436.htm
#pragma SAVE           // save current optimization level
#pragma OPTIMIZE(7)    // disable function block optimization
void func (void)  {

}
#pragma RESTORE        // restore original optimization level
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

904

帖子

8

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