RT-Thread Nano是一個(gè)極簡(jiǎn)版的硬實(shí)時(shí)內(nèi)核,Nano簡(jiǎn)介與下載 具體見(jiàn)官方。
介紹完官方下載地址,本篇還是以移植RT-Thread Nano到MCUXpresso IDE為主,移植的代碼可以在nxpic.org.cn論壇搜索到。稍后也會(huì)有基于MCUXpresso VSC(Visual Studio Code)的介紹文檔。
簡(jiǎn)單運(yùn)行
1.準(zhǔn)備一臺(tái)安裝有最新MCUXpresso IDE的PC和一塊FRDM-MCXA346開(kāi)發(fā)板:

2. 導(dǎo)入代碼包,運(yùn)行結(jié)果:

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

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


3.將RT-Thread Nano源代碼文件復(fù)制進(jìn)工程,并且包含進(jìn)編譯序列:



4.移除RT-Thread Nano里咱們目前平臺(tái)不需要的文件,比如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兩個(gè)目錄添加到工程的include路徑:

3.將rt-thread nano源代碼bsp\_template路徑下的rtconfig.h和board.c復(fù)制到工程的source目錄下,這里我把board.c重命名為rtt_board.c:

4.編譯后編譯器提醒有兩個(gè)錯(cuò)誤,提醒移植的時(shí)候添加必要的API:

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

6.在sourceoard.cvoid rt_hw_board_init(void)函數(shù)中添加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初始化的地方已經(jīng)做了調(diào)試串口的初始化了,并且在TODO 3里添加如下代碼:


9.將main.c的頭文件修改為:

10.將main.c核心的main代碼修改為:

11.編譯后提醒hardfault函數(shù)重復(fù)定義了,所以要把工程生成的semihost_hardfualt.c刪除掉:

12.在rtconfig.h里打開(kāi)#define RT_USING_CONSOLE宏,編譯并運(yùn)行,記得打開(kāi)串口中斷哦:

13.運(yùn)行后,發(fā)現(xiàn)會(huì)進(jìn)入Hardfault_handler()并且串口無(wú)打印。先來(lái)解決串口打印的問(wèn)題:

14.需要在startupstartup_mcxa346.c的ResetISR()函數(shù)中把main隱藏掉,用rt-thread nano的entry()替代,如下圖:
在entry()的函數(shù)里會(huì)調(diào)用rt_hw_board_init()來(lái)初始化硬件。 編譯并運(yùn)行,這時(shí)候hardfault應(yīng)該就會(huì)打印了:

15.Hard fault打印的信息,hard fault的原因本程序員找了些小時(shí)數(shù),原因是需要修改分散加載文件:

16.鼠標(biāo)右鍵工程名字,選在C/C++ Build -> Settings -> MCU Linker-> Managed Linker Script禁用Manage linker script。要手工修改下分散加載文件:

17.將如下區(qū)段加入到frdmmcxa346_rt_thread_nano_mcux_Debug.ld中,在“> PROGRAM_FLASH”區(qū)段:
--> /***************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.編譯并運(yùn)行,RT-Thread Nano就正常打印了:

恩智浦致力于打造安全的連接和基礎(chǔ)設(shè)施解決方案,為智慧生活保駕護(hù)航。
-
mcu
+關(guān)注
關(guān)注
147文章
18990瀏覽量
399703 -
NXP
+關(guān)注
關(guān)注
61文章
1399瀏覽量
198128 -
恩智浦
+關(guān)注
關(guān)注
14文章
6111瀏覽量
149116 -
nano
+關(guān)注
關(guān)注
1文章
162瀏覽量
32108 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1621瀏覽量
44959 -
FRDM
+關(guān)注
關(guān)注
1文章
22瀏覽量
5513 -
mcuxpresso
+關(guān)注
關(guān)注
1文章
46瀏覽量
4782
原文標(biāo)題:基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
恩智浦亮相RT-Thread 20周年開(kāi)發(fā)者大會(huì)
智能門(mén)鎖:基于RT-Thread與FRDM-MCXA156的多外設(shè)嵌入式實(shí)踐 | 技術(shù)集結(jié)
【直播預(yù)告】 玩轉(zhuǎn)智能控制:NXP FRDM-MCXA346 新品直播來(lái)了!| 問(wèn)學(xué)直播
NXP新品FRDM-MCXA346 RT-Thread 評(píng)測(cè)活動(dòng)開(kāi)放,下周四新品直播預(yù)約!| 社區(qū)活動(dòng)
RISC-V單片機(jī)快速入門(mén)02,移植RT_Thread Nano系統(tǒng)
恩智浦MCXA343和MCXA344通用MCU產(chǎn)品介紹
FlashDB移植到rt-thread nano,運(yùn)行時(shí)控制臺(tái)無(wú)輸出怎么解決?
移植最新版的rt-thread nano時(shí)程序進(jìn)入到entry就報(bào)錯(cuò),為什么?
RT-Thread Nano移植后動(dòng)態(tài)創(chuàng)建線程創(chuàng)建不了怎么解決?
基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植 | 技術(shù)集結(jié)
【用戶答謝】RT-Thread攜手恩智浦,邀您共筑開(kāi)源生態(tài),贏專(zhuān)屬好禮!| 社區(qū)活動(dòng)
如何移植 RT-Thread Nano 并創(chuàng)建 2 個(gè)線程?
恩智浦MCXA345/A346通用MCU產(chǎn)品介紹
RT-Thread Nano移植后動(dòng)態(tài)創(chuàng)建線程創(chuàng)建不了怎么處理?
《恩智浦FRDM-MCXA156開(kāi)發(fā)實(shí)踐指南》上線啦
恩智浦MCU教程 基于MCUXpresso和FRDM-MCXA346的RT-Thread Nano移植
評(píng)論