RT-Thread Nano是一个极简版的硬实时内核,Nano简介与下载 具体见官方。
介绍完官方下载地址,本篇还是以移植RT-Thread Nano到MCUXpresso IDE为主,移植的代码可以在nxpic.org.cn论坛搜索到。稍后也会有基于MCUXpresso VSC(Visual Studio Code)的介绍文档。
简单运行
1.准备一台安装有最新MCUXpresso IDE的PC和一块FRDM-MCXA346开发板:
2. 导入代码包,运行结果:
软件下载
1.RT-Thread Nano源代码下载
2.MCUXpresso SDK下载
3.MCUXpresso IDE下载
4.MCUXpresso Config Tool下载,这个不是必须的,IDE自带的也有
移植步骤
1.导入MCUXpresso SDK到MCUXpresso IDE,直接把SDK的zip包拖到这个窗口里就行:
2.创建一个新工程,咱们这里就用lpuart的polling的example为模板好了,创建好后,顺手改个工程名字:
3.将RT-Thread Nano源代码文件复制进工程,并且包含进编译序列:
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文件夹):
5.将divsi3.S, context_iar.S, context_rvds.s, syscall_iar.S, syscall_rvds.S移除出编译序列:
适配 RT-Thread Nanoo
1.把lpuart_polling.c改成main.c:
2.将rt-thread/include和rt-thread/components/finsh两个目录添加到工程的include路径:
3.将rt-thread nano源代码bsp\_template路径下的rtconfig.h和board.c复制到工程的source目录下,这里我把board.c重命名为rtt_board.c:
4.编译后编译器提醒有两个错误,提醒移植的时候添加必要的API:
5.将"MCXA346.h", "app.h"和"fsl_lpuart.h"添加到source/board.c文件中:
6.在sourceoard.cvoid rt_hw_board_init(void)函数中添加BOARD_InitHardware();和SysTick_Config(SystemCoreClock/RT_TICK_PER_SECOND):
7.在sourceoard.c中用SysTick_Handler()替换rt_os_tick_callback():
8.隐去TODO 2和TODO 3的提醒,TODO 2在example初始化的地方已经做了调试串口的初始化了,并且在TODO 3里添加如下代码:
9.将main.c的头文件修改为:
10.将main.c核心的main代码修改为:
11.编译后提醒hardfault函数重复定义了,所以要把工程生成的semihost_hardfualt.c删除掉:
12.在rtconfig.h里打开#define RT_USING_CONSOLE宏,编译并运行,记得打开串口中断哦:
13.运行后,发现会进入Hardfault_handler()并且串口无打印。先来解决串口打印的问题:
14.需要在startupstartup_mcxa346.c的ResetISR()函数中把main隐藏掉,用rt-thread nano的entry()替代,如下图:
在entry()的函数里会调用rt_hw_board_init()来初始化硬件。 编译并运行,这时候hardfault应该就会打印了:
15.Hard fault打印的信息,hard fault的原因本程序员找了些小时数,原因是需要修改分散加载文件:
16.鼠标右键工程名字,选在C/C++ Build -> Settings -> MCU Linker-> Managed Linker Script禁用Manage linker script。要手工修改下分散加载文件:
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);
18.编译并运行,RT-Thread Nano就正常打印了:
恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。
-
mcu
+关注
关注
146文章
18097浏览量
371361 -
恩智浦
+关注
关注
14文章
6002浏览量
120291 -
nano
+关注
关注
1文章
160浏览量
31280 -
RT-Thread
+关注
关注
32文章
1441浏览量
42361 -
FRDM
+关注
关注
1文章
18浏览量
3762 -
mcuxpresso
+关注
关注
1文章
46浏览量
4539
原文标题:基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植
文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
如何移植 RT-Thread Nano 并创建 2 个线程?
RT-Thread Nano移植后动态创建线程创建不了怎么处理?
移植最新版的rt-thread nano时发现程序只要一进去entry函数就直接跳到一个死循环里,为什么?
如何将RT-Thread移植到NXP MCUXPressoIDE上

恩智浦携手RT-Thread全力赋能智能工业与物联网新时代

使用恩智浦无线FRDM开发板实现创新无线解决方案

恩智浦FRDM-MCXA153 RT-Thread开发实战(六):I2C总线开发与应用

恩智浦FRDM-MCXA153 RT-Thread实践指南 实现和优化RT-Thread的SPI驱动

RT-Thread上CAN实践

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

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

NXP FRDM-MCXC444开发板在RT-Thread环境下的上手过程

评论