跳转至

os2

os2 提供符合 CMSIS RTOS2 标准的实时操作系统内核接口,支持线程管理、定时器、事件标志、互斥锁、信号量和消息队列等功能。

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

接口清单

接口名称 功能简述
osKernelInitialize 初始化操作系统
osKernelGetInfo 获取系统版本信息
osKernelGetState 获取系统状态
osKernelStart 启动操作系统
osKernelLock 锁内核(锁调度)
osKernelUnlock 解锁内核(解锁调度)
osKernelRestoreLock 恢复内核锁状态
osKernelGetTickCount 获取系统启动后时间(单位:tick)
osKernelGetTickFreq 获取每秒的tick数
osKernelGetSysTimerCount 获取系统启动后时间(单位:cycle)
osKernelGetSysTimerFreq 获取每秒的CPU cycle数
osThreadNew 创建任务
osThreadJoin 等待指定的任务并回收任务资源
osThreadDetach 设置任务为detached属性
osThreadGetName 获取任务名
osThreadGetId 获取任务句柄
osThreadGetState 获取任务状态
osThreadGetStackSize 获取任务栈大小
osThreadGetStackSpace 获取未使用过的任务栈空间
osThreadSetPriority 设置任务优先级
osThreadGetPriority 获取任务优先级
osThreadYield 切换至同优先级的就绪任务
osThreadSuspend 挂起任务
osThreadResume 恢复任务
osThreadTerminate 终止任务
osThreadGetCount 获取已创建的任务数量
osThreadFlagsSet 写入指定事件
osThreadFlagsClear 清除指定事件
osThreadFlagsGet 获取当前任务事件
osThreadFlagsWait 等待指定事件
osDelay 任务延时(单位:tick)
osDelayUntil 延时至某一时刻(单位:tick)
osTimerNew 创建定时器
osTimerGetName 获取定时器名称
osTimerStart 启动定时器
osTimerStop 停止定时器
osTimerIsRunning 定时器是否在计时中
osTimerDelete 删除定时器
osEventFlagsNew 创建事件
osEventFlagsGetName 获取事件名称
osEventFlagsSet 写入指定事件
osEventFlagsClear 清除指定事件
osEventFlagsGet 获取当前事件值
osEventFlagsWait 等待指定事件
osEventFlagsDelete 删除事件
osMutexNew 创建互斥锁
osMutexGetName 获取互斥锁名称
osMutexAcquire 获取互斥锁(阻塞等待)
osMutexRelease 释放互斥锁
osMutexGetOwner 获取持有该互斥锁的任务句柄
osMutexDelete 删除互斥锁
osSemaphoreNew 创建信号量
osSemaphoreGetName 获取信号量名称
osSemaphoreAcquire 获取信号量(阻塞等待)
osSemaphoreRelease 释放信号量
osSemaphoreGetCount 获取信号量的计数值
osSemaphoreDelete 删除信号量
osMessageQueueNew 创建消息队列
osMessageQueueGetName 获取消息队列名称
osMessageQueuePut 往消息队列里放入消息
osMessageQueueGet 从消息队列里获取消息
osMessageQueueGetCapacity 获取消息队列节点数量
osMessageQueueGetMsgSize 获取消息队列节点大小
osMessageQueueGetCount 获取当前消息队列里的消息数量
osMessageQueueGetSpace 获取当前消息队列里的剩余消息数量
osMessageQueueDelete 删除消息队列

Functions

osKernelInitialize

osStatus_t osKernelInitialize(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 初始化操作系统内核,为内核调度器的启动做准备

前置条件

  • 调用时序约束:必须在osKernelStart()之前调用
  • 调用上下文约束:不可在中断服务例程(ISR)中调用

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 内核初始化完成
osError 未指定的错误 内核状态不为osKernelInactive时调用
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osKernelGetInfo

osStatus_t osKernelGetInfo(osVersion_t *version, char *id_buf, uint32_t id_size)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取系统版本信息,包括API版本和内核版本
  • version字段填充API版本和内核版本信息,id_buf字段填充内核标识字符串
  • 可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
version osVersion_t * 指向用于接收版本信息的缓冲区 非NULL指针
id_buf char * 指向用于接收内核标识字符串的缓冲区 非NULL指针
id_size uint32_t 内核标识字符串缓冲区大小(字节) 大于0

出参

名称 数据类型 输出说明
version osVersion_t * 填充API版本和内核版本信息
id_buf char * 填充内核标识字符串

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 成功获取内核信息
osError 未指定的错误 version或id_buf为NULL,或id_size为0

osKernelGetState

osKernelState_t osKernelGetState(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取系统状态,返回当前内核的运行状态
  • 可在中断服务例程(ISR)中调用
  • 返回值指示内核当前所处的状态

返回值

返回类型:osKernelState_t

返回值 文字含义 触发场景
osKernelInactive 内核未激活 内核尚未初始化
osKernelReady 内核就绪 内核已初始化,等待启动
osKernelRunning 内核运行中 内核调度器正在运行
osKernelLocked 内核已锁定 内核调度器已被锁定
osKernelSuspended 内核已挂起 内核调度器已被挂起
osKernelError 内核错误 内核处于错误状态

osKernelStart

osStatus_t osKernelStart(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 启动操作系统,开始内核调度

前置条件

  • 调用时序约束:必须在osKernelInitialize()成功返回后调用
  • 调用上下文约束:不可在中断服务例程(ISR)中调用
  • 内核必须已初始化(处于osKernelReady状态)
  • 至少已创建一个用户线程

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 内核调度器启动成功
osError 未指定的错误 内核状态不为osKernelReady时调用
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osKernelLock

int32_t osKernelLock(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 锁内核(锁调度),禁止线程切换
  • 支持嵌套锁定,与osKernelUnlock和osKernelRestoreLock配合使用

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用
  • 内核必须已启动(处于osKernelRunning状态)
  • 调用线程必须在非ISR上下文中执行

返回值

返回类型:int32_t

返回值 文字含义 触发场景
0 之前未锁定 调用前调度器未被锁定
1 之前已锁定 调用前调度器已被锁定
osErrorISR 负值,不允许在ISR中调用 在中断服务例程中调用
osError 负值,未指定的错误 内核未启动时调用

osKernelUnlock

int32_t osKernelUnlock(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 解锁内核(解锁调度),恢复线程切换
  • 支持嵌套解锁,与osKernelLock和osKernelRestoreLock配合使用

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用
  • 内核必须已启动(处于osKernelRunning状态)
  • 调用线程必须在非ISR上下文中执行

返回值

返回类型:int32_t

返回值 文字含义 触发场景
0 之前未锁定 调用前调度器未被锁定
1 之前已锁定 调用前调度器已被锁定
osErrorISR 负值,不允许在ISR中调用 在中断服务例程中调用
osError 负值,未指定的错误 内核未启动时调用

osKernelRestoreLock

int32_t osKernelRestoreLock(int32_t lock)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 恢复内核锁状态到指定值
  • 通常与osKernelLock/osKernelUnlock配合使用,用于实现临界区保护
  • lock参数由之前osKernelLock或osKernelUnlock的返回值获得

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用
  • 内核必须已启动(处于osKernelRunning状态)
  • 调用线程必须在非ISR上下文中执行

入参

名称 参数类型 详细说明 约束取值范围
lock int32_t 要恢复的锁定状态 0=解锁,1=锁定

返回值

返回类型:int32_t

返回值 文字含义 触发场景
0 当前未锁定 恢复后调度器处于解锁状态
1 当前已锁定 恢复后调度器处于锁定状态
osErrorISR 负值,不允许在ISR中调用 在中断服务例程中调用
osError 负值,未指定的错误 内核未启动时调用

osKernelGetTickCount

uint32_t osKernelGetTickCount(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取系统启动后时间(单位:tick)
  • tick计数从内核启动后递增,用于时间相关计算
  • 可在中断服务例程(ISR)中调用

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
tick计数值 内核当前tick计数 成功获取当前tick计数

osKernelGetTickFreq

uint32_t osKernelGetTickFreq(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取每秒的tick数,返回值单位为Hz
  • 可在中断服务例程(ISR)中调用
  • 用于将tick计数转换为实际时间

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
频率值 内核tick频率(Hz) 成功获取tick频率

osKernelGetSysTimerCount

uint32_t osKernelGetSysTimerCount(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取系统启动后时间(单位:cycle),返回系统定时器当前计数值
  • 与osKernelGetSysTimerFreq配合可计算精确时间
  • 可用于高精度时间测量

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
定时器计数值 系统定时器当前计数(低32位) 成功获取系统定时器计数

osKernelGetSysTimerFreq

uint32_t osKernelGetSysTimerFreq(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取每秒的CPU cycle数,返回值单位为Hz
  • 与osKernelGetSysTimerCount配合可计算精确时间
  • 可在中断服务例程(ISR)中调用

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
频率值 系统定时器频率(Hz) 成功获取系统定时器频率

osThreadNew

osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 创建任务,将新线程添加到活跃线程列表中
  • func参数不可为NULL,attr为NULL时使用默认属性

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
func osThreadFunc_t 线程入口函数指针 非NULL
argument void * 传递给线程函数的启动参数 可为NULL
attr const osThreadAttr_t * 线程属性,NULL使用默认值 可为NULL

返回值

返回类型:osThreadId_t

返回值 文字含义 触发场景
线程ID non-NULL 任务创建成功
NULL 创建失败 参数无效或资源不足

osThreadJoin

osStatus_t osThreadJoin(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 等待指定的任务并回收任务资源
  • 目标线程必须具有osThreadJoinable属性

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用
  • 依赖关系:需要开启内核LOSCFG_TASK_JOINABLE配置
  • 内核已启动且调度器正常运行
  • 目标线程创建时需设置osThreadJoinable属性

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 目标线程已终止并回收资源
osErrorParameter 参数无效 thread_id为NULL或无效
osErrorResource 资源错误 目标线程不具备joinable属性

Kconfig配置

配置项 宏类型 说明 默认值
LOSCFG_TASK_JOINABLE 功能宏 需要开启 -

osThreadDetach

osStatus_t osThreadDetach(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 设置任务为detached属性,使线程终止后自动回收资源
  • 一旦设置为detached,该线程不能再被osThreadJoin等待

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用
  • 依赖关系:需要开启内核LOSCFG_TASK_JOINABLE配置
  • 内核已启动且调度器正常运行
  • 目标线程创建时需设置osThreadJoinable属性

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 线程已设置为detached属性
osErrorParameter 参数无效 thread_id为NULL或无效
osErrorResource 资源错误 目标线程不具备joinable属性

Kconfig配置

配置项 宏类型 说明 默认值
LOSCFG_TASK_JOINABLE 功能宏 需要开启 -

osThreadGetName

const char *osThreadGetName(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取任务名,返回指定线程的名称字符串
  • 可在中断服务例程(ISR)中调用
  • 返回名称字符串或NULL(线程无名称或参数无效时)

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取

返回值

返回类型:const char *

返回值 文字含义 触发场景
名称字符串 线程名称 成功获取线程名
NULL 无名称或无效 thread_id无效或线程未设置名称

osThreadGetId

osThreadId_t osThreadGetId(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取任务句柄,返回当前正在运行的线程ID
  • 可在中断服务例程(ISR)中调用
  • 无运行线程或错误时返回NULL

返回值

返回类型:osThreadId_t

返回值 文字含义 触发场景
线程ID 当前线程标识 成功获取当前线程ID
NULL 无运行线程或错误 无运行线程或出错

osThreadGetState

osThreadState_t osThreadGetState(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取任务状态,返回指定线程的当前运行状态
  • 返回线程状态枚举值

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:osThreadState_t

返回值 文字含义 触发场景
osThreadInactive 未激活 线程未激活
osThreadReady 就绪 线程就绪等待调度
osThreadRunning 运行中 线程正在运行
osThreadBlocked 阻塞 线程被阻塞
osThreadTerminated 已终止 线程已终止
osThreadError 错误 线程错误或参数无效

osThreadGetStackSize

uint32_t osThreadGetStackSize(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取任务栈大小(字节)
  • 返回栈大小或0(失败时)

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
栈大小 字节数 成功获取栈大小
0 失败 thread_id无效

osThreadGetStackSpace

uint32_t osThreadGetStackSpace(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取未使用过的任务栈空间(字节),基于水印记录
  • 返回剩余栈空间或0(失败时)

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
剩余栈空间 字节数 成功获取未使用栈空间
0 失败 thread_id无效

osThreadSetPriority

osStatus_t osThreadSetPriority(osThreadId_t thread_id, osPriority_t priority)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 设置任务优先级,修改指定线程的调度优先级
  • 优先级必须在有效范围内

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL
priority osPriority_t 新优先级值 有效优先级范围内

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 优先级设置成功
osErrorParameter 参数无效 thread_id为NULL或priority无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osThreadGetPriority

osPriority_t osThreadGetPriority(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取任务优先级,返回指定线程的当前优先级
  • 返回优先级枚举值或osPriorityError(失败时)

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:osPriority_t

返回值 文字含义 触发场景
优先级值 线程当前优先级 成功获取优先级
osPriorityError 错误 thread_id无效或在ISR中调用

osThreadYield

osStatus_t osThreadYield(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 切换至同优先级的就绪任务,让出CPU给同优先级的其他就绪线程
  • 若无同优先级就绪线程则继续运行当前线程

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 成功让出CPU
osError 未指定的错误 内核未运行时调用

osThreadSuspend

osStatus_t osThreadSuspend(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 挂起任务(恢复前无法得到调度),将指定线程置于挂起状态
  • 被挂起的线程需要通过osThreadResume恢复才能继续调度

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 线程已挂起
osErrorParameter 参数无效 thread_id为NULL或无效
osErrorResource 资源错误 线程状态不允许挂起
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osThreadResume

osStatus_t osThreadResume(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 恢复任务,将挂起的线程恢复为就绪状态
  • 目标线程必须处于挂起状态

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 线程已恢复
osErrorParameter 参数无效 thread_id为NULL或无效
osErrorResource 资源错误 线程未处于挂起状态
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osThreadTerminate

osStatus_t osThreadTerminate(osThreadId_t thread_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 终止任务,建议不要主动终止任务
  • 终止任务可能导致资源未正确释放

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 线程已终止
osErrorParameter 参数无效 thread_id为NULL或无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osThreadGetCount

uint32_t osThreadGetCount(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取已创建的任务数量,返回活跃线程的数量
  • 返回值为当前系统中活跃线程的总数

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
线程数量 活跃线程数 成功获取线程数量
0 无活跃线程或错误 无活跃线程或调用失败

osThreadFlagsSet

uint32_t osThreadFlagsSet(osThreadId_t thread_id, uint32_t flags)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 写入指定事件,为指定线程设置线程标志
  • 可在中断服务例程(ISR)中调用
  • flags参数的每一位代表一个事件标志

入参

名称 参数类型 详细说明 约束取值范围
thread_id osThreadId_t 目标线程ID 由osThreadNew或osThreadGetId获取,非NULL
flags uint32_t 要设置的事件标志位 位掩码,bit0~bit30有效,bit31保留

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
设置后的标志值 操作成功 成功设置线程标志
osFlagsErrorParameter 参数错误 thread_id为NULL或flags最高位为1
osFlagsErrorISR ISR中调用错误 不允许在ISR中调用(特定实现限制)

osThreadFlagsClear

uint32_t osThreadFlagsClear(uint32_t flags)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 清除指定事件,清除当前线程的线程标志
  • flags参数指定要清除的标志位

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
flags uint32_t 要清除的事件标志位 位掩码,bit0~bit30有效,bit31保留

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
清除前的标志值 操作成功 成功清除线程标志
osFlagsErrorParameter 参数错误 flags最高位为1
osFlagsErrorISR ISR中调用错误 在中断服务例程中调用

osThreadFlagsGet

uint32_t osThreadFlagsGet(void)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取当前任务事件,返回当前线程的事件标志值
  • 返回值为当前线程所有标志位的当前状态

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
标志值 当前线程事件标志 成功获取标志
osFlagsErrorISR ISR中调用错误 在中断服务例程中调用

osThreadFlagsWait

uint32_t osThreadFlagsWait(uint32_t flags, uint32_t options, uint32_t timeout)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 等待指定事件,阻塞当前线程直到指定的线程标志被设置
  • options参数指定等待模式(任意标志/全部标志/是否清除)

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
flags uint32_t 等待的事件标志位 位掩码,bit0~bit30有效
options uint32_t 等待选项 osFlagsWaitAny/osFlagsWaitAll可组合osFlagsNoClear
timeout uint32_t 超时时间(tick) 0=不等待,osWaitForever=永久等待

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
满足条件的标志值 操作成功 等待到指定事件
osFlagsErrorTimeout 超时 在指定时间内未等到事件
osFlagsErrorParameter 参数错误 flags为0或options无效
osFlagsErrorISR ISR中调用错误 在中断服务例程中调用

osDelay

osStatus_t osDelay(uint32_t ticks)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 任务延时(单位:tick),将当前线程挂起指定tick数
  • 延时时间从调用时刻开始计算

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
ticks uint32_t 延时的tick数 大于0

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 延时时间到期
osErrorParameter 参数无效 ticks为0
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osDelayUntil

osStatus_t osDelayUntil(uint32_t ticks)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 延时至某一时刻(单位:tick),阻塞当前线程直到指定的绝对tick时刻
  • 与osDelay不同,此函数延时到绝对时刻而非相对时间

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
ticks uint32_t 目标绝对tick时刻 由osKernelGetTickCount获取的值

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 到达指定时刻
osErrorParameter 参数无效 ticks已过期
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osTimerNew

osTimerId_t osTimerNew(osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 创建定时器,初始化并返回定时器ID
  • func参数不可为NULL,type指定定时器类型(单次或周期)

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
func osTimerFunc_t 定时器回调函数指针 非NULL
type osTimerType_t 定时器类型 osTimerOnce或osTimerPeriodic
argument void * 传递给回调函数的参数 可为NULL
attr const osTimerAttr_t * 定时器属性,NULL使用默认值 可为NULL

返回值

返回类型:osTimerId_t

返回值 文字含义 触发场景
定时器ID non-NULL 定时器创建成功
NULL 创建失败 参数无效或资源不足

osTimerGetName

const char *osTimerGetName(osTimerId_t timer_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取定时器名称(目前固定返回NULL)
  • 可在中断服务例程(ISR)中调用
  • 返回定时器名称字符串或NULL

入参

名称 参数类型 详细说明 约束取值范围
timer_id osTimerId_t 定时器ID 由osTimerNew返回,非NULL

返回值

返回类型:const char *

返回值 文字含义 触发场景
NULL 当前实现固定返回NULL 当前不支持定时器名称

osTimerStart

osStatus_t osTimerStart(osTimerId_t timer_id, uint32_t ticks)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 启动定时器(若定时器正在计时会先停止该定时器)
  • ticks参数指定定时器超时时间

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
timer_id osTimerId_t 定时器ID 由osTimerNew返回,非NULL
ticks uint32_t 定时器超时时间(tick) 大于0

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 定时器启动成功
osErrorParameter 参数无效 timer_id为NULL或ticks为0
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osTimerStop

osStatus_t osTimerStop(osTimerId_t timer_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 停止定时器,停止正在运行的定时器
  • 仅对正在运行的定时器有效

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
timer_id osTimerId_t 定时器ID 由osTimerNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 定时器停止成功
osErrorParameter 参数无效 timer_id为NULL或无效
osErrorResource 资源错误 定时器未在运行
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osTimerIsRunning

uint32_t osTimerIsRunning(osTimerId_t timer_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 定时器是否在计时中,检查指定定时器是否正在运行
  • 返回1表示正在运行,0表示未运行

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
timer_id osTimerId_t 定时器ID 由osTimerNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
1 定时器正在运行 定时器处于计时状态
0 定时器未运行 定时器未启动或已停止

osTimerDelete

osStatus_t osTimerDelete(osTimerId_t timer_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 删除定时器,释放定时器占用的资源
  • 删除后定时器ID不可再使用

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
timer_id osTimerId_t 定时器ID 由osTimerNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 定时器删除成功
osErrorParameter 参数无效 timer_id为NULL或无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osEventFlagsNew

osEventFlagsId_t osEventFlagsNew(const osEventFlagsAttr_t *attr)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 创建事件(与任务事件ThreadFlags的差别在于有独立的句柄和控制块)
  • attr为NULL时使用默认属性

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
attr const osEventFlagsAttr_t * 事件标志属性,NULL使用默认值 可为NULL

返回值

返回类型:osEventFlagsId_t

返回值 文字含义 触发场景
事件标志ID non-NULL 事件创建成功
NULL 创建失败 资源不足或参数无效

osEventFlagsGetName

const char *osEventFlagsGetName(osEventFlagsId_t ef_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取事件名称(目前固定返回NULL)
  • 可在中断服务例程(ISR)中调用
  • 返回事件标志名称字符串或NULL

入参

名称 参数类型 详细说明 约束取值范围
ef_id osEventFlagsId_t 事件标志ID 由osEventFlagsNew返回,非NULL

返回值

返回类型:const char *

返回值 文字含义 触发场景
NULL 当前实现固定返回NULL 当前不支持事件标志名称

osEventFlagsSet

uint32_t osEventFlagsSet(osEventFlagsId_t ef_id, uint32_t flags)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 写入指定事件,设置事件标志对象中指定的事件标志位
  • 可在中断服务例程(ISR)中调用
  • flags参数的每一位代表一个事件标志

入参

名称 参数类型 详细说明 约束取值范围
ef_id osEventFlagsId_t 事件标志ID 由osEventFlagsNew返回,非NULL
flags uint32_t 要设置的事件标志位 位掩码,bit0~bit30有效,bit31保留

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
设置后的标志值 操作成功 成功设置事件标志
osFlagsErrorParameter 参数错误 ef_id为NULL或flags最高位为1
osFlagsErrorISR ISR中调用错误 不允许在ISR中调用(特定实现限制)

osEventFlagsClear

uint32_t osEventFlagsClear(osEventFlagsId_t ef_id, uint32_t flags)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 清除指定事件,清除事件标志对象中指定的事件标志位
  • 可在中断服务例程(ISR)中调用
  • flags参数指定要清除的标志位

入参

名称 参数类型 详细说明 约束取值范围
ef_id osEventFlagsId_t 事件标志ID 由osEventFlagsNew返回,非NULL
flags uint32_t 要清除的事件标志位 位掩码,bit0~bit30有效,bit31保留

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
清除前的标志值 操作成功 成功清除事件标志
osFlagsErrorParameter 参数错误 ef_id为NULL或flags最高位为1
osFlagsErrorISR ISR中调用错误 不允许在ISR中调用(特定实现限制)

osEventFlagsGet

uint32_t osEventFlagsGet(osEventFlagsId_t ef_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取当前事件值,返回事件标志对象的当前标志值
  • 可在中断服务例程(ISR)中调用
  • 返回所有标志位的当前状态

入参

名称 参数类型 详细说明 约束取值范围
ef_id osEventFlagsId_t 事件标志ID 由osEventFlagsNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
标志值 当前事件标志值 成功获取标志
osFlagsErrorParameter 参数错误 ef_id为NULL
osFlagsErrorISR ISR中调用错误 不允许在ISR中调用(特定实现限制)

osEventFlagsWait

uint32_t osEventFlagsWait(osEventFlagsId_t ef_id, uint32_t flags, uint32_t options, uint32_t timeout)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 等待指定事件,阻塞当前线程直到指定的事件标志被设置
  • options参数指定等待模式(任意标志/全部标志/是否清除)

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
ef_id osEventFlagsId_t 事件标志ID 由osEventFlagsNew返回,非NULL
flags uint32_t 等待的事件标志位 位掩码,bit0~bit30有效
options uint32_t 等待选项 osFlagsWaitAny/osFlagsWaitAll可组合osFlagsNoClear
timeout uint32_t 超时时间(tick) 0=不等待,osWaitForever=永久等待

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
满足条件的标志值 操作成功 等待到指定事件
osFlagsErrorTimeout 超时 在指定时间内未等到事件
osFlagsErrorParameter 参数错误 flags为0或options无效
osFlagsErrorISR ISR中调用错误 在中断服务例程中调用

osEventFlagsDelete

osStatus_t osEventFlagsDelete(osEventFlagsId_t ef_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 删除事件,释放事件标志对象占用的资源
  • 删除后事件标志ID不可再使用,等待该事件的线程将被唤醒

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
ef_id osEventFlagsId_t 事件标志ID 由osEventFlagsNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 事件标志删除成功
osErrorParameter 参数无效 ef_id为NULL或无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osMutexNew

osMutexId_t osMutexNew(const osMutexAttr_t *attr)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 创建互斥锁,初始化并返回互斥锁ID
  • attr为NULL时使用默认属性

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
attr const osMutexAttr_t * 互斥锁属性,NULL使用默认值 可为NULL

返回值

返回类型:osMutexId_t

返回值 文字含义 触发场景
互斥锁ID non-NULL 互斥锁创建成功
NULL 创建失败 资源不足或参数无效

osMutexGetName

const char *osMutexGetName(osMutexId_t mutex_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取互斥锁名称(目前固定返回NULL)
  • 可在中断服务例程(ISR)中调用
  • 返回互斥锁名称字符串或NULL

入参

名称 参数类型 详细说明 约束取值范围
mutex_id osMutexId_t 互斥锁ID 由osMutexNew返回,非NULL

返回值

返回类型:const char *

返回值 文字含义 触发场景
NULL 当前实现固定返回NULL 当前不支持互斥锁名称

osMutexAcquire

osStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取互斥锁(阻塞等待),若互斥锁被其他线程持有则阻塞等待
  • timeout为0时不等待,osWaitForever表示永久等待

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
mutex_id osMutexId_t 互斥锁ID 由osMutexNew返回,非NULL
timeout uint32_t 超时时间(tick) 0=不等待,osWaitForever=永久等待

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 成功获取互斥锁
osErrorTimeout 超时 在指定时间内未获取到互斥锁
osErrorParameter 参数无效 mutex_id为NULL或无效
osErrorResource 资源错误 mutex_id无效(非超时场景)
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osMutexRelease

osStatus_t osMutexRelease(osMutexId_t mutex_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 释放互斥锁,释放当前线程持有的互斥锁
  • 释放互斥锁的线程必须是该互斥锁的持有者

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
mutex_id osMutexId_t 互斥锁ID 由osMutexNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 互斥锁释放成功
osErrorParameter 参数无效 mutex_id为NULL或无效
osErrorResource 资源错误 当前线程非互斥锁持有者
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osMutexGetOwner

osThreadId_t osMutexGetOwner(osMutexId_t mutex_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取持有该互斥锁的任务句柄
  • 可在中断服务例程(ISR)中调用
  • 返回持有互斥锁的线程ID或NULL(互斥锁未被持有)

入参

名称 参数类型 详细说明 约束取值范围
mutex_id osMutexId_t 互斥锁ID 由osMutexNew返回,非NULL

返回值

返回类型:osThreadId_t

返回值 文字含义 触发场景
线程ID 互斥锁持有者 互斥锁被某线程持有
NULL 无持有者 互斥锁未被任何线程持有或mutex_id无效

osMutexDelete

osStatus_t osMutexDelete(osMutexId_t mutex_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 删除互斥锁,释放互斥锁占用的资源
  • 删除后互斥锁ID不可再使用,等待该互斥锁的线程将被唤醒

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
mutex_id osMutexId_t 互斥锁ID 由osMutexNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 互斥锁删除成功
osErrorParameter 参数无效 mutex_id为NULL或无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osSemaphoreNew

osSemaphoreId_t osSemaphoreNew(uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 创建信号量,初始化并返回信号量ID
  • max_count为1时创建二值信号量,大于1时创建计数信号量

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
max_count uint32_t 信号量最大计数值 大于0
initial_count uint32_t 信号量初始计数值 0~max_count
attr const osSemaphoreAttr_t * 信号量属性,NULL使用默认值 可为NULL

返回值

返回类型:osSemaphoreId_t

返回值 文字含义 触发场景
信号量ID non-NULL 信号量创建成功
NULL 创建失败 参数无效或资源不足

osSemaphoreGetName

const char *osSemaphoreGetName(osSemaphoreId_t semaphore_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取信号量名称(目前固定返回NULL)
  • 可在中断服务例程(ISR)中调用
  • 返回信号量名称字符串或NULL

入参

名称 参数类型 详细说明 约束取值范围
semaphore_id osSemaphoreId_t 信号量ID 由osSemaphoreNew返回,非NULL

返回值

返回类型:const char *

返回值 文字含义 触发场景
NULL 当前实现固定返回NULL 当前不支持信号量名称

osSemaphoreAcquire

osStatus_t osSemaphoreAcquire(osSemaphoreId_t semaphore_id, uint32_t timeout)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取信号量(阻塞等待),若信号量计数为0则阻塞等待
  • timeout为0时不等待,osWaitForever表示永久等待

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
semaphore_id osSemaphoreId_t 信号量ID 由osSemaphoreNew返回,非NULL
timeout uint32_t 超时时间(tick) 0=不等待,osWaitForever=永久等待

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 成功获取信号量
osErrorTimeout 超时 在指定时间内未获取到信号量
osErrorParameter 参数无效 semaphore_id为NULL或无效
osErrorResource 资源错误 semaphore_id无效(非超时场景)
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osSemaphoreRelease

osStatus_t osSemaphoreRelease(osSemaphoreId_t semaphore_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 释放信号量,将信号量计数加1
  • 可在中断服务例程(ISR)中调用
  • 释放后若有等待该信号量的线程将被唤醒

入参

名称 参数类型 详细说明 约束取值范围
semaphore_id osSemaphoreId_t 信号量ID 由osSemaphoreNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 信号量释放成功
osErrorParameter 参数无效 semaphore_id为NULL或无效
osErrorResource 资源错误 信号量计数已达最大值

osSemaphoreGetCount

uint32_t osSemaphoreGetCount(osSemaphoreId_t semaphore_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取信号量的计数值,返回当前信号量的可用令牌数
  • 可在中断服务例程(ISR)中调用
  • 返回值为当前信号量中可用的令牌数量

入参

名称 参数类型 详细说明 约束取值范围
semaphore_id osSemaphoreId_t 信号量ID 由osSemaphoreNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
计数值 当前可用令牌数 成功获取计数值
0 无可用令牌或错误 信号量计数为0或semaphore_id无效

osSemaphoreDelete

osStatus_t osSemaphoreDelete(osSemaphoreId_t semaphore_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 删除信号量,释放信号量占用的资源
  • 删除后信号量ID不可再使用,等待该信号量的线程将被唤醒

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
semaphore_id osSemaphoreId_t 信号量ID 由osSemaphoreNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 信号量删除成功
osErrorParameter 参数无效 semaphore_id为NULL或无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osMessageQueueNew

osMessageQueueId_t osMessageQueueNew(uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 创建消息队列,初始化并返回消息队列ID
  • msg_count指定消息队列最大消息数,msg_size指定每条消息的大小

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
msg_count uint32_t 消息队列最大消息数 大于0
msg_size uint32_t 每条消息的大小(字节) 大于0
attr const osMessageQueueAttr_t * 消息队列属性,NULL使用默认值 可为NULL

返回值

返回类型:osMessageQueueId_t

返回值 文字含义 触发场景
消息队列ID non-NULL 消息队列创建成功
NULL 创建失败 参数无效或资源不足

osMessageQueueGetName

const char *osMessageQueueGetName(osMessageQueueId_t mq_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取消息队列名称(目前固定返回NULL)
  • 可在中断服务例程(ISR)中调用
  • 返回消息队列名称字符串或NULL

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL

返回值

返回类型:const char *

返回值 文字含义 触发场景
NULL 当前实现固定返回NULL 当前不支持消息队列名称

osMessageQueuePut

osStatus_t osMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 往消息队列里放入消息
  • msg_prio参数为消息优先级,当前实现未使用优先级

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用(timeout=0时可在ISR中调用)

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL
msg_ptr const void * 指向要发送的消息缓冲区 非NULL
msg_prio uint8_t 消息优先级 0=默认优先级
timeout uint32_t 超时时间(tick) 0=不等待,osWaitForever=永久等待

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 消息放入成功
osErrorTimeout 超时 在指定时间内消息队列已满
osErrorParameter 参数无效 mq_id或msg_ptr为NULL
osErrorResource 资源错误 消息队列已满(非超时场景)
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osMessageQueueGet

osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 从消息队列里获取消息
  • 获取的消息将存入msg_ptr指向的缓冲区

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用(timeout=0时可在ISR中调用)

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL
msg_ptr void * 指向用于接收消息的缓冲区 非NULL
msg_prio uint8_t * 指向用于接收消息优先级的缓冲区 可为NULL
timeout uint32_t 超时时间(tick) 0=不等待,osWaitForever=永久等待

出参

名称 数据类型 输出说明
msg_ptr void * 接收到的消息内容
msg_prio uint8_t * 接收到的消息优先级

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 消息获取成功
osErrorTimeout 超时 在指定时间内消息队列为空
osErrorParameter 参数无效 mq_id或msg_ptr为NULL
osErrorResource 资源错误 消息队列为空(非超时场景)
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

osMessageQueueGetCapacity

uint32_t osMessageQueueGetCapacity(osMessageQueueId_t mq_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取消息队列节点数量,即消息队列的最大消息数
  • 可在中断服务例程(ISR)中调用
  • 返回消息队列的最大容量或0(失败时)

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
容量值 消息队列最大消息数 成功获取容量
0 失败 mq_id无效

osMessageQueueGetMsgSize

uint32_t osMessageQueueGetMsgSize(osMessageQueueId_t mq_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取消息队列节点大小,即每条消息的字节大小
  • 可在中断服务例程(ISR)中调用
  • 返回每条消息的大小或0(失败时)

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
消息大小 每条消息的字节数 成功获取消息大小
0 失败 mq_id无效

osMessageQueueGetCount

uint32_t osMessageQueueGetCount(osMessageQueueId_t mq_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取当前消息队列里的消息数量
  • 可在中断服务例程(ISR)中调用
  • 返回当前队列中的消息数或0(失败时)

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
消息数量 当前队列中的消息数 成功获取消息数量
0 失败 mq_id无效

osMessageQueueGetSpace

uint32_t osMessageQueueGetSpace(osMessageQueueId_t mq_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 获取当前消息队列里的剩余消息数量
  • 可在中断服务例程(ISR)中调用
  • 返回队列中剩余可用的消息槽位数或0(失败时)

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL

返回值

返回类型:uint32_t

返回值 文字含义 触发场景
剩余槽位 剩余可用的消息槽位数 成功获取剩余空间
0 失败 mq_id无效

osMessageQueueDelete

osStatus_t osMessageQueueDelete(osMessageQueueId_t mq_id)

头文件清单

#include "open_source/CMSIS_6/CMSIS/RTOS2/Include/cmsis_os2.h"

功能说明

  • 删除消息队列,释放消息队列占用的资源
  • 删除后消息队列ID不可再使用,等待该队列的线程将被唤醒

前置条件

  • 调用上下文约束:不可在中断服务例程(ISR)中调用

入参

名称 参数类型 详细说明 约束取值范围
mq_id osMessageQueueId_t 消息队列ID 由osMessageQueueNew返回,非NULL

返回值

返回类型:osStatus_t

返回值 文字含义 触发场景
osOK 操作成功 消息队列删除成功
osErrorParameter 参数无效 mq_id为NULL或无效
osErrorResource 资源错误 内部操作失败
osErrorISR 不允许在ISR中调用 在中断服务例程中调用

Type definitions

osThreadFunc_t

typedef void (*osThreadFunc_t)(void *argument);

使用说明

线程入口函数类型,指向以void*为参数、无返回值的函数指针

osTimerFunc_t

typedef void (*osTimerFunc_t)(void *argument);

使用说明

定时器回调函数类型,指向以void*为参数、无返回值的函数指针

osThreadId_t

typedef void *osThreadId_t;

使用说明

线程ID类型,用于标识和操作线程

osTimerId_t

typedef void *osTimerId_t;

使用说明

定时器ID类型,用于标识和操作定时器

osEventFlagsId_t

typedef void *osEventFlagsId_t;

使用说明

事件标志ID类型,用于标识和操作事件标志对象

osMutexId_t

typedef void *osMutexId_t;

使用说明

互斥锁ID类型,用于标识和操作互斥锁

osSemaphoreId_t

typedef void *osSemaphoreId_t;

使用说明

信号量ID类型,用于标识和操作信号量

osMessageQueueId_t

typedef void *osMessageQueueId_t;

使用说明

消息队列ID类型,用于标识和操作消息队列

TZ_ModuleId_t

typedef uint32_t TZ_ModuleId_t;

使用说明

TrustZone模块ID类型,用于线程的TrustZone安全域标识

Enumerations

osKernelState_t

typedef enum {
  osKernelInactive        =  0,
  osKernelReady           =  1,
  osKernelRunning         =  2,
  osKernelLocked          =  3,
  osKernelSuspended       =  4,
  osKernelError           = -1,
  osKernelReserved        = 0x7FFFFFFF
} osKernelState_t;
枚举成员 取值 描述
osKernelInactive 0 内核未激活
osKernelReady 1 内核就绪
osKernelRunning 2 内核运行中
osKernelLocked 3 内核已锁定
osKernelSuspended 4 内核已挂起
osKernelError -1 (0x80000001) 内核错误
osKernelReserved 0x7FFFFFFF 保留

osThreadState_t

typedef enum {
  osThreadInactive        =  0,
  osThreadReady           =  1,
  osThreadRunning         =  2,
  osThreadBlocked         =  3,
  osThreadTerminated      =  4,
  osThreadError           = -1,
  osThreadReserved        = 0x7FFFFFFF
} osThreadState_t;
枚举成员 取值 描述
osThreadInactive 0 线程未激活
osThreadReady 1 线程就绪
osThreadRunning 2 线程运行中
osThreadBlocked 3 线程阻塞
osThreadTerminated 4 线程已终止
osThreadError -1 (0x80000001) 线程错误
osThreadReserved 0x7FFFFFFF 保留

osPriority_t

typedef enum {
  osPriorityNone          =  0,
  osPriorityIdle          =  1,
  osPriorityLow           =  8,
  osPriorityLow1          =  8+1,
  osPriorityLow2          =  8+2,
  osPriorityLow3          =  8+3,
  osPriorityLow4          =  8+4,
  osPriorityLow5          =  8+5,
  osPriorityLow6          =  8+6,
  osPriorityLow7          =  8+7,
  osPriorityBelowNormal   = 16,
  osPriorityBelowNormal1  = 16+1,
  osPriorityBelowNormal2  = 16+2,
  osPriorityBelowNormal3  = 16+3,
  osPriorityBelowNormal4  = 16+4,
  osPriorityBelowNormal5  = 16+5,
  osPriorityBelowNormal6  = 16+6,
  osPriorityBelowNormal7  = 16+7,
  osPriorityNormal        = 24,
  osPriorityNormal1       = 24+1,
  osPriorityNormal2       = 24+2,
  osPriorityNormal3       = 24+3,
  osPriorityNormal4       = 24+4,
  osPriorityNormal5       = 24+5,
  osPriorityNormal6       = 24+6,
  osPriorityNormal7       = 24+7,
  osPriorityAboveNormal   = 32,
  osPriorityAboveNormal1  = 32+1,
  osPriorityAboveNormal2  = 32+2,
  osPriorityAboveNormal3  = 32+3,
  osPriorityAboveNormal4  = 32+4,
  osPriorityAboveNormal5  = 32+5,
  osPriorityAboveNormal6  = 32+6,
  osPriorityAboveNormal7  = 32+7,
  osPriorityHigh          = 40,
  osPriorityHigh1         = 40+1,
  osPriorityHigh2         = 40+2,
  osPriorityHigh3         = 40+3,
  osPriorityHigh4         = 40+4,
  osPriorityHigh5         = 40+5,
  osPriorityHigh6         = 40+6,
  osPriorityHigh7         = 40+7,
  osPriorityRealtime      = 48,
  osPriorityRealtime1     = 48+1,
  osPriorityRealtime2     = 48+2,
  osPriorityRealtime3     = 48+3,
  osPriorityRealtime4     = 48+4,
  osPriorityRealtime5     = 48+5,
  osPriorityRealtime6     = 48+6,
  osPriorityRealtime7     = 48+7,
  osPriorityISR           = 56,
  osPriorityError         = -1,
  osPriorityReserved      = 0x7FFFFFFF
} osPriority_t;
枚举成员 取值 描述
osPriorityNone 0 无优先级
osPriorityIdle 1 空闲优先级
osPriorityLow 8 低优先级
osPriorityLow1 9 低优先级+1
osPriorityLow2 10 低优先级+2
osPriorityLow3 11 低优先级+3
osPriorityLow4 12 低优先级+4
osPriorityLow5 13 低优先级+5
osPriorityLow6 14 低优先级+6
osPriorityLow7 15 低优先级+7
osPriorityBelowNormal 16 低于正常优先级
osPriorityBelowNormal1 17 低于正常优先级+1
osPriorityBelowNormal2 18 低于正常优先级+2
osPriorityBelowNormal3 19 低于正常优先级+3
osPriorityBelowNormal4 20 低于正常优先级+4
osPriorityBelowNormal5 21 低于正常优先级+5
osPriorityBelowNormal6 22 低于正常优先级+6
osPriorityBelowNormal7 23 低于正常优先级+7
osPriorityNormal 24 正常优先级
osPriorityNormal1 25 正常优先级+1
osPriorityNormal2 26 正常优先级+2
osPriorityNormal3 27 正常优先级+3
osPriorityNormal4 28 正常优先级+4
osPriorityNormal5 29 正常优先级+5
osPriorityNormal6 30 正常优先级+6
osPriorityNormal7 31 正常优先级+7
osPriorityAboveNormal 32 高于正常优先级
osPriorityAboveNormal1 33 高于正常优先级+1
osPriorityAboveNormal2 34 高于正常优先级+2
osPriorityAboveNormal3 35 高于正常优先级+3
osPriorityAboveNormal4 36 高于正常优先级+4
osPriorityAboveNormal5 37 高于正常优先级+5
osPriorityAboveNormal6 38 高于正常优先级+6
osPriorityAboveNormal7 39 高于正常优先级+7
osPriorityHigh 40 高优先级
osPriorityHigh1 41 高优先级+1
osPriorityHigh2 42 高优先级+2
osPriorityHigh3 43 高优先级+3
osPriorityHigh4 44 高优先级+4
osPriorityHigh5 45 高优先级+5
osPriorityHigh6 46 高优先级+6
osPriorityHigh7 47 高优先级+7
osPriorityRealtime 48 实时优先级
osPriorityRealtime1 49 实时优先级+1
osPriorityRealtime2 50 实时优先级+2
osPriorityRealtime3 51 实时优先级+3
osPriorityRealtime4 52 实时优先级+4
osPriorityRealtime5 53 实时优先级+5
osPriorityRealtime6 54 实时优先级+6
osPriorityRealtime7 55 实时优先级+7
osPriorityISR 56 ISR优先级
osPriorityError -1 (0x80000001) 优先级错误
osPriorityReserved 0x7FFFFFFF 保留

osTimerType_t

typedef enum {
  osTimerOnce             = 0,
  osTimerPeriodic         = 1
} osTimerType_t;
枚举成员 取值 描述
osTimerOnce 0 单次定时器
osTimerPeriodic 1 周期定时器

osStatus_t

typedef enum {
  osOK                    =  0,
  osError                 = -1,
  osErrorTimeout          = -2,
  osErrorResource         = -3,
  osErrorParameter        = -4,
  osErrorNoMemory         = -5,
  osErrorISR              = -6,
  osErrorSafetyClass      = -7,
  osStatusReserved        = 0x7FFFFFFF
} osStatus_t;
枚举成员 取值 描述
osOK 0 操作成功
osError -1 未指定的错误
osErrorTimeout -2 超时错误
osErrorResource -3 资源错误
osErrorParameter -4 参数错误
osErrorNoMemory -5 内存不足错误
osErrorISR -6 ISR调用错误
osErrorSafetyClass -7 安全类错误
osStatusReserved 0x7FFFFFFF 保留

Structures

osVersion_t

typedef struct {
  uint32_t                       api;
  uint32_t                    kernel;
} osVersion_t;

成员说明

成员名称 数据类型 描述
api uint32_t API版本号
kernel uint32_t 内核版本号

osThreadAttr_t

typedef struct {
  const char                   *name;
  uint32_t                 attr_bits;
  void                      *cb_mem;
  uint32_t                   cb_size;
  void                   *stack_mem;
  uint32_t                stack_size;
  osPriority_t              priority;
  TZ_ModuleId_t            tz_module;
  uint32_t             affinity_mask;
} osThreadAttr_t;

成员说明

成员名称 数据类型 描述
name const char * 线程名称
attr_bits uint32_t 线程属性位
cb_mem void * 控制块内存地址
cb_size uint32_t 控制块内存大小
stack_mem void * 栈内存地址
stack_size uint32_t 栈大小
priority osPriority_t 线程优先级
tz_module TZ_ModuleId_t TrustZone模块ID
affinity_mask uint32_t 处理器亲和性掩码

osTimerAttr_t

typedef struct {
  const char                   *name;
  uint32_t                 attr_bits;
  void                      *cb_mem;
  uint32_t                   cb_size;
} osTimerAttr_t;

成员说明

成员名称 数据类型 描述
name const char * 定时器名称
attr_bits uint32_t 定时器属性位
cb_mem void * 控制块内存地址
cb_size uint32_t 控制块内存大小

osEventFlagsAttr_t

typedef struct {
  const char                   *name;
  uint32_t                 attr_bits;
  void                      *cb_mem;
  uint32_t                   cb_size;
} osEventFlagsAttr_t;

成员说明

成员名称 数据类型 描述
name const char * 事件标志名称
attr_bits uint32_t 事件标志属性位
cb_mem void * 控制块内存地址
cb_size uint32_t 控制块内存大小

osMutexAttr_t

typedef struct {
  const char                   *name;
  uint32_t                 attr_bits;
  void                      *cb_mem;
  uint32_t                   cb_size;
} osMutexAttr_t;

成员说明

成员名称 数据类型 描述
name const char * 互斥锁名称
attr_bits uint32_t 互斥锁属性位
cb_mem void * 控制块内存地址
cb_size uint32_t 控制块内存大小

osSemaphoreAttr_t

typedef struct {
  const char                   *name;
  uint32_t                 attr_bits;
  void                      *cb_mem;
  uint32_t                   cb_size;
} osSemaphoreAttr_t;

成员说明

成员名称 数据类型 描述
name const char * 信号量名称
attr_bits uint32_t 信号量属性位
cb_mem void * 控制块内存地址
cb_size uint32_t 控制块内存大小

osMessageQueueAttr_t

typedef struct {
  const char                   *name;
  uint32_t                 attr_bits;
  void                      *cb_mem;
  uint32_t                   cb_size;
  void                      *mq_mem;
  uint32_t                   mq_size;
} osMessageQueueAttr_t;

成员说明

成员名称 数据类型 描述
name const char * 消息队列名称
attr_bits uint32_t 消息队列属性位
cb_mem void * 控制块内存地址
cb_size uint32_t 控制块内存大小
mq_mem void * 消息队列数据区内存地址
mq_size uint32_t 消息队列数据区内存大小

Macros

osWaitForever

#define osWaitForever           0xFFFFFFFFU

osFlagsWaitAny

#define osFlagsWaitAny          0x00000000U

osFlagsWaitAll

#define osFlagsWaitAll          0x00000001U

osFlagsNoClear

#define osFlagsNoClear          0x00000002U

osFlagsError

#define osFlagsError            0x80000000U

osFlagsErrorUnknown

#define osFlagsErrorUnknown     0xFFFFFFFFU

osFlagsErrorTimeout

#define osFlagsErrorTimeout     0xFFFFFFFEU

osFlagsErrorResource

#define osFlagsErrorResource    0xFFFFFFFDU

osFlagsErrorParameter

#define osFlagsErrorParameter   0xFFFFFFFCU

osFlagsErrorISR

#define osFlagsErrorISR         0xFFFFFFFAU

osFlagsErrorSafetyClass

#define osFlagsErrorSafetyClass 0xFFFFFFF9U

osThreadDetached

#define osThreadDetached        0x00000000U

osThreadJoinable

#define osThreadJoinable        0x00000001U

osMutexRecursive

#define osMutexRecursive        0x00000001U

osMutexPrioInherit

#define osMutexPrioInherit      0x00000002U

osMutexRobust

#define osMutexRobust           0x00000008U