os_delay
所属模块:时间管理 | 类型:任务控制函数
函数简介
os_delay 用于让当前任务进入延时等待状态(阻塞),
延时单位为系统时间片(Tick)。
在延时期间,任务会被从就绪队列移除,
调度器将切换到其他可运行任务,从而实现多任务并发执行。
函数原型
void os_delay(u8 ticks) reentrant;
参数说明
| 参数 |
说明 |
| ticks |
延时时间(单位:系统时间片) |
源码实现
void os_delay(u8 ticks) reentrant
{
EA = 0;
OS_WAIT_DI[OS_YUNXING_BIANHAO] += ticks;
if(OS_WAIT_DI[OS_YUNXING_BIANHAO] < ticks)
OS_WAIT_DI[OS_YUNXING_BIANHAO] = 255;
OS_WAIT_INT = 1;
while(OS_WAIT_DI[OS_YUNXING_BIANHAO] != 0)
{
OS_PEOCESS_OK[OS_YUNXING_BIANHAO] &= 0xFE;
os_switch();
}
EA = 1;
}
使用示例
void task1()
{
while(1)
{
// 延时10个时间片
os_delay(10);
// 执行任务逻辑
}
}
注意事项
在延时期间任务会被阻塞,不会参与调度。ticks 过大可能影响系统实时性,应合理设置。