1、ticks 计数器的作用
1.1 时间基准:
ticks 计数器为系统提供时间基准,用于实现延时、超时和时间片轮转调度。
1.2 任务调度:
在每个时钟节拍中断中,µC/OS-II会检查是否有任务需要唤醒(例如延时结束或超时),并触发任务调度。
1.3 统计信息:
ticks 计数器可以用于统计系统的运行时间、任务执行时间等。
2、ticks 计数器的实现
2.1 时钟节拍中断:
硬件定时器以固定的时间间隔触发中断,µC/OS-II在中断服务程序(ISR)中递增 ticks 计数器。
2.2 系统函数:
OSTimeTick:在每个时钟节拍中断中调用,用于更新 ticks 计数器并检查任务延时。
3、ticks 计数器的相关函数
µC/OS-II提供了以下与 ticks 计数器相关的函数:
3.1 OSTimeGet
功能:获取当前的 ticks 计数器值。
函数原型:INT32U OSTimeGet(void);
返回值:当前的 ticks 值。
3.2 OSTimeSet
功能:设置 ticks 计数器的值。
函数原型:void OSTimeSet(INT32U ticks);
参数:ticks:要设置的 ticks 值。
3.3 OSTimeDly
功能:将当前任务延时指定的时钟节拍数。
函数原型:void OSTimeDly(INT16U ticks);
参数:ticks:延时的时钟节拍数。
3.4 OSTimeDlyHMSM
功能:将当前任务延时指定的时钟节拍数。
函数原型:INT8U OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);
参数:hours:小时数;minutes:分钟数;seconds:秒数;milli:毫秒数。
返回值:错误码(例如 OS_ERR_NONE 表示成功)。
4、ticks 计数器的使用示例
4.1 获取当前 ticks
值
INT32U currentTicks;
currentTicks = OSTimeGet(); // 获取当前 ticks 值
4.2 延时任务
// 延时 100 个时钟节拍
OSTimeDly(100);
// 延时 1 小时 30 分钟 15 秒 500 毫秒
OSTimeDlyHMSM(1, 30, 15, 500);
4.3 设置ticks值
// 设置 ticks 计数器为 0
OSTimeSet(0);
5、ticks计数器的配置
5.1 时钟节拍频率:
ticks计数器的更新频率是由硬件定时器的中断频率决定的。通常设置在10ms(10HZ)到100ms(100HZ)之间;
5.2 配置方法:
在OS_CFG.H 中定义 OS_TICKS_PER_SEC,表示每秒的时钟节拍数。
示例:#define OS_TICKS_PER_SEC 10 // 10Hz,即每个 tick 10ms
6、注意事项:
6.1 溢出问题:
ticks 计数器是一个 32 位无符号整数(INT32U),最大值为 4,294,967,295。如果系统运行时间过长,可能会导致计数器溢出。
6.2 实时性:
ticks 计数器的精度决定了系统的实时性。较高的时钟节拍频率可以提高实时性,但会增加系统开销。
6.3 任务延时:
使用 OSTimeDly 或 OSTimeDlyHMSM 时,任务会进入阻塞状态,直到延时结束。