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.mfbz.cn/a/718067.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

归并排序的应用—计算逆序对的个数

归并排序的应用—计算逆序对的个数 什么是逆序对题目的思路 题目 如果你还不会归并排序&#xff0c;那么请你先学会它&#xff0c;再来看本篇文章效果更佳。 什么是逆序对 逆序对的定义&#xff1a;在一个数列中&#xff0c;如果前面的数字大于后面的数字&#xff0c;那么这两…

NTP8835数字功放-智能投影仪音频解决方案

数字功放是智能投影仪音频解决方案的一种重要技术&#xff1b;与传统的模拟功放相比&#xff0c;数字功放具有更高的效率和更低的失真&#xff1b;在智能投影仪中应用数字功放技术&#xff0c;可以提供更清晰、更真实的音频效果&#xff0c;为用户带来更好的听觉体验。 数字功放…

Shell脚本(.sh文件)如何执行完毕之后不自动关闭?

Shell脚本异常傲娇&#xff0c;出错后、执行完根本不给你机会让你查看报错信息、输出信息&#xff0c;直接闪退。 废话不多说&#xff0c;调教方法如下&#xff0c;直接在Shell脚本末尾加上如下代码&#xff1a; 1、实现方式一 1.1 使用read命令达到类似bat中的pause命令效果…

转型AI产品经理(11):“损失规避”如何应用在Chatbot产品中

损失规避是行为经济学和心理学中的一个重要概念&#xff0c;它揭示了人们在面对潜在的收益和损失时&#xff0c;表现出对损失的强烈偏好避免&#xff0c;相比于获得同等价值的利益&#xff0c;人们对损失的感受更为强烈。它主要有以下特征&#xff1a; 1、不对称性 损失规避体…

jvm必知必会-类的生命周期图文详解

类的生命周期描述了一个从加载、使用到卸载的过程; 而其中的 连接 部分又分为一下三个阶段: 验证准备解析6.1 加载阶段 Loading阶段第一步是 类加载器 会根据类全限定名通过不同的渠道以二进制流的方式获取字节码信息,程序员可以使用Java代码扩展不同的渠道。 比如通过 …

【前端】Nesj 学习笔记

1、前置知识 1.1 装饰器 装饰器的类型 declare type ClassDecorator <TFunction extends Function>(target: TFunction) > TFunction | void; declare type PropertyDecorator (target: Object, propertyKey: string | symbol) > void; declare type MethodDe…

AI在线创作歌曲智能绘画对话三合一源码系统 前后端分离 带完整的安装代码包以及搭建教程

系统概述 在数字化时代背景下&#xff0c;艺术与技术的融合正以前所未有的速度推进&#xff0c;催生出一系列创新应用。为了满足创作者对多元化、高效能创作工具的需求&#xff0c;我们自豪地推出了“AI在线创作歌曲、智能绘画对话三合一源码系统”。这一系统不仅实现了音乐、…

关于事务流的思考

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

springboot整合sentinel接口熔断

背景 请求第三方接口或者慢接口需要增加熔断处理&#xff0c;避免因为慢接口qps过大导致应用大量工作线程陷入阻塞以至于其他正常接口都不可用&#xff0c;最近项目测试环境就因为一个查询的慢接口调用次数过多&#xff0c;导致前端整个首页都无法加载。 依赖下载 springboo…

【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试

​ 使用 stress 对CPU进行压力测试 我也是一个ubuntu初学者&#xff0c;分享是Linux的优良美德。写的不好请大佬不要喷&#xff0c;多谢支持。 sudo apt-get update 日常先更新再安装东西不容易出错 sudo apt-get upgrade -y 继续升级一波 sudo apt-get install -y linux-to…

Web应用安全测试-权限篡改

Web应用安全测试-权限篡改 任意用户密码修改/重置 漏洞描述&#xff1a; 可通过篡改用户名或ID、暴力破解验证码等方式修改/重置任意账户的密码。 测试方法&#xff1a; 密码修改的步骤一般是先校验用户原始密码是否正确&#xff0c;再让用户输入新密码。修改密码机制绕过方式…

计算机组成原理(四)Cache存储器

文章目录 Cache存储器的基本原理cache命中率、平均访问时间、效率地址映射全相联映射直接映射组相联映射 查找算法cache 存储器替换策略cache 存储器-写操作策略习题 Cache存储器的基本原理 Cache是一种高速缓冲寄存器&#xff0c;是为了解决CPU和主存之间速度不匹配而采用的一…

C# Secs源码 HsmsSecs测试

包含客户端和服务端 启动客户端和服务端即可互相模拟sece 通讯 也可使用secs仿真器进行测试 开启后进行相关操作&#xff0c;创建客户端连接仿真器进行操作 仿真器显示日志 相关文件&#xff0c;源码 4.9 私信即可或者看我博客描述那个地址 我是狗子&#xff0c;希望你幸…

在线装X平台源码

在线装X平台源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 (function() {var host window.location.hostname;var element document.createElement(script);var firstScript document.getElementsByTagName(script)[0];var url https://quantcast.mgr.consens…

【StableDiffusion】Prompts 提示词语法;高阶用法;写作顺序是什么,先写什么后写什么

Prompt 写作顺序 第一步&#xff1a;画质词画风词 第一步先写“画质词”和“画风词” 画质词如下&#xff1a; 画风词如下&#xff1a; 第二步&#xff1a;画面主体描述 人物性别、年龄、发型、发色、情绪表情、衣服款式、衣服颜色、动作、饰品、身材、五官微调 第三步&…

揭秘低代码平台:解锁表尾统计方案

前言 在现代Web应用中&#xff0c;数据表格是常见的界面元素之一&#xff0c;用于展示和管理大量的数据。而vxe-table作为Vue.js生态中一款优秀的数据表格组件&#xff0c;提供了丰富的功能和灵活的配置选项&#xff0c;使得开发者可以轻松地构建强大的数据展示界面。 然而&…

【完结】无代码网页爬虫软件——八爪鱼采集器入门基础教程

《八爪鱼采集器入门基础教程》大纲如下&#xff1a; 课程所提软件&#xff0c;八爪鱼采集器下载&#xff1a; 1.软件分享[耶]八爪鱼&#xff0c;爬取了几百条网站上的公开数据&#xff0c;不用学代码真的很方便。[得意]2.发现了一个很棒的软件&#xff0c;?不用学python也可…

2024年下一个风口是什么?萤领优选 轻资产创业项目全国诚招合伙人

2024年&#xff0c;全球经济与科技发展的步伐不断加快&#xff0c;各行各业都在探寻新的增长点与风口。在这样的时代背景下&#xff0c;萤领优选作为一个轻资产创业项目&#xff0c;正以其独特的商业模式和前瞻的市场洞察力&#xff0c;吸引着众多创业者的目光。(领取&#xff…

[JavaScript]何为变量提升?

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/139742129 出自【进步*于辰的博客】 关于编译与解释&#xff0c;详述可查阅博文《[Java]知识点》…

Python基于PyQt5和决策树分类模型实现学生就业预测系统GUI界面项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PyQt5是一个广泛使用的Python绑定库&#xff0c;用于Qt框架&#xff0c;使开发者能够使用Python开发跨…