CMSIS-RTOS2简介

news2024/11/25 22:47:05

本文介绍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.coloradmin.cn/o/1832820.html

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

相关文章

机械师电脑文件丢失怎么办?6个恢复方法,希望能帮到您

机械师电脑作为高性能的计算机品牌&#xff0c;受到众多用户的青睐。然而&#xff0c;即便是品质卓越的电脑&#xff0c;也难免会遇到文件丢失的困扰。无论是由于误操作、系统故障还是硬盘损坏&#xff0c;文件丢失都可能给用户带来不小的麻烦。当您发现机械师电脑上的文件突然…

使用Midjourney为产品创建出色效果图-关键词

使用MJ为产品创建效果图并不难&#xff0c;可以使用这个固定提示词公式。 Mockup empty, blank [ product ], [ decorating items ] [ background or context ], [ 1- 3 descriptive style], [ color palette ] 创建产品形象 首先&#xff0c;你需要准备一个透明背景的产品。…

基于JSP的二手车交易网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对二手车交易网站感兴趣或有相关开发需求&#xff0c;欢迎随时联系我。我的联系方式可以在文末找到。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#…

IPA清洁棉签 IPA清洁擦拭棒:打印机头、电子设备等清洁的有力工具!

在数字化快速发展的今天&#xff0c;打印机头、电子设备等已经成为了我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;这些设备往往会因为灰尘、油渍等污染物的积累而影响其性能。此时&#xff0c;一款高效、便捷的清洁工具就显得尤为重…

可通过小球进行旋转的十字光标(vtkResliceCursor)

前一段事件看到VTK的一个例子&#xff1a; 该案例是vtk.js写的&#xff0c;觉得很有意思&#xff0c;个人正好也要用到&#xff0c;于是萌生了用C修改VTK源码来实现该功能的想法。原本以为很简单&#xff0c;只需要修改一下vtkResliceCursor就可以了&#xff0c;加上小球&#…

压缩列表(ziplist)

压缩列表&#xff08;ziplist&#xff09;&#xff1a; ziplist是列表键和哈希键的底层实现之一 当一个列表键只包含少量列表项&#xff0c;并且每个列表项要么是小整数或者短字符串&#xff0c;那么redis会使用ziplist来做列表键的实现当一个哈希键只包含少量键值对&#xff0…

【机器学习300问】119、什么是语言模型?

语言模型&#xff08;Language Models&#xff09;是自然语言处理&#xff08;NLP&#xff09;的重要组成部分&#xff0c;它的目的是量化一段文本或一个序列的概率。简单讲就是你给语言模型一个句子&#xff0c;它给你计算出特定语言中这个句子出现的概率。这样的概率度量可以…

基于jeecgboot-vue3的Flowable流程--增加我的抄送

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、前端我的抄送界面代码 <template><div class"p-2"><!--查询区域--><div class"jeecg-basic-table-form-container"><a-form ref"…

身为小白,浅浅聊一聊容器化部署

作为一个萌新小白&#xff0c;常常听人说起容器化部署某某程序……这时候我只能装作波澜不惊的样子&#xff0c;然后回去狠狠补课。 今天就来浅浅聊一下我对容器化部署的理解吧&#xff0c;为和我一样的萌新做个简单的科普&#xff0c;有什么不对的地方也请各位大佬友好交流。 …

EIQ-ABC 分析法在配送中心储位分配中的应用

配送中心运作效率的高低主要取决于仓储业务流程的作业效率&#xff0c;在配送作业流程中&#xff0c;储位分配的是否合理性成为影响配送运作效率的重要因素。为实现储位的合理分配&#xff0c;提出通过对订单信息的分析&#xff0c;并应用 EIQ-ABC 分析法&#xff0c;以此实现缩…

Linux操作系统以及一些操作命令、安装教程

Web课程完结啦&#xff0c;这是Web第一天的课程大家有兴趣可以传送过去学习 http://t.csdnimg.cn/K547r Linux-Day01 课程内容 Linux简介 Linux安装 Linux常用命令 1. 前言 1.1 什么是Linux Linux是一套免费使用和自由传播的操作系统。说到操作系统&#xff0c;大家比…

帮助汽车制造业实现高精度脚垫上下料自动化

随着汽车制造业的快速发展&#xff0c;对生产效率和产品质量的要求日益提高。在汽车制造过程中&#xff0c;脚垫的上下料操作是一个重要的环节&#xff0c;传统的人工操作方式已经无法满足现代生产的需求。富唯智能凭借其先进的3D视觉引导机器人抓取技术&#xff0c;成功解决了…

Paragon NTFS for Mac 15软件下载及安装教程

简介&#xff1a; NTFS For Mac 15是首个支持Mac上读写NTFS外置存储设备解决方案 &#xff0c;解决mac不能读写外置让您更加简单直观的在Mac机上随意对NTFS文件修改、删除等操作。 安 装 包 获 取 地 址&#xff1a; Paragon Ntfs For Mac 15版&#xff1a; ​​https://sou…

05-5.4.1 树的存储结构

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

广东工业大学领导一行莅临泰迪智能科技参观交流

6月13日&#xff0c;广东工业大学经济学院党委书记林伟英、经济学院党委副书记陈朝阳、党政办主任徐嘉靖、数学与统计学院徐圣兵莅临泰迪智能科技产教融合实训中心参观交流。泰迪智能科技董事长张良均、运营中心总监翁梦婷、校企合作经理吴桂锋进行了热情接待。 会上&#xff0…

Java共享台球室无人系统支持微信小程序+微信公众号

共享台球室无人系统 &#x1f3b1; 创新台球体验 近年来&#xff0c;共享经济如火如荼&#xff0c;从共享单车到共享汽车&#xff0c;无一不改变着我们的生活方式。而如今&#xff0c;这一模式已经渗透到了更多领域&#xff0c;共享台球室便是其中之一。不同于传统的台球室&a…

为什么会出现多头自注意力机制???

自注意力机制已经在捕捉序列内部依赖关系方面表现出色&#xff0c;但是引入多头自注意力机制的主要原因是为了进一步提升模型的表达能力和性能。这种机制的设计和应用基于以下几个关键考虑&#xff1a; 1. 增加模型的复杂性和多样性 单一的自注意力机制虽然有效&#xff0c;但…

2024大模型学习全攻略:从小白到专家,一站式进阶之路

前言 随着人工智能技术的迅猛发展&#xff0c;大模型&#xff08;Large Models&#xff09;已成为这一领域的新宠。从GPT系列到BERT&#xff0c;再到各类变体&#xff0c;大模型以其强大的能力吸引了无数开发者和研究者的目光。那么&#xff0c;作为一个零基础的学习者&#x…

qss实现登录界面美化

qss实现登录界面美化 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 去掉头部this->setWindowFlag(Qt::FramelessWindowHint);// 去掉空白部分th…

linux下的进程通讯

一. 实验内容 1&#xff0e;编写一个程序&#xff0c;实现在两个进程之间运用管道进行通讯。程序中创建一个子进程&#xff0c;然后父、子进程各自独立运行。父进程不断地在标准输入设备上读入小写字母&#xff0c;写入管道。子进程不断地从管道中读取字符&#xff0c;转换为大…