使用了 µC/OS-III 提供的延时函数,使用延时函数会使
得任务进入挂起态,直至延时完成或被终止延时,任务才会重新进入就绪态等待任务调度。
1.µC/OS-III 系统时钟节拍
OS_EXT OS_TICK OSTickCtr:就是一个全局的 32 比特无符号长整形变量。
cnts = (CPU_INT32U)(HAL_RCC_GetSysClockFreq() / OSCfg_TickRate_Hz);
OS_CPU_SysTickInit(cnts);
调用函数 OS_CPU_SysTickInit()配置 SysTick 之前,先根据SysTick 的时钟频率和配置项 OS_CFG_TICK_RATE_HZ 的值计算除了一个 cnts,这一步实际上就是为了计算 SysTick 的重装载值。
µC/OS-III 系统时钟节拍是来自 SysTick,那么 µC/OS-III 系统时钟节拍的处理,也就是在 SysTick 的中断服务函数中完成的。
void SysTick_Handler(void)
{
if (delay_osrunning == 0x01) //OS开始跑了,才执行
正常的调度处理
{
OS_CPU_SysTickHandler(); //调用 uC/OS-II 的
SysTick 中断服务函数
}
}
2.µC/OS-III 任务延时相关函数
1.函数 OSTimeDly()
用于以系统时钟节拍为单位进行任务延时。
void OSTimeDly( OS_TICK dly, //任务延时的系统时钟节拍数
OS_OPT opt, //延时选项
OS_ERR *p_err) //指向接收错误代码变量的指针
2.函数 OSTimeDlyHMSM()
用于以时、分、秒、毫秒为单位进行任务延时。
void OSTimeDlyHMSM(
CPU_INT16U hours, //任务延时的小时数
CPU_INT16U minutes, //任务延时的分钟数
CPU_INT16U seconds, //任务延时的秒数
CPU_INT32U milli, //任务延时的毫秒数
OS_OPT opt, //延时选项
OS_ERR *p_err) //指向接收错误代码变量的指针
3.函数 OSTimeDlyResume()
用于恢复被添加到 Tick 任务链表中挂起延时的任务。
void OSTimeDlyResume(
OS_TCB *p_tcb, //指向任务控制块的指针
OS_ERR *p_err) //指向接收错误代码变量的指针
4.函数 OSTimeGet()
用于获取当前系统时钟节拍计数器的值。
OS_TICK OSTimeGet(OS_ERR *p_err) //指向接收错误代码变量的指针
5.函数 OSTimeSet()
用于设置系统时钟节拍计数器的值。
void OSTimeSet( OS_TICK ticks, //系统时钟节拍计数器的新值
OS_ERR *p_err) //指向接收错误代码变量的指针