news 2026/3/25 2:33:42

[G32R] 使用 cmake+vscode 环境移植 ThreadX 到 G32R501

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[G32R] 使用 cmake+vscode 环境移植 ThreadX 到 G32R501

概述

我本人是 cmake+vscode 组合的忠实用户,之前写了一篇文章介绍了在 cmake+vscode 环境下开发 G32R501 的一些实践经验。这篇文章准备更进一步:移植一个ThreadX。

关于 G32R501


G32R501是极海微最新发布的实施控制 MCU,搭载Arm v8.1-M架构的Arm® Cortex®-M52内核及自研紫电数学指令扩展单元,支持基于矢量扩充方案(MVE)的Arm HeliumTM技术,集成高性能感知,控制外设和灵活的外设互联系统,支持-40°C~105°/125°C的宽环境工作温度,适用于新能源逆变器、商业电源、工业自动化、新能源汽车等广泛领域。

产品主页:https://www.geehy.com/product/fifth/G32R501

关于 ThreadX


最早由 Express Logic发布,2019年被微软收购。2023微软宣布将 ThreadX 捐赠给 Eclipse 基金会,更名为 Eclipse ThreadX,采用 Apache 2.0 协议完全开源。

工程目录组织

还是之前的套路,先介绍一下代码目录组织:



主要的文件/文件夹有:

  • .vscode:Vscode 配置文件
  • build:构建目录
  • g32r501_sdk:G32R501 SDK 目录
  • keil-mdk:keil 工程文件,主要用于Debug。
  • ports:移植文件
  • src:App 源码
  • threadx:ThreadX 源码
  • CMakeLists.txt:Cmake 配置文件



这个目录,是用git 进行源码管理,powershell进行命令行操作。下面的操作会一步一步指示如何完成移植。

移植步骤

构建目录


我的工作目录是 D:\g32r501_threadx,大家在实践的时候可以自行选择目录。手动创建这个目录,在 powershell里切换到这个目录,使用git init创建 git仓库:

复制
  1. gitinit .




使用 git submodule加两个子模块,也就是 g32r501_sdk和 threadx的目录:

复制
  1. <p>git submodule add https://gitee.com/quincyzh/hal_geehy_g32r501.git g32r501_sdk</p><p>git submodule add https://github.com/eclipse-threadx/threadx.git threadx</p>




再手动创建 keil-mdk,ports,src三个目录。

移植详解

G32G501 的内核是 Cortex-M52,ThreadX目前没有相关移植。我们以 Cortex-M55 为基础修改,需要注意的是:

  • G32G501不具备Cortex-M55 安全相关特性,需要删除相关代码。
  • 完成VOID _tx_initialize_low_level(VOID)这个函数及相关内容。



第一步
复制 threadx\ports\cortex_m55\ac6目录下的 inc 和 src目录到 ports\g32r501下。删除 tx_initialize_low_level.S这个文件,创建 tx_initialize_low_level.c 代码为可以参考 tx_initialize_low_level.S这个文件:

  • 可用 RAM空间首地址赋予 _tx_initialize_unused_memory这个指针。
  • 赋值 _tx_thread_system_stack_ptr为Stack指针。
  • ThreadX使用 SysTick作为系统滴答时钟,OS外其他程序也会使用 SysTick时钟,这里就不配置 SysTick稍后我们在 main.c 文件处理 SysTick。
  • 配置 PendSV_IRQn、SVC等几个必须的中断优先级。



具体内容参考下图内容:



第二步

修改 tx_thread_secure_stack.c文件。
需要删除其中的 __attribute__((cmse_nonsecure_entry)) ,共有5行,全部删除。不删除的话也没关系,编译期间会有告警。

第三步

完成 SysTick设置。
在 main.c 文件中,ThreadX初始化前完成 SysTick设置,就按1ms为周期:



SysTick_Handler这个 ISR中需要调用 _tx_timer_interrupt() 就可以完成 ThreadX滴答~,需要注意的是如果使能 TX_ENABLE_EXECUTION_CHANGE_NOTIFY和 TX_EXECUTION_PROFILE_ENABLE两个特性,还需要在 _tx_timer_interrupt()之前和之后调用_tx_execution_isr_enter()和 _tx_execution_isr_exit()。



main函数可以这样写:



App示例

App部分,我们先来点个灯~



Cmake配置

两个关键部分:一是ThreadX library,二g32r501_sdk。

ThreadX library部分,把 threadx/common 下的全部源文件,port/g32r501 下的全部源文件都加入工程参与编译就可以。

g32r501_sdk 部分,直接使用 add_subdirectory把 sdk加入工程就ok。这一部分是在 https://gitee.com/quincyzh/hal_geehy_g32r501.git这个仓库完成,具体可以参考这个仓库的内容。

CMakeLists.txt关键内容:



Vscode配置

为了更便捷地使用 vscode,可以添加一些配置:
创建/修改文件 .vscode\settings.json:



"cmake.configureEnvironment"这里构建是必须的环境变量ARMCLANG_PATH这个是 g32r501_sdk仓库必须的内容。
"cmake.configureArgs是Cmake配置工程时的参数,这里指定了一个 .cmake文件,也就是 g32r501_sdk/cmake/g32r501.cmake。文件说明了使用 armclang编译套件。
最后的 "cmake.generator"指定使用Ninja为构建工具。

编译&调试

编译

准备工作完成了,编译就是一键完成:F7。等待编译完成。

调试

Vscode中配合 armclang调试确实不方便,我们还是回到 keil中进行调试工作。
仓库 keil-mdk 文件夹下,有一个 keil工程,直接打开就可以开始调试。但需要在调试前手动下载程序
因为工程里没有任何文件,点击编译等按钮都不会触发任何操作~

如果调试中发现程序不能执行,停止时PC在 0x10000000 代码段的情况。那是因为 G32R501 DCS 没有正确解锁。请在keil工程配置中设置 InitiaizationFile 这个文件已经在仓库里,示意图:



打完收工


工程师们的时机都很宝贵,时间应该聚焦在 app的编写。所以我贴心的把整个移植工程上传到 gitee 。大家可以自行取用,顺手点个 star也是欢迎的~

https://gitee.com/quincyzh/g32r501_threadx

祝工程师朋友们编码快乐,无 Bug ~~~


---------------------
作者:wangqy_ic
链接:https://bbs.21ic.com/forum.php?mod=viewthread&tid=3460432
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/18 8:28:46

简单理解:为什么错误计数器一般要选 uint32_t 类型?

要搞懂两个核心问题&#xff1a;1. 为什么是 32&#xff08;即 uint32_t 的 “32” 含义&#xff09;&#xff1f;2. 为什么错误计数器 err_cnt 要选 uint32_t 类型&#xff1f;结合嵌入式开发的实际需求、数据类型特性&#xff0c;用通俗的逻辑 实战场景讲透&#xff1a;一、…

作者头像 李华
网站建设 2026/3/23 12:17:58

解决WSL安装Linux发行版失败问题的有效替代方案

解决WSL安装Linux发行版失败问题的有效替代方案 在深度学习项目快速推进的今天&#xff0c;许多开发者依然卡在一个看似基础却异常棘手的问题上&#xff1a;如何在Windows系统中稳定地搭建一个支持GPU加速的PyTorch开发环境&#xff1f; 理想路径是使用WSL2运行Ubuntu并配置CUD…

作者头像 李华
网站建设 2026/3/24 17:30:28

先睹为快 | 2026年2月国际学术会议一览表

2026年2月计划举办超过20场专题分会&#xff0c;广泛覆盖大数据、生成式人工智能、计算机视觉、决策智能、航空航天工程、智能汽车、无人驾驶、能源科学、材料科学、软件工程、通信技术、社会科学及人文艺术等数十个前沿与交叉学科领域。 会议致力于打造高水平的全球化学术交流…

作者头像 李华
网站建设 2026/3/24 11:26:56

工业自动化怎么实现从执行指令到自主决策的升级?

工业自动化正经历一场从“执行指令”到“自主决策”的深刻变革&#xff0c;不再局限于传统意义上的机械替代人工&#xff0c;而是通过感知、分析、决策与执行的闭环系统&#xff0c;重构制造业的运行逻辑。在这一转型进程中&#xff0c;广域铭岛凭借其Geega工业互联网平台&…

作者头像 李华
网站建设 2026/3/23 17:53:29

AI工程化实战·番外篇:中小企业的轻量级 AI 中台搭建指南

一、轻量中台核心原则1.1 “三不”原则原则说明实践不重复造轮子优先用成熟开源组件Milvus LangChain vLLM不追求大而全聚焦 1–2 个高价值场景先做智能客服&#xff0c;再扩展不牺牲安全性数据不出内网&#xff0c;权限最小化自建 RBAC1.2 架构对比&#xff1a;轻量 vs 企业…

作者头像 李华
网站建设 2026/3/19 12:36:35

Markdown写文档 + Jupyter做实验:PyTorch镜像完美支持工作流

Markdown写文档 Jupyter做实验&#xff1a;PyTorch镜像完美支持工作流 在深度学习项目中&#xff0c;最让人头疼的往往不是模型调参&#xff0c;而是环境配置——“为什么你的代码在我机器上跑不起来&#xff1f;”这个问题几乎成了团队协作中的经典梗。依赖冲突、CUDA版本不匹…

作者头像 李华