CMSIS-RTOS2 RTX5移植到GD32L233
1、CMSIS-RTOS2是什么?
关于CMSIS-RTOS2的官方描述如下:
CMSIS-RTOS v2 (CMSIS-RTOS2) 为基于 Arm® Cortex® 处理器的设备提供通用 RTOS 接口。它为需要RTOS功能的软件组件提供了一个标准化的API,因此为用户和软件行业带来了巨大的好处:
- CMSIS-RTOS2 提供了许多应用所需的基本功能。
- CMSIS-RTOS2 的统一功能集减少了学习工作,并简化了软件组件的共享。
- 使用 CMSIS-RTOS2 的中间件组件与 RTOS 无关,并且更易于调整。
- CMSIS-RTOS2 的标准项目模板可以附带免费提供的 CMSIS-RTOS2 实现。
CMSIS-RTOS2 是一个通用 API,与底层 RTOS 内核无关。应用程序程序员在用户代码中调用 CMSIS-RTOS2 API 函数,以确保从一个 RTOS 到另一个 RTOS 的最大可移植性。使用 CMSIS-RTOS2 API 的中间件通过避免不必要的移植工作来利用这种方法。

2、RTX5是什么?
全称Keil RTX5,是一个开源的、确定性的实时操作系统,实现了 CMSIS-RTOS v2 API,这是一个用于基于 Cortex-M处理器的设备的通用 RTOS 接口。
支持抢占、轮询、协作调度;已通过 PSA 认证;Apache 2.0许可证下发布的,并在GitHub上完全开放。

3、CMSIS-RTOS2 RTX5移植要点
(1)准备一个工程模板
(2)点击“Manage Rub-Time Environment”

(3)依次选择CMSIS,RTOS2,Keil RTX5 (这里用Library)

(4)相关代码添加到工程中

(5)编译报错,

可以看到void SVC_Handler(void)、void PendSV_Handler(void)、void SysTick_Handler(void)三个函数重复定义,这三个中断已经在RTOS中实现了,在gd32l23x_it文件中屏蔽掉即可。

(6)RTX5系统配置
通过RTX_Config.h文件配置,可以使用代码配置也可以使用配置向导配置


System Configuration:系统配置
Thread Configuration:线程配置
Timer Configuration:定时器配置
Event Flags Configuration:事件标志配置
Mutex Configuration:互斥量配置
Semaphore Configuration:信号量配置
Memory Pool Configuration:内存池配置
Message Queue Configuration:消息队列配置
Event Recorder Configuration:事件记录配置
(7)关于系统配置(System Configuration)

配置RTX5使用的动态内存为20480字节;
内核时钟为1000hz,默认使用的是systick;
使能RTX5轮询功能。
(8)关于线程配置(Thread Configuration)

默认的线程栈为512字节;
空闲线程栈为512字节;
使能栈溢出检测。
(9)CMSIS-RTOS2 API
所有的API都可以在cmsis_os2.h文件中找到。
相关文档可查看https://www.keil.com/pack/doc/CMSIS/RTOS2/html/genRTOS2IF.html。
4、CMSIS-RTOS2多任务
建立三个任务,在主任务中创建LED闪烁任务和 adc采样任务,之后主任务永久延时。
(1)主线程
uint8_t os_main_thread_stack_mem[512];const osThreadAttr_t os_main_thread_attr={.name="main",.priority=osPriorityLow,.stack_size=sizeof(os_main_thread_stack_mem),.stack_mem=os_main_thread_stack_mem,};//线程参数osThreadNew(MainThreadFunc, NULL, &os_main_thread_attr); // 创建主
//线程体
void MainThreadFunc(void *argument)
{LedThreadInit();AdcThreadInit();osDelay(osWaitForever);
}
(2)led线程
void LedThreadInit(void) //自定义的线程初始化函数
{LedInit();//led初始化函数osThreadNew(LedThreadFunc, NULL, NULL); // 创建线程
}
//线程体
void LedThreadFunc(void *argument)
{while(1){printf("\r\nLED %s\r\n",gpio_output_bit_get(GPIOA,GPIO_PIN_7 | GPIO_PIN_8)?"on":"off");gpio_bit_toggle(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);osDelay(500);}
}
(3)adc采样线程
const osThreadAttr_t os_adc_thread_attr={.name="adc",.priority=osPriorityNormal2,};//adc线程参数void AdcThreadInit(void) //自定义的线程初始化函数
{AdcInit();//adc初始化函数osThreadNew(AdcThreadFunc,NULL,&os_adc_thread_attr); //创建线程
}
//线程体
void AdcThreadFunc(void *argument)
{float temperature=0;uint16_t ref=0;float Vdd=0;while(1){ref=AdcSample(ADC_CHANNEL_17);Vdd=1.2/(float)ref*4095;printf("\r\nVdd=%.3f V\r\n",Vdd);printf("Channel 1=%.3fV\r\n",AdcSample(ADC_CHANNEL_1)*Vdd / 4095);temperature = ((float)((int16_t)AdcSample(ADC_CHANNEL_16) - (*(int16_t *)(0x1FFFF7F8)))* Vdd / 4095 * 1000 / Vdd) + 30;printf("Temp=%.3f\r\n\r\n",temperature);osDelay(2000);}
}
(4)主函数
int main(void)
{SerialInit();printf("GD32L233:%s,%s\r\n\r\n",__DATE__,__TIME__);osVersion_t ver;char id[20];osKernelGetInfo(&ver,id,sizeof(id));//获取版本并打印printf("\r\nVersion api:%d,kernel:%d, %s\r\n",ver.api,ver.kernel,id);osKernelInitialize(); // 初始化 CMSIS-RTOSosThreadNew(MainThreadFunc, NULL, &os_main_thread_attr); // Create application main threadif (osKernelGetState() == osKernelReady) {osKernelStart(); // 启动内核}while(1);
}
5、实验现象

可以看出CMSIS-RTOS2API版本为2.1.3,RTX5内核版本为5.5.2;
LED 500ms闪烁一次,adc2000ms采样一次。
相关文章:
CMSIS-RTOS2 RTX5移植到GD32L233
1、CMSIS-RTOS2是什么? 关于CMSIS-RTOS2的官方描述如下: CMSIS-RTOS v2 (CMSIS-RTOS2) 为基于 Arm Cortex 处理器的设备提供通用 RTOS 接口。它为需要RTOS功能的软件组件提供了一个标准化的API,因此为用户和软件行业带…...
[网络原理] 网络中的基本概念
人生,本就是苦乐参半,这样的生活才是丰富多彩. 文章目录前言1. IP地址2. 端口号3. 协议4. 五元组5. 协议分层6. OSI七层模型7. TCP/IP协议8. 封装和分用9. 客户端与服务端10. 请求与响应前言 本章开始,我们开启网络部分的知识大门. 1. IP地址 1.定义: IP地址主要用于表示网络…...
BeanPostProcessor原理分析
文章目录一、BeanPostProcessor的作用1. 源码2. 使用案例二、Spring生命周期中的BeanPostProcessor三、BeanPostProcessor对PostConstruct的支持四、BeanPostProcessor中的顺序性五、总结一、BeanPostProcessor的作用 BeanPostProcessor提供了初始化前后回调的方法,…...
人工智能和网络安全,应该如何选择?
随着数字时代的到来,网络安全和人工智能成了科技创新产业的重要组成部分。也逐渐成了大多数人心中热门的行业选择。那么该如何抉择呢? 首先我们来了解下人工智能的发展前景: 如今,人工智能技术无论是在核心技术方面࿰…...
Flink预加载分区维表,实时更新配置信息
当前我们的业务场景,是基于dataStream代码, 维表数据量很大, 实时性要求很高,所以采用预加载分区维表模式, kafka广播流实时更新配置。 实现方案 1:job初始化时 每个分区open 只加载自己那部分的配置&…...
大数据现在找工作难么
大数据行业工作好找还是难找不是光靠嘴说出来的结合实际,看看市场上的招聘需求和岗位要求就大致知道了 要想符合企业用人规范,学历,工作经验,掌握技能都是非常重要的~ 先来看几个招聘网站的报告数据: Boss直聘发布的…...
【Linux】学会这些基本指令来上手Linux吧
前言上篇文章介绍了一些常用的指令,这篇文章再来介绍一下Linux必须学会的指令。一.时间相关的指令ate显示date 指定格式显示时间: date %Y:%m:%d date 用法:date [OPTION]... [FORMAT]1.在显示方面,使用者可以设定欲显示的格式&am…...
【沐风老师】3DMAX交通流插件TrafficFlow使用方法详解
TrafficFlow交通流插件,模拟生成车流、人流动画。 【版本要求】 3dMax 2008及更高版本 【安装方法】 无需安装直接拖动插件脚本文件到3dMax视口中打开。 【快速开始】 1.创建车辆对象和行车路径。 2.打开TrafficFlow插件,先选择“车辆”对象࿰…...
c#实现视频的批量剪辑
篇首,完全没有技术含量的帖子,高手略过,只为十几年后重新捡起的我爱好玩玩。。。 起因,一个朋友说他下载了很多短视频,但只需要要其中的一小截,去头掐尾,在软件里搞来搞去太麻烦,让…...
小白怎么系统的自学计算机科学和黑客技术?
我把csdn上有关自学网络安全、零基础入门网络安全的回答大致都浏览了一遍,最大的感受就是“太复杂”,新手看了之后只会更迷茫,还是不知道如何去做,所以站在新手的角度去写回答,应该把回答写的简单易懂,“傻…...
scheduler 的使用实验对比和总结(PyTorch)
这篇文章是在完成 HW02 的过程中所产生的,是关于各 scheduler (ReduceLROnPlateau(),CosineAnnealingLR(),CosineAnnealingWarmRestarts())使用的对比实验。 起因是为了在 Kaggle 上跑出更高的成绩,但结果确…...
vue2 虚拟列表(优化版)
作用: 虚拟列表是优化长列表的一种手段,防止列表存在过多的dom元素导致页面卡顿(包扣移动端下拉到底加载下一页这种列表加载的dom元素多了一样会卡)。 原理: 如上图简单地说就是以 <div classlist-view">作…...
从应用层到MCU,看Windows处理键盘输入 [1.在应用层调试Notepad.exe (按键消费者)]
文本编辑器/文本编辑框是应用层常见的键盘处理程序。微软泄露的WinXP源码下有文本编辑器Notepad的实现:Microsoft_leaked_source_code\nt5src\Source\XPSP1\NT\shell\osshell\accesory\notepad文本编辑器的实现并不复杂,微软又(被迫)提供了Sample&#x…...
什么是大数据?大数据能做什么
大数据发现现在如火如荼,也吸引了很多有志人士想要加入这个行业,但是在正式入行之前了解大数据是什么以及能做什么是非常重要的~ 下面我们一起来看一下~ 比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合ÿ…...
Git 和 GitHub 超入门指南(四)
Git基本命令 以下是一些基本的Git命令: git add:将文件添加到Git索引中git commit:将索引中的文件提交到Git仓库中git status:查看工作目录和索引的状态git log:查看提交历史记录 Git高级命令 以下是一些高级的Git…...
Java 响应式编程 Reactor 框架
文章目录 Java 响应式编程 Reactor 框架FluxMono其它的关键对象Java 响应式编程 Reactor 框架 Reactor框架的核心理念是基于响应式编程的异步流处理。这意味着应用程序可以通过异步事件流来处理请求,而不是通过传统的同步请求-响应模型。在响应式编程中, 应用程序可以处理多个…...
Hazel引擎学习(十一)
我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看看 参考视频链接在这里 很高兴的是,引擎的开发终于慢慢开始往深了走了,前几章的引擎UI搭建着实是有点折磨人,根据课程,接下来的引擎开发…...
深度学习(22):如何判断训练过程中深度学习模型损失值不再下降
2023年3月22日,与 chatGPT 的沟通如何判断训练过程中深度学习模型损失值不再下降在深度学习中,判断模型是否收敛是非常重要的,这可以通过监控模型损失值来实现。一般来说,当训练模型的损失值不再下降,我们就可以认为模…...
一个比较全面的C#公共帮助类
上次跟大家推荐过2个C#开发工具箱:《推荐一个不到2MB的C#开发工具箱,集成了上千个常用操作类》、《推荐一个.Net常用代码集合,助你高效完成业务》。 今天再给大家推荐一个,这几个部分代码功能有重合的部分,大家可以根…...
人脸识别经典网络-MTCNN(含Python源码实现)
人脸检测-mtcnn 本文参加新星计划人工智能赛道:https://bbs.csdn.net/topics/613989052 文章目录人脸检测-mtcnn1. 人脸检测1.1 人脸检测概述1.2 人脸检测的难点1.3 人脸检测的应用场景2. mtcnn2.1 mtcnn概述2.2 mtcnn的网络结构2.3 图像金字塔2.4 P-Net2.5 R-Net2…...
从电动车痛点出发:双三相永磁电机如何靠‘弱磁’跑得更远更快?(深入对比凸极与隐极设计)
双三相永磁电机弱磁控制技术:破解电动车高速性能瓶颈的工程实践 电动车的高速巡航与急加速能力一直是用户关注的焦点,而永磁同步电机(PMSM)的弱磁控制技术正是解锁这一性能的关键。不同于传统三相电机,双三相永磁同步…...
不同品牌路由器也能玩桥接?TP-LINK AC1200主路由+FAST FWR303副路由详细配置指南
跨品牌路由器桥接实战:TP-LINK AC1200与FAST FWR303混合组网全解析 现代家庭网络环境中,信号死角问题如同房间角落的灰尘一样难以避免。特别是当房屋结构复杂或面积较大时,单台路由器往往力不从心。此时,利用家中闲置的旧路由器进…...
BilibiliCommentScraper:革新性全量数据采集的技术突破方案
BilibiliCommentScraper:革新性全量数据采集的技术突破方案 【免费下载链接】BilibiliCommentScraper 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCommentScraper 在当今数据驱动决策的时代,高效采集方案与完整数据获取已成为内容分析…...
Zap vs Go:终极后端性能对比测试与实战分析
Zap vs Go:终极后端性能对比测试与实战分析 【免费下载链接】zap blazingly fast backends in zig 项目地址: https://gitcode.com/gh_mirrors/zap/zap Zap 作为一款基于 Zig 语言开发的后端框架,以其 "blazingly fast backends" 为核心…...
从‘localhost:8080’到‘dev.myapp.com’:给本地服务绑个‘正经’域名的三种方法(Nginx/Docker/系统Hosts)
从‘localhost:8080’到‘dev.myapp.com’:本地服务域名绑定的实战指南 每次调试前端页面时,在浏览器地址栏反复输入localhost:3000或127.0.0.1:8080,这种体验总让人感觉像是在用临时解决方案应付正式开发需求。想象一下,当你的团…...
【雷达成像】主动式毫米波安检成像【含Matlab源码 15238期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…...
小白也能玩转DeepSeek-R1:Ollama一键部署推理模型实战
小白也能玩转DeepSeek-R1:Ollama一键部署推理模型实战 还在为复杂的AI模型部署而烦恼吗?DeepSeek-R1-Distill-Llama-8B作为一款强大的文本生成模型,现在通过Ollama平台可以轻松实现一键部署。本文将带你从零开始,只需3个简单步骤…...
手把手教你为本地LLM(Llama/Qwen)实现打字机式流式输出,Gradio+Transformers保姆级教程
手把手教你为本地LLM实现打字机式流式输出:Gradio与Transformers深度整合指南 当我们在本地部署大语言模型时,最令人沮丧的体验莫过于盯着进度条等待完整响应。想象一下这样的场景:你向模型提出一个复杂问题,屏幕陷入长达十几秒的…...
解锁Joplin无缝笔记体验:3大场景实现全平台知识管理自由
解锁Joplin无缝笔记体验:3大场景实现全平台知识管理自由 【免费下载链接】joplin Joplin 是一款安全笔记记录与待办事项应用,具备跨平台同步功能,支持 Windows、macOS、Linux、Android 和 iOS 平台。 项目地址: https://gitcode.com/GitHub…...
熬夜赶论文效率低到哭?,有哪些真正值得体验的的降AIGC软件推荐?
毕业论文降AIGC率,优先选语义重构 AI痕迹清除 降重优化的工具,免费与付费结合最实用。下面按中文、英文、免费/付费分类推荐,附实测效果与适用场景。 一、中文论文降重工具(最常用) 1. 千笔AI(综合全能首…...
