quote:以下是引用youhm在2014-02-14 09:55:38的发言:
1.你可以把定时器看做是一个独立的部件,扫描周期时间不参与定时器时间计算,10ms定时器在每个扫描周期开始刷新,也就相当于只在扫描周期开始去看一下定时器走了几个10ms,一直到下一个扫描周期开始之前,定时器位状态和定时器值都保持不变。
2.还是一样扫描周期时间不参与定时器时间计算,我觉得帮助有一点描述的不是很细致,我理解是每个扫描周期会查看相对于上个扫描周期100ms定时器经过了多少100ms间隔,由于扫描循环一般都会小于100ms,所以这100ms间隔通常为0或1,间隔为0的话,定时器自然不会更新,那就说间隔为1的情况,当执行到定时器指令时,定时器值加1并根据值更新定时器位状态,如果当前扫描周期又执行一次定时器指令,那么定时器值又会加1,这就是说执行多次定时器,定时器值会多次累计,如果没有执行定时器指令,那么本扫描周期里的100ms间隔丢失。
有点懂了,如果用事件驱动去解释的话,10ms定时器在扫描周期开始时这个触发点去检查一次,一个周期仅有一次。100ms定时器在遇到100ms定时器指令盒时就去检查一次,如果程序10ms循环一次,理论上在第10的整数倍数次时就需要更新计数器,如果程序中出现多次100ms定时器指令,就会错误的累加,就如文档中强调的那样。
10ms 和 100ms 的区别就在于触发刷新计时器动作的时间和周期内是否为常量(10ms一个周期内状态位和当前值只接受一次赋值)。