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

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

3天内不再提示

基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植 | 技术集结

RT-Thread官方账号 ? 2025-08-22 17:07 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RT-Thread Nano是一个极简版的硬实时内核,具体介绍见官方链接:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction

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

目录


简单运行


软件下载


移植步骤


适配 RT-Thread Nanoo

1 简单运行


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

66a3e544-7f37-11f0-9080-92fbcf53809c.png

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

66bc3c3e-7f37-11f0-9080-92fbcf53809c.png

2 软件下载


1. RT-Thread Nano源代码下载

2. MCUXpresso SDK下载

3. MCUXpresso IDE下载

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

3 移植步骤


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

66c5f30a-7f37-11f0-9080-92fbcf53809c.png

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

66d81e9a-7f37-11f0-9080-92fbcf53809c.png66e73e48-7f37-11f0-9080-92fbcf53809c.png

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

66fa1e50-7f37-11f0-9080-92fbcf53809c.png6706ffe4-7f37-11f0-9080-92fbcf53809c.png6717f18c-7f37-11f0-9080-92fbcf53809c.png

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

6725ab10-7f37-11f0-9080-92fbcf53809c.png

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

67395480-7f37-11f0-9080-92fbcf53809c.png

4 适配 RT-Thread Nano


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

674b92bc-7f37-11f0-9080-92fbcf53809c.png

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

675e72c4-7f37-11f0-9080-92fbcf53809c.png

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

676d808e-7f37-11f0-9080-92fbcf53809c.png

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

6783b1a6-7f37-11f0-9080-92fbcf53809c.png

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

6794aee8-7f37-11f0-9080-92fbcf53809c.png

6. 在source\board.c void rt_hw_board_init(void)函数中添加BOARD_InitHardware(); 和 SysTick_Config(SystemCoreClock/RT_TICK_PER_SECOND):

67aac0c0-7f37-11f0-9080-92fbcf53809c.png

7. 在source\board.c中用SysTick_Handler()替换rt_os_tick_callback():

67be2a3e-7f37-11f0-9080-92fbcf53809c.png

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

67d633ae-7f37-11f0-9080-92fbcf53809c.png67e1d1f0-7f37-11f0-9080-92fbcf53809c.png

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

67f8010a-7f37-11f0-9080-92fbcf53809c.png

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

680d6752-7f37-11f0-9080-92fbcf53809c.png

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

68255ce0-7f37-11f0-9080-92fbcf53809c.png

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

683a4e0c-7f37-11f0-9080-92fbcf53809c.png

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

685335f2-7f37-11f0-9080-92fbcf53809c.png

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

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

686b2428-7f37-11f0-9080-92fbcf53809c.png

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

68837d84-7f37-11f0-9080-92fbcf53809c.png

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

68969be4-7f37-11f0-9080-92fbcf53809c.png

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

-->/***************RTOSadd**********************/ /* 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);

68a57e0c-7f37-11f0-9080-92fbcf53809c.png

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

68b2e510-7f37-11f0-9080-92fbcf53809c.png

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

    关注

    147

    文章

    18107

    浏览量

    371536
  • IDE
    IDE
    +关注

    关注

    0

    文章

    355

    浏览量

    47959
  • RT-Thread
    +关注

    关注

    32

    文章

    1444

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    恩智浦MCU教程 基于MCUXpressoFRDM-MCXA346RT-Thread Nano移植

    本篇还是以移植RT-Thread NanoMCUXpresso IDE为主,移植的代码可以在nxpic.org.cn论坛搜索到。
    的头像 发表于 08-21 09:49 ?1008次阅读
    恩智浦MCU教程 基于<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 nano到CW32L083

    移植RT-Thread Nano到CW32L083开发板上,并成功运行。
    的头像 发表于 07-03 09:04 ?2.3w次阅读
    <b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b> <b class='flag-5'>nano</b>到CW32L083

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(上)

    RT-Thread 是国人自主研发的开源实时操作系统(RTOS),RT-Thread Nano 是极简版的硬实时内核,内存占用小,移植简单。VGLite 是 NXP 提供的轻量级 2D
    的头像 发表于 11-09 11:20 ?3668次阅读
    i.MX <b class='flag-5'>RT</b>1170:VGLite<b class='flag-5'>移植</b><b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>过程讲解(上)

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(下)

    上篇介绍了如何移植 RT-Thread Nano 内核与 Finsh 控制台到 RT1170。本篇继续介绍如何将 NXP 官方的 VGLite API
    的头像 发表于 11-09 11:22 ?1484次阅读

    如何基于CubeMX移植RT-Thread Nano

    本文介绍了如何基于 CubeMX 移植 RT-Thread Nano,并说明生成代码工程的步骤。RT-Thread Nano 已集成在 Cu
    发表于 03-29 06:56

    【国产MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano

    【国产MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano
    发表于 11-18 18:51 ?67次下载
    【国产MCU<b class='flag-5'>移植</b>】HC32F460基于Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    【国产MCU系列】在 HK32F030 上移植 RT-Thread Nano

    如需下载相关开源资料请点击阅读原文这是一个航顺 HK32F030 的 RT-Thread Nano 移植示例,记录了在 Keil 裸机工程的基础上进行 RT-Thread
    发表于 11-21 18:51 ?42次下载
    【国产MCU系列】在 HK32F030 上<b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    STM32 RT-Thread Nano(1)基于 Keil MDK 移植

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。开发平台:Keil MDK硬件平台:XNUCLEO-F103RB
    发表于 12-02 16:06 ?13次下载
    STM32 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>(1)基于 Keil MDK <b class='flag-5'>移植</b>

    HC32F460移植RT-Thread Nano+FinSh工程源码下载

    HC32F460移植RT-Thread Nano+FinSh工程源码下载
    发表于 01-05 10:30 ?6次下载

    【国产MCU系列】在 HK32F030 上移植 RT-Thread Nano

    这是一个航顺 HK32F030 的 RT-Thread Nano 移植示例,记录了在 Keil 裸机工程的基础上进行 RT-Thread Nano
    发表于 01-25 17:42 ?4次下载
    【国产MCU系列】在 HK32F030 上<b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    基于 Keil MDK 移植 RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。 RT-Thread
    发表于 01-26 17:04 ?17次下载
    基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    如何创建RT-Thread Nano工程

    本文将尝试使用国产的嵌入式实时操作系统RT-Thread,相比较于FreeRTOS,RT-Thread还是有很多有点的,比如有Fish命令行界面,国产开源免费,Nano版本代码量极小,移植
    的头像 发表于 03-19 12:13 ?4621次阅读

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 ?9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与<b class='flag-5'>移植</b>

    基于恩智浦FRDM-MCXA153开发板实现RT-Thread的ADC驱动

    数转换器(ADC)是现代嵌入式系统中不可或缺的组件,它能将连续的模拟信号转换为离散的数字信号。本文将深入探讨如何在NXP的FRDM-MCXA153开发板上实现和使用RT-Thread的ADC驱动,为开发者提供一个全面而实用的指南。
    的头像 发表于 11-01 12:29 ?2208次阅读
    基于恩智浦<b class='flag-5'>FRDM-MCXA</b>153开发板实现<b class='flag-5'>RT-Thread</b>的ADC驱动

    免费申请 | FRDM-MCXA156评测活动发布!

    RT-Thread现已支持恩智浦官方推出的FRDM-MCXA156开发板并提供BSP!为了让大家更好地体验MCXA156高能效微控制器的魅力,RT-Thread携手恩智浦半导体,隆重推
    的头像 发表于 02-10 18:45 ?500次阅读
    免费申请 | <b class='flag-5'>FRDM-MCXA</b>156评测活动发布!