首页/新闻资讯/正文详情

RT-Thread i.MX RT1180 双核 BSP 实战:两核分开跑、分开聊、从核还能被叫醒

发布时间:2026/11/4 19:45:01 来源:云帆数科 栏目:资讯中心
RT-Thread i.MX RT1180 双核 BSP 实战:两核分开跑、分开聊、从核还能被叫醒
RT-Thread i.MX RT1180 双核 BSP 实战两核分开跑、分开聊、从核还能被叫醒【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址: https://gitcode.com/gh_mirrors/rt/rt-threadi.MX RT1180 把两颗 Arm 核心放在同一颗芯片里配套的 RT-Thread BSP 采取双工程、各自编译、各自烧录的做法这对习惯单核 MCU 的开发者来说很容易看晕。本文以 imxrt1180-nxp-evk 为例按任务主线推进第 1 步完成编译烧录并验证启动第 2 步讲透用 menuconfig 按需裁剪外设第 3、4 步拆解主核唤醒从核、核间消息传递两条源码链路。适合用 RT-Thread 做双核项目的入门者。先看懂分工为什么双核就是两个工程一颗芯片、两颗核、一主一从两颗核的定位差别很大Cortex-M7CM7800 MHz 主频带 FPU适合电机控制、信号处理这类算力密集的活Cortex-M33CM33240 MHz 主频自带 TrustZone 安全扩展适合安全启动、系统管理、网络协议栈这类任务。芯片还提供双千兆以太网、EtherCAT 等工业接口并支持宽温工作目标场景是工业控制、电机驱动。这个 BSP 里主从关系是固定的CM33 是主核CM7 是从核remote从核上电后不会自己跑起来必须由主核把它踢起来。同一个 BSP 下的两个独立工程工程结构直接体现了这种分工imxrt1180-nxp-evk目录下并排放着cm33/与cm7/二者各自拥有完整的 rtconfig.h、构建脚本、IDE 模板和链接脚本编译产物互不掺和。两个工程的分工可以直接从各自的 rtconfig.h 确认CM33 侧架构宏为ARCH_ARM_CORTEX_M33ARCH_ARM_CORTEX_SECURE控制台设备是uart1LPUART1RX/TX DMA 通道 0 和 1见 cm33/rtconfig.hCM7 侧架构宏为ARCH_ARM_CORTEX_M7ARCH_ARM_CORTEX_FPU控制台设备是uart12LPUART12DMA 通道 22 和 23见 cm7/rtconfig.h。⚠️串口别接串了两核日志各走各的。想看 CM33 的输出把 USB 转串口接到 UART1看 CM7 则接 UART12两边都按 115200-8-1-N 设置。第 1 步拉包、出工程、验证第一次启动如果还没拿到代码先 clone RT-Thread 仓库https://gitcode.com/gh_mirrors/rt/rt-thread 然后进入bsp/nxp/imx/imxrt/imxrt1180-nxp-evk对应核的目录打开 ENV。编译前唯一的硬前提是拉取软件包。该 BSP 的外设驱动来自 NXP IMXRT 驱动包rtconfig.h 里能看到PKG_USING_NXP_IMXRT_DRIVER开关漏掉这步编译会直接缺库报错pkgs --update scons --targetmdk5 scons -j8三行对应三条路线scons --targetmdk5产出 Keil 工程scons --targetiar产出 IAR 工程scons -j8走 GCC 直接编译8 线程并行。工程文件会落在对应核的目录里比如cm33/。硬件侧数据线把开发板接到 PC板载调试器打开电源开关。工程默认走 CMSIS-DAP 下载确认连接后点一下下载按钮镜像就进板子了。判断成功的标准烧录完系统自动运行串口工具打开对应口、复位一下先看到 RT-Thread 的启动 banner带 logo 和版本号接着是应用输出CM33 工程打印MIMXRT1180_CM33 Hello_World同时板载 LEDcm33/applications/main.c 中的GET_PIN(4, 27)以 500 ms 为周期翻转CM7 工程由 cm7/applications/main.c 打印MIMXRT1180_CM7 Hello_World。✅ 两路串口先后出现各自的 Hello_World说明两核各自拉起来了。第 2 步用 menuconfig 按需裁剪外设默认配置是最小集QSPI Flash、GPIO、DMA 加上各自的控制台串口其余全部关闭。要启用额外资源标准动作是在对应核的 BSP 目录执行menuconfig勾选选项保存退出再pkgs --update最后重新执行 scons 生成工程顺序不能反。哪些外设可用对照 cm33/board/Kconfigcm7 侧同构按支持状态分成三档开箱即用QSPI Flash XIP代码直接驻留外部 NOR flash 执行、flexspi 驱动、CherryUSB设备/主机双角色可选、NETC 网络交换双千兆以太网、EtherCAT、GPIOGET_PIN接口、LPUART1 ~ LPUART12、LPSPI1 ~ LPSPI4、LPI2C每路 100/400 kHz 二选一、LPADC附多通道 DMA 示例、Timer含 DWT 周期计数与微秒忙等、SDIO、RTC、FLEXCAN3需要主从协同开关多核启动kick-off与核间消息RPMsg-Lite第 3、4 步专门讲暂未支持PWM文档标注为后续版本规划。勾选选项时注意两条联动逻辑菜单里不少选项不是孤立的只看表面容易踩空DMA 是被别人带起来的串口、SPI、I2C 没有独立的整板 DMA入口各通道的 RX/TX DMA 开关一勾会自动连带选中BSP_USING_DMA通道号要单独填串口范围 0~32SPI/I2C 范围 0~31默认按序递增。通道配置长这样一个选项带出一串依赖以太网开关会自动带起 lwIP、SAL、netdev还能进一步选 EP0 直连或交换模式NETC_USE_SWT、默认开启 PHY文件系统开关下可以组合SD 卡 FATFS或QSPI Flash LittleFS后者依赖 FAL 分区表见cm33/board/ports/fal_cfg.h。内存布局靠一个选项切换Kconfig 末尾是内存布局三选一对应cm33/board/linker_scripts/下三组.ld/.scf/.icf文件RAM镜像整体放进内部 SRAM 跑FlexSPI NOR默认代码在外部 NOR flash 上 XIP 执行FlexSPI NOR HyperRAMXIP 之外再挂外部 HyperRAM 当附加内存。配合 cm33/rtconfig.py 的机制它扫描 rtconfig.h 里的BSP_LINKER_SCRIPT_*宏挑出匹配的链接脚本生成 Keil 工程时还会把project.uvoptx的当前 Target 同步成对应名称。也就是说 menuconfig 里切一下选项、重新生成工程内存布局就自动跟上不用手改链接文件。⚠️改完布局一定要重新生成工程拿旧工程继续编译链接地址和新布局对不上板子起不来。第 3 步主核唤醒从核MCMGR kickoff 流程CM33 侧的多核逻辑集中在 cm33/applications/multicore_thread.c。系统启动时经INIT_APP_EXPORT自动建一个名为 multicore 的线程栈 2048 字节、优先级 10、时间片 5由它执行唤醒 CM7的全套动作。可以把它类比成先帮搭档装好启动盘再按下开机键每个动作都有对应源码步骤初始化 MCMGRMCMGR_Init()启动多核管理单元它相当于那枚开机键预约就绪回调MCMGR_RegisterEvent()注册远端应用就绪事件CM7 起来后能借此回报取镜像信息BOARD_GetCore1ImageAddrSize()拿到 CM7 镜像的源地址、目的地址、大小和启动地址并逐条打印到控制台供核对搬运镜像BOARD_PrepareCore1()把镜像从源位置拷到目标内存——装启动盘按下开机键MCMGR_StartCore()以同步方式拉起 CM7同时把 RPMsg 共享内存的基址一并传给从核等回执以 10 ms 为周期轮询就绪事件直到 CM7 回报 ready 才往下走。对应 Kconfig 里BSP_USE_MULTICORE之下的两个子开关kick-off 与 RPMsg-Lite均默认打开。kick-off 的 help 文本也明确主核拉起从核时这套启动序列是保证初始化顺序正确所必需的。第 4 步在共享内存留言板上打乒乓RPMsg-Lite 核间通信两核之间不直接共享数据交换而是用 RPMsg-Lite——RPMsg 协议的轻量实现靠一块共享内存完成点对点消息传递。打个比方两个核共用一块留言板谁要说话就在板上留言对方路过时取走。留言板在源码里是 6144 字节的缓冲区rpmsg_lite_base[]这里有个隐蔽的坑缓冲区所在的 section 随编译器变化——IAR 用 pragma location、Keil 用 section 属性、GCC 用.noinit.$rpmsg_sh_mem三者必须与链接脚本里的段定义逐一对上。对不上的话两核指向的内存就不是同一块消息全部石沉大海。主核侧初始化按四步走以 master 身份初始化 RPMsg-Lite 实例 → 建接收队列 → 建本地端点默认地址 40→ 绑定名称服务。最后一步完成后主核进入等待等 CM7 起来后在名称服务上广播服务名回调把远端端点地址写进变量主核立刻转入正式通信。正式通信是一段经典 ping-pong主核发出一个 32 位计数值CM7 收到后回传如此往复约 100 轮计数到顶通信结束随后按顺序销毁端点、队列和名称服务句柄收尾 RPMsg。所有参数都有默认值不改也能跑链路 ID0即RL_PLATFORM_IMXRT1180_M33_M7_LINK_ID本地端点地址CM33 侧40范围 0~65535名称服务广播串rpmsg-openamp-demo-channel共享内存大小6144 字节。Kconfig 里配的值会写进 rtconfig.h源码中用#ifndef兜底所以不显式配置也能按默认参数编译运行。CM7 侧的对称实现在 cm7/applications/multicore_thread.c想追远端逻辑时看它。跑通演示之后走向自己的双核应用到这里开发板已经走完启动—配置—主从拉起—核间通信的完整闭环。做自己的应用时改动其实只有三处把两个工程里演示用的main()换成业务逻辑把 RPMsg 消息的载荷从 32 位计数换成自己的协议结构如果希望一颗芯片从单镜像整体启动还可以借助 MCUXpresso Secure Provisioning Tool 生成可启动的双核镜像做法见 README_zh.md 的说明。这个 BSP 的要点浓缩起来就三句话两核是两个独立工程构建互不干扰主核负责唤醒从核顺序不能颠倒核间消息走那块 6144 字节共享内存section 必须和链接脚本对得上。把这三句记牢后面往 RT1180 上叠电机控制、工业网关之类的业务路就不会走偏。【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址: https://gitcode.com/gh_mirrors/rt/rt-thread创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

通信接口1
通信接口1

1.USTRA串口协议通信的目的:将一个设备的数据传送到另一个设备上,扩展硬件系统通信协议:指定通信的规则,通信双方按照协议规则进行数据收发1.USART串口:引脚TX为数据发送脚,RX是数据接收脚2.I2C通信&#x… · 2026/11/4 19:45:01

Carrel 图文双路重排揭秘:文本与图像独立打分再按名次融合的原理
Carrel 图文双路重排揭秘:文本与图像独立打分再按名次融合的原理

【免费下载链接】carrel Ontology-Augmented Generation for AI agents. 项目地址: https://gitcode.com/gh_mirrors/ca/carrel 点击查看 免费下载 Carrel 是一个面向 AI Agent 的自托管知识库,核心能力是混合检索与本体增强生成(Ontology-… · 2026/11/4 19:44:01

下载Python与Pycharm教程 (Windows版)
下载Python与Pycharm教程 (Windows版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 19:43:00

Swarm2.1:轻量级多智能体算法验证仿真内核
Swarm2.1:轻量级多智能体算法验证仿真内核

简介:Swarm 2.1.1 是一款面向计算机科学、人工智能与复杂系统研究者的多智能体仿真工具,专用于建模和分析大规模自主智能体间的交互行为,适用于分布式计算、群体智能算法(如Boids)、网络优化及生物启发式系统等教学与科… · 2026/11/4 20:30:24

深入解析Sass颜色函数:从基础到高级应用
深入解析Sass颜色函数:从基础到高级应用

1. 为什么需要深入理解Sass颜色函数?在CSS预处理器的世界里,Sass的颜色函数就像是一个隐藏的调色板大师。我至今记得第一次发现darken()函数时的惊喜——原来只需要一行代码就能实现设计师要求的"比主色深15%"的效果,而不用手动计算… · 2026/11/4 20:30:24

脑机接口落地难?三大现实壁垒与工程化破局路径
脑机接口落地难?三大现实壁垒与工程化破局路径

1. 这不是科幻片——当脑电波开始“说话”,我们到底卡在哪一步? “脑机接口能让人用意念打字”“瘫痪患者靠思维控制机械臂喝水”——这类标题在科技媒体上隔三差五就刷一次屏。但如果你真去翻过最近三年的BCI开源项目仓库、参加过几场线下开发者 meetup… · 2026/11/4 20:30:24

Skin++、SkinMagic 2.4与2.2对比:MFC老工程换肤选型与避坑
Skin++、SkinMagic 2.4与2.2对比:MFC老工程换肤选型与避坑

简介:面向使用 Visual Studio 2010 与 MFC 开发 Windows 桌面程序的开发者,这份皮肤库合集汇集 Skin 皮肤引擎以及 SkinMagic 2.4、2.2 两个版本,并附带 3 种 VC 皮肤库,主要解决传统 MFC 界面风格单一、皮肤切换与定制成本较高的… · 2026/11/4 20:30:24

FF14动画优化插件:精准压缩动作延迟至32ms
FF14动画优化插件:精准压缩动作延迟至32ms

1. 项目概述:这不是“加速器”,而是一套面向动画管线的精准外科手术“FF14动画优化插件:让副本体验提速50%”——这个标题里藏着三个极易被误解的关键点。第一,“提速50%”不是指游戏整体帧率翻倍,而是特指副本战斗中角… · 2026/11/4 20:30:24

SQL表连接查询:隐式与显式JOIN的性能与应用对比
SQL表连接查询:隐式与显式JOIN的性能与应用对比

1. 理解题目需求与数据模型 在开始编写SQL查询之前,我们需要先理解题目"产品销售分析I"的具体需求和背后的数据模型。这道题目来自力扣(LeetCode)数据库题库,编号1068,是一个典型的表连接查询问题。 题目给出了两个表:… · 2026/11/4 20:29:20

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码