恭喜,你发布的帖子
发布于 2023-02-23 18:04:33
51楼
“因此,在同一个扫描周期内,你若没有扫到该定时器指令,则错过了一次时间更新,表现出来就是定时器变慢了。”
-------------------------------------------------------------
我测试了,确实如此。
使用Clock_1s跳转到T251后面,这样0.5s执行定时器,0.5s错过定时器。慢一半。
------------------------------------------------------------
1、扫描周期的作用
扫描周期的某个时刻(比如用户程序开始前,具体查手册),记录本次记录与上一次记录时相差多少个100ms间隔,这个间隔数可能是0,也可能是100ms、200ms等,是100ms的整数倍
这个100ms间隔,供所有100ms定时器使用,是个公共资源。
-----------------------------------------------------------
本次记录与上次记录相差多少个100ms间隔?如果只是如此的话不至于漏记,至少在执行到时会补回来的。
这个100ms定时器更新机制还是没搞清楚。
从现象看更新机制可能是这样的:
Time100msErr= ThisCyc100msCount - LastCyc100msCount ; // 主程序执行完毕或开始时进行系统级计算,可能用户用不用定时器都会进行该计算。
if(Time100msErr > 0)
LastCyc100msCount = ThisCyc100msCount;
T250 = T250 + Time100msErr; // 用户程序内执行定时器时计算。
这样,差值虽然每个扫描都会计算出来,但每个扫描都会更新上次记录,只要差值大于0.
---------------------------------------------------------------
这样显然会存在问题。
但是我的程序定时器是每次扫描不会漏过的,并且只执行了一次。
请填写推广理由:
分享
只看
楼主