鸿哥,为什么你每次进定时中断后把定时中断关掉,退出中断时才打开?已解答。
本帖最后由 jianhong_wu 于 2014-11-3 12:11 编辑Ray-上海:
鸿哥,为什么你每次进定时中断后把中断关掉?
伟-肇庆:
鸿哥应该是不想中断嵌套吧。
鸿哥--深圳:
是的。我不想中断嵌套。而且我这样做都是在能满足项目对时间精度范围的要求下。
Ray-上海:
万一你在处理中断时,还有更高一级的中断发生咋办?
鸿哥--深圳:
没有万一。
Ray-上海:
程序不可能只有一个中断吧。
鸿哥--深圳:
我的程序框架就只有一个定时中断。我关的都是自己的定时中断。当然,如果用到串口的情况下,会有一个串口接收中断。但是这个时候我会把串口接收中断设为最高优先级,而且进入定时中断后,我只关定时中断,串口接收中断还是可以抢占定时中断的。
Ray-上海:
那就是牺牲了定时的准确来换取中断不被打断,是这样理解的吧?
鸿哥--深圳:
也可以这样理解。但是我觉得不能算牺牲时间的准确性吧,毕竟这个对时间的影响甚微,因为我大部分的定时中断虽然代码多,但是执行时间很快的。而且我认为关闭有一定的必要,因为不关闭的话,我印象中在实际项目中出过一次问题,所以我就养成了进定时中断关闭自己,退出定时中断的时候再打开它的习惯。
Ray-上海:
既然是定时中断,我觉得不应该这样处理。
鸿哥--深圳:
你如果不关闭它,也不一定会有大的问题,也许时间精度更加高。但是这个是我的习惯,很多人都劝过我,但是我还是会坚持我的习惯和感觉。
Ray-上海:
既然是定时中断,我觉得不应该这样处理
鸿哥--深圳:
你如果不关闭它,也不一定会有大的问题,也许时间精度更加高。但是这个是我的习惯,很多人都劝过我,但是我还是会坚持我的习惯和感觉。
Ray-上海:
既然开了定时中断,就必须尽量保证定时时间的准确性,这是程序运行的一个时间节奏。
鸿哥--深圳:
但是我关闭它并没有对时间产生多大影响,这个影响甚微。如果你不是用定时器做实时时钟,那么这个时间是可以满足百分之九十以上的项目的。我觉得还是要根据项目需求来看的。
Ray-上海:
而且每次进入中断关闭定时中断,然后重装初值,每次定时中断的周期都不一样。
鸿哥--深圳:
怎么会不一样,我觉得每次定时的中断周期是一样的。
风雪--重庆:
关了定时器的话,相当于在执行中断函数的时候定时器不会跑,执行一条语句大概几微妙,整个中断函数也不过几十微秒,我觉得这个精度还是很高的。
小侠--广州:
计时的时间是一样的,中断周期应该算成计时时间加上中断函数的处理时间。所以会有一些差别。
鸿哥--深圳:
是的,但是中断函数的处理时间几乎每次都是一样的。这样就保证了每次中断时间的一致性。同时,中断周期不用严格按照公式来算,只要大概按公式算个差不多就行了,因为我最后还留了一手对付时间准确性的办法,那就是我反复在连载贴里提到的,如何修正时间精度的办法。
小侠--广州:
但是中断程序的处理时间相对于计时时间是很短的,按鸿哥的想法是不需要精确定时的程序可以忽略。鸿哥的例子里面的程序都是触发中断以后关闭定时器,然后进行中断处理,跳出中断前再赋初值,然后打开定时器。
鸿哥--深圳:
是的。我觉得这样做并不影响每次定时中断的时间,因为我每次定时中断都是这么做,所以就保证每次中断时间的一致性,这样我在累计定时中断次数的时候,时间的准确性就有了保证。最后再通过利用我在连载帖子里介绍的修正时间精度办法进行修正,时间的准确度还是很有保证的,只不过不能完全按照公式那样去计算而已。我在项目里都是这样做的,我相信经得起考验。
小侠--广州:
我也没有觉得这个精度会不准,我只是从指令执行的角度分析一下这个问题。
页:
[1]