CMSIS-RTOS2之freeRTOS的封装解析---第1章
cmsis os2封装下的freeRTOS教程
开门见山,直接上干货,我们这里讲的是CMSIS-RTOS2 即CMSIS V2,也是stm32cubemx可以直接生成的操作系统封装;由于stm32cubemx使用cmsis封装的freertos所以我接下来,就结合被封装的freertos来讲解cmsis-rtos 2的用法。
cmsis_os.h文件里有一个枚举定义
typedef enum {
osKernelInactive = 0, ///< Inactive.不活跃的
osKernelReady = 1, ///< Ready.准备好的
osKernelRunning = 2, ///< Running.正在运行
osKernelLocked = 3, ///< Locked.调度器上锁
osKernelSuspended = 4, ///< Suspended.挂起
osKernelError = -1, ///< Error.错误
osKernelReserved = 0x7FFFFFFFU ///< Prevents enum down-size compiler optimization.预留
} osKernelState_t;
这是cmsis用来表示系统状态的,和以下几个封装函数有关。
首先cmsis有个操作系统初始化函数osKernelInitialize,操作系统状态上电默认是Inactive.不活跃的,在这里没有啥复杂操作,就是把状态改为Ready.准备好的。所以这个函数一般放在最开始,表示初始化操作系统了,其实和freertos没啥关系,放在前面即可。
然后cmsis有个使能操作系统的函数osKernelStart,它是用来封装freertos的vTaskStartScheduler开调度的函数的,在这个函数里除了封装一下vTaskStartScheduler之外,又把操作系统状态设置为osKernelRunning,成功返回osOK
如果同学们用stcubemx,那么就会看见在main函数里有以下三句
osKernelInitialize(); //操作系统初始化
MX_FREERTOS_Init();//用来定义其他任务和信号量、队列等
osKernelStart();//使能操作系统即开调度
再看下面2个cmsis函数
osKernelLock 调度器上锁
osKernelUnlock 调度器恢复
分别封装的是freeRTOS的vTaskSuspendAll和xTaskResumeAll,函数里面对挂起或者恢复的嵌套逻辑做了些判断
更多推荐


所有评论(0)