我设置了一个任务,大概30ms的周期,但是打印记录显示执行间隔从20ms 到70ms不等,为什么会相差这么大呢?
是否执行了很多任务导致任务阻塞,
任务的处理是只有打印还是耗时较长,
测试的结果任务的执行均在30ms左右。
[21:50:56.104]收←◆Q
[21:50:56.164]收←◆Q
[21:50:56.234]收←◆Q
[21:50:56.294]收←◆Q
[21:50:56.354]收←◆Q
[21:50:56.414]收←◆Q
[21:50:56.484]收←◆Q
[21:50:56.544]收←◆Q
[21:50:56.604]收←◆Q
[21:50:56.664]收←◆Q
[21:50:56.734]收←◆Q
[21:50:56.794]收←◆Q
[21:50:56.854]收←◆Q
[21:50:56.914]收←◆Q
[21:50:56.984]收←◆Q
[21:50:57.044]收←◆Q
[21:50:57.104]收←◆Q
[21:50:57.164]收←◆Q
[21:50:57.224]收←◆Q
[21:50:57.294]收←◆Q
[21:50:57.354]收←◆Q
[21:50:57.414]收←◆Q
[21:50:57.474]收←◆Q
[21:50:57.544]收←◆Q
[21:50:57.604]收←◆Q
[21:50:57.664]收←◆Q
[21:50:57.724]收←◆Q
[21:50:57.794]收←◆Q
[21:50:57.854]收←◆Q
[21:50:57.914]收←◆Q
[21:50:57.984]收←◆Q
[21:50:58.044]收←◆Q
[21:50:58.104]收←◆Q
[21:50:58.164]收←◆Q
[21:50:58.234]收←◆Q
[21:50:58.294]收←◆Q
[21:50:58.354]收←◆Q
[21:50:58.414]收←◆Q
[21:50:58.474]收←◆Q
[21:50:58.544]收←◆Q
[21:50:58.604]收←◆Q
[21:50:58.664]收←◆Q
[21:50:58.734]收←◆Q
[21:50:58.794]收←◆Q
[21:50:58.854]收←◆Q
[21:50:58.914]收←◆Q
[21:50:58.974]收←◆Q
[21:50:59.044]收←◆Q
任务执行时间不固定,有的60ms 有的70ms
我就一个任务运行,也没有开其他中断
DA217_TaskID = TMOS_ProcessEventRegister( DA217_ProcessEvent );
任务里就打印一个字符
uint16 DA217_ProcessEvent( uint8 task_id, uint16 events)
{
//DA270ReadXYZData();
PRINT("Q");
tmos_start_task( DA217_TaskID, DA217_SBP_PERIODIC_EVT, DA217_PERIODIC_EVT_PERIOD );
return (events ^ DA217_SBP_PERIODIC_EVT);
}
不是的什么原因?
如果是开了睡眠的话,可以这样处理看看,注释这部分代码替换成1ms延时,
[21:42:25.827]收←◆Q
[21:42:26.023]收←◆Q
[21:42:26.203]收←◆Q
[21:42:26.395]收←◆Q
[21:42:26.585]收←◆Q
[21:42:26.765]收←◆Q
[21:42:26.955]收←◆Q
[21:42:27.145]收←◆Q
[21:42:27.335]收←◆Q
[21:42:27.520]收←◆Q
[21:42:27.710]收←◆Q
[21:42:27.890]收←◆Q
[21:42:28.080]收←◆Q
[21:42:28.270]收←◆Q
[21:42:28.455]收←◆Q
[21:42:28.645]收←◆Q
[21:42:28.835]收←◆Q
[21:42:29.015]收←◆Q
[21:42:29.205]收←◆Q
[21:42:29.390]收←◆Q
[21:42:29.580]收←◆Q
[21:42:29.770]收←◆Q
[21:42:29.960]收←◆Q
[21:42:30.140]收←◆Q
[21:42:30.330]收←◆Q
[21:42:30.514]收←◆Q
[21:42:30.704]收←◆Q
[21:42:30.894]收←◆Q
[21:42:31.084]收←◆Q
[21:42:31.264]收←◆Q
[21:42:31.458]收←◆Q
[21:42:31.648]收←◆Q
[21:42:31.828]收←◆Q
[21:42:32.018]收←◆Q
[21:42:32.208]收←◆Q
[21:42:32.396]收←◆Q
[21:42:32.576]收←◆Q
[21:42:32.766]收←◆Q
[21:42:32.956]收←◆Q
[21:42:33.146]收←◆Q
[21:42:33.326]收←◆Q
我关闭睡眠,还是会有10ms误差
我看你截图,这里的时间误差很大
这个时间的问题可能是串口打印助手的问题,在任务里 翻io口,用逻辑分析仪抓发现没什么问题。
使用RTC_GetCycle32k();获取时间计算发现时间戳50ms有误差时,计算结果为60ms,也是没有问题的。