app执行时间不固定

我设置了一个任务,大概30ms的周期,但是打印记录显示执行间隔从20ms 到70ms不等,为什么会相差这么大呢?

  1. 是否执行了很多任务导致任务阻塞,

  2. 任务的处理是只有打印还是耗时较长,

    emobile_2022-04-08_13-35-55.png

    测试的结果任务的执行均在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延时,

emobile_2022-04-13_10-16-04.png



[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误差


我看你截图,这里的时间误差很大


1.PNG


这个时间的问题可能是串口打印助手的问题,在任务里 翻io口,用逻辑分析仪抓发现没什么问题。

使用RTC_GetCycle32k();获取时间计算发现时间戳50ms有误差时,计算结果为60ms,也是没有问题的。


只有登录才能回复,可以选择微信账号登录