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開發板:

2. 導入代碼包,運行結果:

2 軟件下載
1. RT-Thread Nano源代碼下載
2. MCUXpresso SDK下載
3. MCUXpresso IDE下載
4. MCUXpresso Config Tool下載,這個不是必須的, IDE自帶的也有
3 移植步驟
1. 導入MCUXpresso SDK到MCUXpresso IDE,直接把SDK的zip包拖到這個窗口里就行:

2. 創建一個新工程,咱們這里就用lpuart的polling的example為模板好了,創建好后,順手改個工程名字:


3. 將RT-Thread Nano源代碼文件復制進工程,并且包含進編譯序列:



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文件夾):

5. 將divsi3.S, context_iar.S, context_rvds.s, syscall_iar.S, syscall_rvds.S 移除出編譯序列:

4 適配 RT-Thread Nano
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. 在source\board.c void rt_hw_board_init(void)函數中添加BOARD_InitHardware(); 和 SysTick_Config(SystemCoreClock/RT_TICK_PER_SECOND):

7. 在source\board.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. 需要在startup\startup_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”區段:
-->/***************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);

18. 編譯并運行,RT-Thread Nano就正常打印了:

-
mcu
+關注
關注
147文章
18669瀏覽量
388931 -
IDE
+關注
關注
0文章
364瀏覽量
48767 -
RT-Thread
+關注
關注
32文章
1551瀏覽量
44349
發布評論請先 登錄
恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植
i.MX RT1170:VGLite移植RT-Thread Nano過程講解(上)
i.MX RT1170:VGLite移植RT-Thread Nano過程講解(下)
【國產MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano
【國產MCU系列】在 HK32F030 上移植 RT-Thread Nano
STM32 RT-Thread Nano(1)基于 Keil MDK 移植
【國產MCU系列】在 HK32F030 上移植 RT-Thread Nano
基于 Keil MDK 移植 RT-Thread Nano
如何創建RT-Thread Nano工程
免費申請 | FRDM-MCXA156評測活動發布!
NXP新品FRDM-MCXA346 RT-Thread 評測活動開放,下周四新品直播預約!| 社區活動
【直播預告】 玩轉智能控制:NXP FRDM-MCXA346 新品直播來了!| 問學直播

基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植 | 技術集結
評論