发表自话题:HarmonyOS 2
HarmonyOS CMSIS-RTOS2接口简介
目录
作者介绍CMSIS-RTOS2接口简介鸿蒙与CMSIS-RTOS2接口联系如何使用CMSIS-RTOS2接口往期回顾作者介绍
刘懿宵,男,西安工程大学电子信息学院,2017级本科生。
专业:通信工程
电子邮件:liuyixiao@stu.xpu.edu.cn
CMSIS-RTOS2接口简介
什么是CMSIS-RTOS2接口
CMSIS是Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半导体厂家共同遵循的一套标准,是由ARM专门针对Cortex-M系列提出的标准。在该标准的约定下,ARM和芯片厂商会提供一些通用的API接口来访问Cortex内核以及一些专用外设,以减少更换芯片以及开发工具等移植工作所带来的金钱以及时间上的消耗。
CMSIS-RTOS2(CMSIS-RTOS API Version 2)是Arm® Cortex®-M 处理器的通用的RTOS接口。为需要RTOS功能的软件组件提供了标准化的API。
CMSIS-RTOS2是一个通用的API,它与底层的RTOS内核无关,写应用序的程序员在用户代码中调用CMSISRTOS2 API函数,可以更方便地将应用程序从一个RTOS到另一个RTOS,使用CMSIS-RTOS2 API的中间件也可以避免很多不必要的移植工作。
鸿蒙与CMSIS-RTOS2接口联系
鸿蒙在CMSIS-RTOS2接口中封装了LiteOS-m的内核代码
CMSIS-RTOS2实现://kernel/liteos_m/kal/cmsis/cmsis_liteos2.c
调用了LOS_KernelInit
osThreadId_t osThreadNew(osThreadFunc_t func, void *argument, const osThreadAttr_t *attr) { UINT32 uwTid; UINT32 uwRet; LosTaskCB *pstTaskCB = NULL; TSK_INIT_PARAM_S stTskInitParam; if (OS_INT_ACTIVE) { return NULL; } if ((attr == NULL) || (func == NULL) || (attr->priority < osPriorityLow1) || (attr->priority > osPriorityAboveNormal6)) { return (osThreadId_t)NULL; } (void)memset_s(&stTskInitParam, sizeof(TSK_INIT_PARAM_S), 0, sizeof(TSK_INIT_PARAM_S)); stTskInitParam.pfnTaskEntry = (TSK_ENTRY_FUNC)func; #ifndef LITEOS_WIFI_IOT_VERSION stTskInitParam.uwArg = (UINT32)argument; #else stTskInitParam.auwArgs[0] = (UINT32)argument; #endif stTskInitParam.uwStackSize = attr->stack_size; stTskInitParam.pcName = (CHAR *)attr->name; stTskInitParam.usTaskPrio = OS_TASK_PRIORITY_LOWEST - ((UINT16)(attr->priority) - LOS_PRIORITY_WIN); /* 0~31 */ uwRet = LOS_TaskCreate(&uwTid, &stTskInitParam); if (LOS_OK != uwRet) { return (osThreadId_t)NULL; } pstTaskCB = OS_TCB_FROM_TID(uwTid); return (osThreadId_t)pstTaskCB; }新建
osStatus_t osDelay(uint32_t ticks) { UINT32 uwRet = 0; if (ticks == 0) { return osOK; } if (osKernelGetState() != osKernelRunning) { uwRet = LOS_HalDelay(ticks); } else { uwRet = LOS_TaskDelay(ticks); } if (uwRet == LOS_OK) { return osOK; } else { return osError; } }延迟
如何使用CMSIS-RTOS2接口
1、在业务代码中包含“cmsis_os2.h”
2、通过调用“cmsis_os2.h”中的API函数使用系统相关功能
更多API介绍请参考:https://arm-software.github.io/CMSIS_5/RTOS2/html/index.html
主要看这部分
往期回顾
2021物联网开发学习自学历程记录汇总