打印
[技术问答]

N76E003开在尺优先9级优化必然出bug

[复制链接]
1055|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如果不开优化空间还够用,只能说你的代码太简单了。

使用特权

评论回复
5
taobaofarmer| | 2020-8-29 23:26 | 只看该作者
的确是,我的都是简单的产品,卖了11年了也没出现啥问题,大道至简,我现在用的MCU是16K FLASH的,我的程序14.几K,不开优化刚好够用,我从来不希望编译器参与我代码的优化

使用特权

评论回复
6
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

使用特权

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

本版积分规则

120

主题

901

帖子

8

粉丝