请教任务的绝对延时问题
一个任务,希望的绝对延时时间是100ms,在任务里调用一个含信号量超时等待的函数,这个函数的超时时间设置为1000ms,用于判定外部设备是否连接,实际运行中无超时。现在的问题,在任务循环的头尾处,增加了2个osKernelGetTickCount,做减法计算任务的延时时间,并不是100,有多也有少,这种情况怎么才能做的绝对延时100ms。eric2013 发表于 2022-6-7 13:34
就是用的osDelayUntil这个API。 uint32_t t;
uint32_t tick;
tick = osKernelGetTickCount();
while(1)
{
t = osKernelGetTickCount();
tick += 100U;
osDelayUntil(tick);
osSemaphoreAcquire(sem, 1000);
t = osKernelGetTickCount() - t;
} 程序结构上就是这样,t不是100,有多有少 修改为t++,注释掉减法,在另一个1秒的任务里观察t,t每次有10个数的变化,说明延时是对的,那么原来的减法有什么问题? waterx3 发表于 2022-6-7 13:48
uint32_t t;
uint32_t tick;
tick = osKernelGetTickCount();
绝对延迟玩法不适合在里面在倒腾其它API了、 可以试试使用任务调度锁。 在绝对延时的时候,禁止任务调度。
页:
[1]