当前位置: 首页 > news >正文

ThreadX的CMSIS-RTOS V2封装层升级至V1.4.0(2026-01-14)

https://github.com/STMicroelectronics/stm32-mw-cmsis-rtos-tx

CMSIS-RTOS v2(简称 CMSIS-RTOS2)为基于 Arm Cortex 处理器的设备提供了通用的实时操作系统接口。它为需要实时操作系统功能的软件组件提供了标准化 API,从而为用户和软件行业带来显著优势:

CMSIS-RTOS2 提供了许多应用所需的基础功能。
1、统一的 CMSIS-RTOS2 功能集降低了学习成本,简化了软件组件的共享流程。
2、基于 CMSIS-RTOS2 的中间件组件可兼容不同实时操作系统,适配更便捷。
3、标准化的 CMSIS-RTOS2 项目模板可随开源可用的 CMSIS-RTOS2 实现一同分发。

本 CMSIS-RTOS v2 封装层基于 ThreadX 实时操作系统的 API,对 CMSIS-RTOS v2 接口进行了实现。当前版本支持的功能如下:

CMSIS-RTOS v2 设计
内核初始化与启动
在 ThreadX RTOS 中,仅通过一个接口(tx_kernel_enter)启动内核。该函数将执行以下步骤:

_tx_initialize_low_level:调用底层初始化函数,处理所有处理器相关的初始化事务。
_tx_initialize_high_level:调用高层初始化函数,初始化所有 ThreadX 组件及应用程序的初始化函数。
tx_application_define:调用应用程序提供的初始化函数,并将首个可用内存地址传递给它。
_tx_thread_schedule:进入调度循环,开始执行线程。

对于 ARM CMSIS 方案,必须将内核初始化与内核启动分离,以便用户在此期间创建线程、定时器、信号量等。为此,我们将 CMSIS-RTOS2 封装层设计如下:

osKernelInitialize:通过调用 _tx_initialize_kernel_setup 函数,完成底层和高层的初始化。
osKernelGetState:将调用应用程序提供的初始化函数来启动内核。

动态内存管理
CMSIS-RTOS v2 的 API(如 osThreadNew)使用户在实现应用程序时可以选择:
传递已声明或在应用层分配的块内存及栈地址;
由底层(封装层或 RTOS)分配内存。

动态内存分配方案的总体思路是使用两个 ThreadX BytePool:
HeapBytePool:用于线程、定时器、互斥锁、信号量、事件标志和消息队列对象的块内存分配。
StackBytePool:用于线程和消息队列的栈内存分配。

为此,我们添加了以下三个内部函数:
MemInit 创建 HeapBytePool 和 StackBytePool
MemAlloc 为对象块或栈分配所需内存
MemFree 释放对象块或栈的内存

注意事项:
HeapBytePool 和 StackBytePool 的大小由用户通过宏定义 RTOS2_BYTE_POOL_HEAP_SIZE 和 RTOS2_BYTE_POOL_STACK_SIZE 分别指定。
HeapBytePool 和 StackBytePool 的最小大小由 ThreadX 宏定义 TX_BYTE_POOL_MIN 决定。
HeapBytePool 和 StackBytePool 从 ThreadX 变量 _tx_initialize_unused_memory 定义的第一个空闲内存区域中分配。

静态内存管理
CMSIS-RTOS v2 使用户在实现应用程序时能够静态分配内存。实际上,静态缓冲区将基于用户定义的 RTOS2_BYTE_POOL_HEAP_SIZE 和 RTOS2_BYTE_POOL_STACK_SIZE 进行创建和分配。HeapBytePool 和 StackBytePool 的最小大小由 ThreadX 宏定义 TX_BYTE_POOL_MIN 决定。

部分截图

http://www.cnnetsun.cn/news/614362.html

相关文章:

  • 机器人成本控制十年演进
  • 科技知识图谱:释放创新潜能,构建协同生态
  • 【Java毕设全套源码+文档】基于springboot的卷烟营销统计分析系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 【Java毕设全套源码+文档】基于springboot的农产品物流系统设计与实现(丰富项目+远程调试+讲解+定制)
  • 手把手教你在Ubuntu上安装/管理多个Python版本
  • 收藏必看!程序员的AI开发第一课:零基础入门大模型应用,职场竞争力UP!
  • 系统找不到mfc100u.dll文件 如何修复? 免费下载方法分享
  • 没N卡也能玩转AI:MediaPipe Holistic云端体验报告
  • 区块链 Web3 系统的外包开发
  • SGLang-v0.5.6避坑指南:云端镜像开箱即用,省去3天配置时间
  • 从工作流到自主决策:Anthropic 揭秘高效智能体的工程方法论
  • 通义千问2.5-7B-Instruct优化技巧:AutoDL部署速度提升秘籍
  • SGLang模型量化教程:云端低成本验证,显存需求降60%
  • SGLang-v0.5.6监控告警:成本超支自动停机
  • 没预算怎么学SGLang?学生认证免费领50元GPU额度
  • 学术变形记:书匠策AI如何让课程论文从“青铜”秒变“王者”
  • AnimeGANv2模型迭代史:v1到v2的关键升级点
  • AnimeGANv2部署教程:轻松实现自拍转宫崎骏风动漫形象
  • 薄板PCB未来会如何发展?
  • 9个AI论文工具高阶玩法:一键生成论文,导师不会告诉你的秘密!
  • SGLang vs vLLM实测对比:云端GPU 3小时完成技术选型
  • FUNCTION CALL vs 手动编码:效率提升300%的对比实验
  • VMware Workstation Pro 17 vs 传统开发环境:效率对比分析
  • AI如何帮你轻松搞定Docker容器化部署
  • VNC vs 现代远程工具:效率对比测试与优化方案
  • CLOC实战:用代码统计优化团队开发流程
  • 5分钟原型:Ubuntu输入法状态监测工具开发
  • 基于Java+Python+MySQL实现的(Web)选题系统
  • 不用记命令!可视化MKDIR -P原型工具
  • 1小时打造定制化Redis监控面板