欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > µC/OS-II ticks计数器介绍

µC/OS-II ticks计数器介绍

2025/3/18 22:00:37 来源:https://blog.csdn.net/huishao07/article/details/146149614  浏览:    关键词:µC/OS-II ticks计数器介绍

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 时,任务会进入阻塞状态,直到延时结束。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词