Hi,all
系统开了俩个定时器中断,其中一个周期50us,优先级最高(实际执行时间约为23us)。第二个周期500us,优先级次之
我发现实际在系统运行的时候,500us中断的任务周期部分点存在超时,变为525us以上,进一步导致数据处理偏差较大:电机恒定500rpm转速运行时,转速有个周期约为1s波动。
实际500us内任务的执行时间较短,执行时间40us以内。
然后为了验证是否500us中断定时不准导致的数据,我在main函数内开了一个500us的任务,将原任务放在此处执行,此时数据正常了。并且main函数的500us任务定时也基本是准的。它是由50us任务累加十次在main的死循环中触发一下
这边不明白的main死循环函数的优先级低于定时器任务,为什么反而它更准呢?
猜想是不是可能500us刚开始运行时此时来了50us任务,500us被打断了,被顺延了一个50us任务的执行时间?500us任务的输入原始数据是在50us任务内采集保存在buffer里面的,500us任务只执行计算。此时就算被打断应该也不影响速度的正常计算吧?
同时想请教大家如果不使用RTOS(最快只有1ms任务),怎么能开俩个互补影响的定时器任务呢?我目前的设置是不是有问题呢?
|