0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植

恩智浦MCU加油站 来源: 恩智浦MCU加油站 2025-08-21 09:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RT-Thread Nano是一个极简版的硬实时内核,Nano简介与下载 具体见官方。

介绍完官方下载地址,本篇还是以移植RT-Thread Nano到MCUXpresso IDE为主,移植的代码可以在nxpic.org.cn论坛搜索到。稍后也会有基于MCUXpresso VSC(Visual Studio Code)的介绍文档。

简单运行

1.准备一台安装有最新MCUXpresso IDE的PC和一块FRDM-MCXA346开发板:

6b23686a-7e29-11f0-a18e-92fbcf53809c.png

2. 导入代码包,运行结果:

6b4cccaa-7e29-11f0-a18e-92fbcf53809c.png

软件下载

1.RT-Thread Nano源代码下载

2.MCUXpresso SDK下载

3.MCUXpresso IDE下载

4.MCUXpresso Config Tool下载,这个不是必须的,IDE自带的也有

移植步骤

1.导入MCUXpresso SDK到MCUXpresso IDE,直接把SDK的zip包拖到这个窗口里就行:

6b5d43fa-7e29-11f0-a18e-92fbcf53809c.png

2.创建一个新工程,咱们这里就用lpuart的polling的example为模板好了,创建好后,顺手改个工程名字:

6b7bdf04-7e29-11f0-a18e-92fbcf53809c.png

6b9570a4-7e29-11f0-a18e-92fbcf53809c.png

3.将RT-Thread Nano源代码文件复制进工程,并且包含进编译序列:

6ba3be8e-7e29-11f0-a18e-92fbcf53809c.png

6bb71fec-7e29-11f0-a18e-92fbcf53809c.png

6bd3f59a-7e29-11f0-a18e-92fbcf53809c.png

4.移除RT-Thread Nano里咱们目前平台不需要的文件,比如bsp文件夹,libcpu文件夹下边的risc-v文件夹,libcpuarm文件夹下边的arm926, armv6, cortex-a, cortex-m0, cortex-m23, cortex-m3, cortex-m4, cortex-m7,cortex-r4(保留libcpuarm下的common和cortex-m33文件夹):

6bed8820-7e29-11f0-a18e-92fbcf53809c.png

5.将divsi3.S, context_iar.S, context_rvds.s, syscall_iar.S, syscall_rvds.S移除出编译序列:

6c022e92-7e29-11f0-a18e-92fbcf53809c.png

适配 RT-Thread Nanoo

1.把lpuart_polling.c改成main.c:

6c193e7a-7e29-11f0-a18e-92fbcf53809c.png

2.将rt-thread/include和rt-thread/components/finsh两个目录添加到工程的include路径:

6c2e36e0-7e29-11f0-a18e-92fbcf53809c.png

3.将rt-thread nano源代码bsp\_template路径下的rtconfig.h和board.c复制到工程的source目录下,这里我把board.c重命名为rtt_board.c:

6c461ff8-7e29-11f0-a18e-92fbcf53809c.png

4.编译后编译器提醒有两个错误,提醒移植的时候添加必要的API:

6c64a892-7e29-11f0-a18e-92fbcf53809c.png

5.将"MCXA346.h", "app.h"和"fsl_lpuart.h"添加到source/board.c文件中:

6c8e50ac-7e29-11f0-a18e-92fbcf53809c.png

6.在sourceoard.cvoid rt_hw_board_init(void)函数中添加BOARD_InitHardware();和SysTick_Config(SystemCoreClock/RT_TICK_PER_SECOND):

6ca1edd8-7e29-11f0-a18e-92fbcf53809c.png

7.在sourceoard.c中用SysTick_Handler()替换rt_os_tick_callback():

6cc69732-7e29-11f0-a18e-92fbcf53809c.png

8.隐去TODO 2和TODO 3的提醒,TODO 2在example初始化的地方已经做了调试串口的初始化了,并且在TODO 3里添加如下代码:

6cd8fdc8-7e29-11f0-a18e-92fbcf53809c.png

6cf0a220-7e29-11f0-a18e-92fbcf53809c.png

9.将main.c的头文件修改为:

6d033016-7e29-11f0-a18e-92fbcf53809c.png

10.将main.c核心的main代码修改为:

6d1cb9be-7e29-11f0-a18e-92fbcf53809c.png

11.编译后提醒hardfault函数重复定义了,所以要把工程生成的semihost_hardfualt.c删除掉:

6d35d39a-7e29-11f0-a18e-92fbcf53809c.png

12.在rtconfig.h里打开#define RT_USING_CONSOLE宏,编译并运行,记得打开串口中断哦:

6d4cd5ae-7e29-11f0-a18e-92fbcf53809c.png

13.运行后,发现会进入Hardfault_handler()并且串口无打印。先来解决串口打印的问题:

6d62bf9a-7e29-11f0-a18e-92fbcf53809c.png

14.需要在startupstartup_mcxa346.c的ResetISR()函数中把main隐藏掉,用rt-thread nano的entry()替代,如下图:

在entry()的函数里会调用rt_hw_board_init()来初始化硬件。 编译并运行,这时候hardfault应该就会打印了:

6d80aab4-7e29-11f0-a18e-92fbcf53809c.png

15.Hard fault打印的信息,hard fault的原因本程序员找了些小时数,原因是需要修改分散加载文件:

6da8b7c0-7e29-11f0-a18e-92fbcf53809c.png

16.鼠标右键工程名字,选在C/C++ Build -> Settings -> MCU Linker-> Managed Linker Script禁用Manage linker script。要手工修改下分散加载文件:

6dbdc070-7e29-11f0-a18e-92fbcf53809c.png

17.将如下区段加入到frdmmcxa346_rt_thread_nano_mcux_Debug.ld中,在“> PROGRAM_FLASH”区段:

-->
/***************RTOS
add**********************/
    /* section information for finsh shell*/
    . = ALIGN(4);
    __fsymtab_start = .;
    KEEP(*(FSymTab))
    __fsymtab_end = .;
    . = ALIGN(4);
    __vsymtab_start = .;
    KEEP(*(VSymTab))
    __vsymtab_end = .;
    . = ALIGN(4);
    /* section information for utest*/
    . = ALIGN(4);
    __rt_utest_tc_tab_start = .;
    KEEP(*(UtestTcTab))
    __rt_utest_tc_tab_end = .;
    /* section information for at server */
    . = ALIGN(4);
    __rtatcmdtab_start = .;
    KEEP(*(RtAtCmdTab))
    __rtatcmdtab_end = .;
    . = ALIGN(4);
    /* section information for initial.*/
    . = ALIGN(4);
    __rt_init_start = .;
    KEEP(*(SORT(.rti_fn*)))
    __rt_init_end = .;
    . = ALIGN(4);
  /* section information for modules */
  . = ALIGN(4);
  __rtmsymtab_start = .;
  KEEP(*(RTMSymTab))
  __rtmsymtab_end = .;
    . = ALIGN(4);
    PROVIDE(__ctors_start__ = .);
    KEEP (*(SORT(.init_array.*)))
    KEEP (*(.init_array))
    PROVIDE(__ctors_end__ = .);
        . = ALIGN(4);

6dd786ae-7e29-11f0-a18e-92fbcf53809c.png

18.编译并运行,RT-Thread Nano就正常打印了:

6df7b528-7e29-11f0-a18e-92fbcf53809c.png

恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19223

    浏览量

    405087
  • NXP
    NXP
    +关注

    关注

    61

    文章

    1413

    浏览量

    199520
  • 恩智浦
    +关注

    关注

    14

    文章

    6141

    浏览量

    155273
  • nano
    +关注

    关注

    1

    文章

    162

    浏览量

    32297
  • RT-Thread
    +关注

    关注

    32

    文章

    1654

    浏览量

    45402
  • FRDM
    +关注

    关注

    1

    文章

    23

    浏览量

    5955
  • mcuxpresso
    +关注

    关注

    1

    文章

    46

    浏览量

    4824

原文标题:基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深圳 | 来FRDM实验室,免费领开发板,把RT-Thread实践带回家!

    RT-Thread长期深度共建,已完成多系列芯片的BSP适配与系统优化,赋能开发者高效构建工业与物联网应用。2026年5月13日(下周三),来深圳参加
    的头像 发表于 05-09 16:39 1434次阅读
    深圳 | 来<b class='flag-5'>恩</b>智<b class='flag-5'>浦</b><b class='flag-5'>FRDM</b>实验室,免费领开发板,把<b class='flag-5'>RT-Thread</b>实践带回家!

    【免费申请】NXP新成员FRDM-MCXA366 评测活动 | 社区活动

    开发者高效完成从评估到落地的完整开发流程。半导体已对MCXA366MCU进行了RT-Thread的适配。RT-Thread携手
    的头像 发表于 04-09 18:25 444次阅读
    【免费申请】NXP新成员<b class='flag-5'>FRDM-MCXA</b>366 评测活动 | 社区活动

    亮相RT-Thread 20周年开发者大会

    日前,“开源向实·生产力进化启示录”全球峰会暨RT-Thread 20周年开发者大会在上海成功举办,作为RT-Thread的紧密合作伙伴,在活动中重磅亮相,展示双方在共建
    的头像 发表于 01-26 09:07 838次阅读

    智能门锁:基于RT-ThreadFRDM-MCXA156的多外设嵌入式实践 | 技术集结

    本项目为RT-Thread嵌入式大赛获奖作品,基于MCXA156系列微控制器构建了一款多功能智能门锁控制系统。目前,
    的头像 发表于 01-23 11:06 8889次阅读
    智能门锁:基于<b class='flag-5'>RT-Thread</b>与<b class='flag-5'>FRDM-MCXA</b>156的多外设嵌入式实践 | 技术集结

    【直播预告】 玩转智能控制:NXP FRDM-MCXA346 新品直播来了!| 问学直播

    带你深入解析架构演进、生态支持与实际开发流程,并同步开放FRDM-MCXA346官方评测招募,帮助大家零门槛体验新品。在双方合作下,RT-Thread已完成对FR
    的头像 发表于 11-17 18:24 842次阅读
    【直播预告】 玩转智能控制:NXP <b class='flag-5'>FRDM-MCXA346</b> 新品直播来了!| 问学直播

    NXP新品FRDM-MCXA346 RT-Thread 评测活动开放,下周四新品直播预约!| 社区活动

    应用开发。RT-Thread社区已率先完成对NXPFRDM-MCXA346的系统支持,并携手半导体联合发起FRDM-MCXA346开发
    的头像 发表于 11-14 15:59 1977次阅读
    NXP新品<b class='flag-5'>FRDM-MCXA346</b> <b class='flag-5'>RT-Thread</b> 评测活动开放,下周四新品直播预约!| 社区活动

    RISC-V单片机快速入门02,移植RT_Thread Nano系统

    -port-gcc-riscv/an0042-nano-port-gcc-riscv/#nano 二、移植步骤 1.移植步骤概述 (1)准备一个基础的 NucleiStudio 工程,
    发表于 11-10 07:23

    MCXA343和MCXA344通用MCU产品介绍

    既8月份发布了MCXA345和MCXA346两款产品后,10月份咱们发布MCXA343和MCXA344通用MCU,主打带CAN-FD的低成本
    的头像 发表于 10-22 09:55 2919次阅读
    <b class='flag-5'>恩</b>智<b class='flag-5'>浦</b><b class='flag-5'>MCXA</b>343和<b class='flag-5'>MCXA</b>344通用<b class='flag-5'>MCU</b>产品介绍

    移植最新版的rt-thread nano时程序进入到entry就报错,为什么?

    我在移植最新版的rt-thread nano时发现程序只要一进去entry函数就直接跳到一个死循环里,我使用的编译器是armgcc10.2版本。然而我移植旧版的
    发表于 10-09 07:17

    RT-Thread Nano移植后动态创建线程创建不了怎么解决?

    RT-Thread Nano 移植后动态创建线程创建不了,静态可以.直接烧录DEMO也一样,将RT_USING_HEAP开起来,使用动态创建就创建不起来,
    发表于 09-19 06:28

    基于MCUXpressoFRDM-MCXA346RT-Thread Nano移植 | 技术集结

    RT-ThreadNano是一个极简版的硬实时内核
    的头像 发表于 08-22 17:07 4135次阅读
    基于<b class='flag-5'>MCUXpresso</b>和<b class='flag-5'>FRDM-MCXA346</b>的<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>移植</b> | 技术集结

    【用户答谢】RT-Thread携手,邀您共筑开源生态,赢专属好礼!| 社区活动

    亲爱的嵌入式开发者伙伴们:在RT-Thread携手同行的数载春秋里,双方始终致力于为开发者打造更优质的嵌入式开发体验,推动技术创新与应用落地,每一步成长都离不开各位开发者的信任与支持
    的头像 发表于 08-22 17:07 1004次阅读
    【用户答谢】<b class='flag-5'>RT-Thread</b>携手<b class='flag-5'>恩</b>智<b class='flag-5'>浦</b>,邀您共筑开源生态,赢专属好礼!| 社区活动

    如何移植 RT-Thread Nano 并创建 2 个线程?

    基于 BSP 中的 GPIO_OutputInput 演示,展示了如何移植 RT-Thread Nano 并创建 2 个线程。
    发表于 08-19 07:45

    MCXA345/A346通用MCU产品介绍

    近日,发布了MCXA345/A346通用MCU,一颗主打混合信号(ADC输入通道多达82个)并且适用于电机控制的通用
    的头像 发表于 08-13 11:42 6201次阅读
    <b class='flag-5'>恩</b>智<b class='flag-5'>浦</b><b class='flag-5'>MCXA</b>345/A<b class='flag-5'>346</b>通用<b class='flag-5'>MCU</b>产品介绍

    RT-Thread Nano移植后动态创建线程创建不了怎么处理?

    RT-Thread Nano移植后动态创建线程创建不了,静态可以.直接烧录DEMO也一样,将RT_USING_HEAP开起来,使用动态创建就创建不起来,
    发表于 06-11 06:36