CMSIS-RTOS2 文档翻译 之 参考(CMSIS-RTOS2 API 之 通用等待函数)

通用等待函数

等待一段时间。更多...

函数

osStatus_t osDelay (uint32_t ticks)
 等待超时(时间延迟)。更多...
 
osStatus_t osDelayUntil (uint32_t ticks)
 等到指定的时间。更多...
 

描述

通用的等待函数提供了时间延迟的手段。

注意
通用等待函数不能从中断服务例程中调用。

函数文档

osStatus_t osDelay(uint32_t ticks) 
参数
[in]ticks时间滴答值
返回
状态代码,指示该功能的执行状态。

函数 osDelay 等待内核 tick 中指定的时间段。对于值为 1 的系统等待,直到下一个计时器滴答发生。实际的时间延迟可能高达一个计时器小于指定的时间,即在下一个系统节拍发生之前调用 osDelay(1),线程立即重新调度。

延迟线程进入 BLOCKED 状态并立即发生上下文切换。在给定数量的滴答时间过后,线程会自动回到就绪状态。如果线程在 READY 状态下具有最高优先级,它将被立即调度。

可能的 osStatus_t 返回值:

  • osOK: 时间延迟被执行。
  • osErrorISR: osDelay 不能从中断服务程序调用。
注意
该函数不能从中断服务程序调用。

代码示例

#include "cmsis_os2.h"
void Thread_1 ( void *arg) { // Thread function
osStatus_t status; // capture the return status
uint32_t delayTime; // delay time in milliseconds
delayTime = 1000; // delay 1 second
status = osDelay (delayTime); // suspend thread execution
}

osStatus_t osDelayUntil(uint32_t ticks) 
参数
[in]ticks绝对时间节拍
返回
状态代码,指示该功能的执行状态。

osDelayUntil 函数等待,直到达到绝对时间(在内核 ticks 中指定)。

当核心滴答计数器溢出时的情况由 osDelayUntil 处理。因此,提供一个低于当前刻度值的值(即由 osKernelGetTickCount 返回)是绝对合法的。通常作为用户,你不必关心溢出问题。您必须考虑的唯一限制是最大延迟限制为 (232)-1 节拍。

延迟线程进入 BLOCKED 状态并立即发生上下文切换。达到给定时间时,线程自动回到 READY 状态。如果线程在 READY 状态下具有最高优先级,它将被立即调度。

可能的 osStatus_t 返回值:

  • osOK: 时间延迟被执行。
  • osParameter: 时间不能处理(超出界限)。
  • osErrorISR: osDelayUntil 不能从中断服务程序中调用。
注意
该函数不能从中断服务程序调用。

代码示例

#include "cmsis_os2.h"
void Thread_1 ( void *arg) { // Thread function
uint32_t tick;
tick = osKernelGetTickCount(); // retrieve the number of system ticks
for (;;) {
tick += 1000; // delay 1000 ticks periodically
osDelayUntil(tick);
// ...
}
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值