困扰了我很久的TIM1时钟走慢的问题终于找到原因了

2019-12-27 18:41发布

在使用STM32的过程中,经常发现TIM1定时器莫名奇妙的走慢,以前一句一句的查看代码,怕晶振没起振,拿示波器看,都没有发现问题,但TIM1就是走慢了,后来只能尽量避免使用TIM1,今天再次下定决心要找到原因,最后终于发现是MDK的优化造成的。
如果默认使用Level 2 (-O2)优化级别,勾选Optimize for Time 和One ELF Section per Function ,TIM1就会变慢很多,其他定时器都正常。
使用Level 0 (-O0)优化级别,勾选Optimize for Time 和One ELF Section per Function
或者使用Level 2 (-O2)优化级别,只勾选One ELF Section per Function ,则TIM1能正常工作,目前虽然能解决问题了,但是还没有仔细研究不同的优化之间的区别,到底编译器把哪部分代码给优化掉了,才造成TIM1定时器走慢呢,这个还有待进一步研究,现在要忙手头上的项目,暂且先放一放吧。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
59条回答
hittiger
1楼-- · 2019-12-29 22:12
定时器应该没有走慢,可能是你程序里 调用的函数什么的可能由于优化,没有执行,所以你觉得慢了。通常优化时加入  volatile
TigerRay
2楼-- · 2019-12-30 02:00
其实前些时间我也遇到一样的问题,程序优化后还是有一些影响的!具体要看你做什么!
我遇到的情况是,写的程序是一样的,用的优化级别不一样,最后得到的结果也是不一样的!
kevin_ares
3楼-- · 2019-12-30 03:18
回复【18楼】yinqiu009
-----------------------------------------------------------------------

从我从业至今,我没有找出过任何一个芯片的bug,也没有找出过任何一个工具的bug。很多次我都以为我成功的发现了它,但是慢慢都被时间证明是我自己的理解错了、看资料不仔细或者超常规使用造成的。
另外说句题外话,我对高度依赖仿真器持排斥态度,特别是基于多级流水线的高级cpu上,只要串口及其他输出信息端口打通,我就会停止使用仿真器调试后面程序。
-------------------------------------------------------------------------

还是那句话,没做过复杂东西的人喜欢想当然,
不然也不至于连什么叫"勘误手册"都不知道,

要么你用的芯片少得可怜,要么这些厂商出勘误表都是多此一举

再说,优化这是一个电脑根据规则进行的一种动作,
在复杂的情况下,他可能进行一些与写程序的人的意图相异的动作
这也是为什么人工智能不能代替人来写程序的根本原因
规则都是对的,得到的却不是你要的结果

算了,浪费口水
yinqiu009
4楼-- · 2019-12-30 08:34
 精彩回答 2  元偷偷看……
xtx8962
5楼-- · 2019-12-30 08:46
我也被优化害过一次,呵呵
kevin_ares
6楼-- · 2019-12-30 10:47
回复【22楼】yinqiu009
只要写入到勘误手册里面的东西就不能算是bug,而是芯片的缺陷,用户必须规避对应的缺陷,更不能算你发现的bug。
如果你个人先于勘误手册发现的新问题,并且提交给厂家加入下一版本的勘误手册里面,这个才算发现了bug。这样的事你完成过?
“做过复杂的东西”,这个话你说过几次了,咱能不能不这么搞笑啊?
----------------------------------

哈哈,看来大家以后可以跟客户说,那叫缺陷,不叫BUG,你们必须规避,

还是那句,没做过复杂东西不要在这 "臆想、猜测和攻击"

优化造成的问题不是一个volatile 那么简单的

一周热门 更多>