困扰了我很久的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条回答
zouyf12
1楼-- · 2019-12-30 11:31
还没有出过这种问题。   但是我也觉得TIM走慢和优化等级没关系吧。 至少TIM模块走时的快慢只和自己的配置寄存器有关,个人同意19楼的看法, 估计是你程序里有操作TIM的操作,然后优化把你那句给干掉了,没有及时操作,到时TIM走慢,这个是可以理解的,51的定时器就可以弄出这样的效果。       归根结底还是你程序的问题,  有些地方表示不清楚,让编译器自作聪明。
rita
2楼-- · 2019-12-30 15:01
楼主可以弄个你的程序tim核心程序加少少输出指示(点灯),减少不必要的程序,看看不同优化有什么不同?一步步分析编译器是优化什么地方~~否则大家谁也说服不了谁,大家都是从自己的经验出发的
solidsky
3楼-- · 2019-12-30 20:46
 精彩回答 2  元偷偷看……
victor275
4楼-- · 2019-12-31 00:00
mark
Achin
5楼-- · 2019-12-31 04:14
优化和编译器本身的Bug会害死人,mdk4.12和mdk4.21编译同一个完全没差别的程序,生成的code,执行结果不一样。平台是lpc2478。
ps工程配置什么的,都是完全一样的。
vacd
6楼-- · 2019-12-31 08:34
这个帖子中的争论让我这个菜鸟也学习到很多东西。楼主把自己的经验分享出来很值得赞扬,我个人认为即使是错误的,大家进行抨击,也是好的,互相学习嘛,何必面红耳赤

一周热门 更多>