STM32F1与STM32CubeIDE编程实例CMSISRTOS v2延时
STM32F1与STM32CubeIDE编程实例-CMSIS-RTOS v2-延时
延时
CMSIS-RTOS v2 (CMSIS-RTOS2) 为基于 Arm® Cortex® 处理器的设备提供通用 RTOS 接口。 它为需要 RTOS 功能的软件组件提供标准化 API,从而为用户和软件行业带来巨大的好处。
本文将详细介绍,在CMSIS-RTOS V2中如何使用延时。
CMSIS-RTOS V2提供两个延时函数,分别是:
- osStatus_t osDelay (uint32_t ticks)
- osStatus_t osDelayUntil (uint32_t ticks)
1、osDelay函数
函数 osDelay 等待内核节拍中指定的时间段。 对于值 1,系统将等待直到下一个计时器滴答(tick)发生。 实际的时间延迟最多可能比指定的计时器小一个节拍,即在下一个系统节拍发生之前调用 osDelay(1) 立即重新调度线程。
延迟的线程被置于 BLOCKED 状态并立即发生上下文切换。 在给定数量的滴答声过去后,线程会自动回到 READY 状态。 如果线程在 READY 状态下具有最高优先级,它将立即被调度。
- 参数
ticks表示等待的滴答数。 - 函数返回状态码
osStatus_t,指示函数的执行状态。其返回值可能如下:- osOK:延时执行。
- osErrorParameter:时间无法处理(零值)。
- osErrorISR:无法从中断服务程序调用 osDelay。
- osError: osDelay 无法执行(内核未运行或不存在 READY 线程)。
简单的示例如下:
1 | #include "cmsis\_os2.h" |
2、osDelayUntil函数
函数 osDelayUntil 一直等待,直到达到一个绝对时间(在内核节拍中指定)。
内核滴答计数器溢出的极端情况由 osDelayUntil 处理。 因此,提供一个低于当前刻度值的值是绝对合法的,即由 osKernelGetTickCount 返回。 通常,在用户端不必关心溢出问题。 但是必须记住的唯一限制是最大延迟限制为 (231)-1 个滴答声。
延迟的线程被置于 BLOCKED 状态并立即发生上下文切换。 当达到给定时间时,线程会自动回到 READY 状态。 如果线程在 READY 状态下具有最高优先级,它将立即被调度。
- 参数
ticks滴答中的绝对时间 - 函数返回状态码
osStatus_t,指示函数的执行状态。其返回值可能如下:- osOK:延时执行。
- osErrorParameter:时间无法处理(越界)。
- osErrorISR:无法从中断服务例程调用 osDelayUntil。
- osError: osDelayUntil 无法执行(内核未运行或不存在 READY 线程)。
简单示例如下:
1 | #include "cmsis\_os2.h" |
文章来源: https://iotsmart.blog.csdn.net/article/details/124631241
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 秋意寒!
评论
