CMSIS-RTOS2简介

本文介绍CMSIS-RTOS2。

1.引入

CMSIS-RTOS2在基于Arm Cortex处理器的设备上运行的实时操作系统内核上指定了通用RTOS接口。应用程序和中间件组件可以使用CMSIS-RTOS2 API在各种软件生态系统中实现更好的代码重用和更简单的集成。

CMSIS-RTOS2还指定了RTOS内核使用的标准OS Tick接口。它提供了几个操作系统tick实现,用于将简单的内核移植到不同的Cortex-M和Cortex-A处理器。

CMSIS-RTOS2在软件层次中的位置如下图(浅蓝色部分)。

目前支持的主流RTOS Kernel:

1)RTX(Keil)

2)FreeRTOS

3)Zephyr RTOS

4)Micrium OS

2.主要接口

关于CMSIS-RTOS2的接口(API)可参考网址:CMSIS-RTOS2: API Reference

下面简要介绍CMSIS-RTOS2中常用的接口(API),按如下类别进行划分。

1)线程管理

通常将一个复杂的任务划分为若干个独立的线程,每个独立的线程完成一定的功能。

创建:

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

切换:

用于同等优先级任务切换。

osStatus_t osThreadYield	(	void 		)	

挂起:

osStatus_t osThreadSuspend	(	osThreadId_t 	thread_id	)	

恢复:

osStatus_t osThreadResume	(	osThreadId_t 	thread_id	)	

终止:

osStatus_t osThreadTerminate	(	osThreadId_t 	thread_id	)	

2)线程间同步

a)信号量

用于多个任务协作,或访问某一临界资源时。

创建:

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

获取:

osStatus_t osSemaphoreAcquire	(	osSemaphoreId_t 	semaphore_id,
uint32_t 	timeout 
)	

释放:

osStatus_t osSemaphoreRelease	(	osSemaphoreId_t 	semaphore_id	)	

b)互斥量

互斥量相当于单值型信号量,用于临界资源的互斥访问,区别于单值型信号量,其在优先级反转方面有特殊的处理。

创建:

osMutexId_t osMutexNew	(	const osMutexAttr_t * 	attr	)	

请求:

osStatus_t osMutexAcquire	(	osMutexId_t 	mutex_id,
uint32_t 	timeout 
)	

释放:

osStatus_t osMutexRelease	(	osMutexId_t 	mutex_id	)

c)事件集

事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。即多个事件可以实现“或”或“与”的运算。

创建:

osEventFlagsId_t osEventFlagsNew	(	const osEventFlagsAttr_t * 	attr	)	

设置:

uint32_t osEventFlagsSet	(	osEventFlagsId_t 	ef_id,
uint32_t 	flags 
)		

其中,flags为某一位或几位,如:((1 << 2) | (1 << 3)),表示将第2位和第3位置位。

清除:

uint32_t osEventFlagsClear	(	osEventFlagsId_t 	ef_id,
uint32_t 	flags 
)	

等待:

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

等待的信号被置位后,默认会被自动清零,若想手动清零,可设置“options”参数。

3)线程间通信

线程间通信这里仅有消息队列。

创建:

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

发送:

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

接收:

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

4)时钟管理

休眠:

让出处理器资源,进入就绪状态,同时进行一次调度,选出当前优先级最高的任务执行。

osStatus_t osDelay	(	uint32_t 	ticks	)	

等绝对时间:

osStatus_t osDelayUntil	(	uint32_t 	ticks	)	

获取系统Tick:

uint32_t osThreadGetCount	(	void 		)	

返回为32位数,注意溢出问题。

5)中断管理

涉及中断任务之间的临界资源的访问(注意和互斥量之间的区别)。

若使用FreeRTOS,可用如下宏:

taskENTER_CRITICAL()
taskEXIT_CRITICAL() 

总结,本文介绍了CMSIS-RTOS2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows上安装redis,并且用pycharm联通调用测试

在 Windows 上启动 Redis&#xff0c;官网版本不支持windows直接安装&#xff0c;你可以按照以下步骤进行操作&#xff1a; 使用Github Redis 版本启动 Redis 如果你想使用 Redis 在 Windows 上启动 Redis&#xff0c;以下是基本的步骤&#xff1a; 下载 Redis&#xff1a; 访…

自定义starter并发布maven私服

一、搭建nexus私服 nexus就是maven的私有服务器&#xff0c;这个搭建教程可以在网络上找到很多&#xff0c;这里就不赘述了。搭建完成之后再进行下一步 二、本地maven的setting配置文件中配置nexus的用户名和密码 <servers><server><id>nexus-releases<…

索引在手,查询无忧:MySQL索引简介

在数据库的世界里&#xff0c;MySQL作为一款广泛使用的关系型数据库管理系统。在DB-Engines的2024年5月的数据库管理系统流行度排名中得分1084&#xff0c;仅次于老大哥Oracle&#xff0c;足以MySQL在全球数据库市场中占有重要地位&#xff0c;当然MySQL在2009年被Oracle公司收…

解决使用Jmeter进行测试时出现“302“,‘‘401“等用户未登录的问题

使用 JMeter 压力测试时解决登录问题的两种方法 在使用 JMeter 进行压力测试时&#xff0c;可能会遇程序存在安全验证&#xff0c;必须登录后才能对里面的具体方法进行测试&#xff1a; 如果遇到登录问题&#xff0c;通常是因为 JMeter 无法模拟用户的登录状态&#xff0c;导…

表单中的常用元素

10.图像形式上传文件 <input type“image”>定义图像形式的提交。 src 属性和alt属性必须与<input type“image””>结合使用。 input type"image"src"img/l.jpg"alt"submit"/> 11.下拉列表框 <select>标签定义下拉列表框…

数据库管理-第205期 换个角度看23ai(20240617)

数据库管理205期 2024-06-17 数据库管理-第205期 换个角度看23ai&#xff08;20240617&#xff09;1 规范应用开发2 融合总结 数据库管理-第205期 换个角度看23ai&#xff08;20240617&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle ACE Pro…

大量用户中招,远控木马已经潜伏各类在线会议平台

从 2023 年 12 月开始&#xff0c;研究人员发现有攻击者创建虚假 Skype、Google Meet 和 Zoom 网站来进行恶意软件传播。攻击者为安卓用户投递 SpyNote 远控木马&#xff0c;为 Windows 用户投递 NjRAT 和 DCRAT 远控木马。 攻击行动概述 攻击者在单个 IP 地址上部署了所有的虚…

小白入手实现AI客服机器人demo

一、环境准备 1 安装python 2 安装vscode 3 安装相关python库 pip install flask flask_cors openai 4.在vscode里安装TONGYI Lingma(AI编程助手&#xff09; 二、后端搭建 创建一个后端文件夹chatbot&#xff0c;再新建一个app.py的python文件 from flask import Flask, requ…

electron下载失败(electron如何切换镜像源)

打开&#xff1a; 或者&#xff1a; C:\Users\用户名\.npmrc 添加&#xff1a; electron_mirrorhttps://npmmirror.com/mirrors/electron/ 到文件中&#xff0c;保存 方法二&#xff1a; npm config set ELECTRON_MIRROR https://npmmirror.com/mirrors/electron/ ELECTR…

AIOps在业务运维的最佳应用实践

随着企业IT基础架构的复杂性日益增加&#xff0c;传统运维模式难以满足高效、稳定的业务需求。AIOps&#xff08;人工智能运维&#xff09;作为一种新兴技术&#xff0c;通过数据驱动的自动化和智能化手段&#xff0c;有效提升了IT运维的效率和可靠性。本文将探讨AIOps在业务运…

FPGA的基础仿真项目--七段数码管设计显示学号

一、设计实验目的 1&#xff0e; 了解数码管显示模块的工作原理。 2&#xff0e; 熟悉VHDL 硬件描述语言及自顶向下的设计思想。 3&#xff0e; 掌握利用FPGA设计6位数码管扫描显示驱动电路的方法。 二、实验设备 1. PC机 2.Cyclone IV FPGA开发板 三、扫描原理 下图所…

PHP邮箱服务器搭建与配置教程?如何使用?

PHP邮箱服务器搭建的步骤&#xff1f;服务器搭建的注意事项&#xff1f; 在当今的数字化时代&#xff0c;电子邮件仍然是沟通和业务处理的重要工具之一。通过PHP搭建和配置一个邮箱服务器&#xff0c;您可以实现自主掌控邮件系统&#xff0c;确保数据的安全性和隐私性。AokSen…

VMWARE安装Centos8,并且使用ssh连接虚拟机

VMWARE安装Centos8,并且使用ssh连接虚拟机 安装VMWARE安装Centos 8SSH连接 安装VMWARE 参考这篇文章: https://blog.csdn.net/weixin_74195551/article/details/127288338 安装Centos 8 首先在aliyun镜像仓库下载: https://mirrors.aliyun.com/centos/8/isos/x86_64/ 我下载…

如何拥有自己的微信小程序

如何拥有自己的微信小程序 ~~话先放在这里~~ 写在前面申请一个属于自己的小程序先去[微信开放平台](https://open.weixin.qq.com/home)申请一个你的小程序扫码申请新小程序小程序该记好的个人信息 安装微信开发者工具下载工具关联你的小程序请求域名配置发布小程序 BUY一个自己…

高考之后,专业与学校如何选择?

随着2024年高考的结束&#xff0c;考生们面临着选择专业或学校的难题。选择专业意味着专注于一个特定领域&#xff0c;直接影响未来的职业发展和兴趣培养&#xff1b;而选择学校则提供了更优越的学术氛围和广泛的社交机会&#xff0c;对个人综合素质提升有重要作用。无论选择哪…

基于YOLOv8m的船舶检测(附数据集和Coovally操作步骤)

本文主要内容:详细介绍了船舶检测整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 船舶检测和识别是一项重要的任务&#xff0c;它涉及到航运安全、港口管理、海洋保护等方面&#xff0c…

使用 cx_Oracle 在 Oracle 中等待记录并执行操作

问题背景&#xff1a; 在第一个 Python 项目中&#xff0c;需要等待记录被插入 Oracle 表中&#xff0c;一旦记录存在&#xff0c;就调用 Python 函数。目前使用 cx_Oracle 库&#xff0c;采用一种无限循环的方式来查询表。如果记录存在&#xff0c;就调用函数&#xff0c;然后…

在ubuntu16中下载VMware Tools工具

一、打开植入 二、开始安装 打开驱动放置的默认位置 在这里打开终端&#xff1b;添加到/home/你的用户名/Downloand/中 进入后解压 然后进去解压后的文件 终端输入 sudo ./vmware-install.pl 开始安装前的配置&#xff08;很麻烦跟着输就行&#xff09; 继续 出现如上…

八分钟生成一篇两万字的文章演示——《基于灰色预测的人口预测模型》

文章目录 工具使用 《基于灰色预测的人口预测模型》-全文由AI一次性生成文献综述研究方法模型开发灰色预测模型的数学构建参数估计模型验证 案例研究案例研究描述数据收集与预处理灰色预测模型的应用 文献综述研究方法模型开发灰色预测模型的数学构建参数估计模型验证 案例研究…

关于事务流的思考

关于事务流的思考 1 事务流业务分析 ​ 不同业务可能有不同的审核流程&#xff0c;而activiti为大家提供了一套公用的审核功能&#xff0c;基于这些功能我们可以根据自己的业务需求组合出我们自己的审核流程&#xff0c;而这里我要实现的事务流有如下功能&#xff1a;角色为结…