1.由於收拾目前又華大的HC32L13x系列的晶片和開發板,因此本文章的移植過程全部基於該型號的移植。我相信其他型號華大微控制器也是類似。畢竟我就是通過stm32的例子移植成功的。
官網:https://www.rt-thread.org/document/site/ 這裡有你需要的原始碼資料以及檔案說明,非常重要建議反覆閱讀。
野火的開發檔案:我強烈推薦除了官網的檔案說明外,這本由野火出的《RT-Thread 核心實現與應用開發實戰—基於STM32》文章,具體內容可以直接到野火的論壇下載。都是免費開源的。野火的資料是我們嵌入式開發者和入門者領路人,當然正點原子也是!!!!
1.華大的工程的原始碼就不提供了,大家手上應該還是有的。
2.RTThread的已經整合在了Keil MDK,儘量安裝新版本的MDK。
參考連結:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-keil/an0039-nano-port-keil/#rt-thread-nano 官方的操作,我可能寫的沒官方好吧。。。
RT-Thread 會接管例外處理函數 HardFault_Handler()
和懸掛處理常式 PendSV_Handler()
,這兩個函數已由 RT-Thread 實現,所以需要刪除工程裡中斷服務例程檔案中的這兩個函數,避免在編譯時產生重複定義!
其實,說白了,有幾個檔案是非常重要的,改來改去都是這幾個檔案,rtconfig.h這是組態檔,因此需要開啟什麼功能,都是在這裡開啟宏定義的。第二個檔案,board.c主要放裡面存放的是與硬體相關的初始化函數,比如我們的外設初始化不再放在main函數,而是放在 rt_hw_board_init() 中,具體看下面
首先,在我們工程建立跟board.c對應的board.h檔案,方便我們將標頭檔案放到該檔案中。。下面是我的標頭檔案,參考下即可
然後將該board.c 函數 rt_hw_board_init() 修改成下面這樣
void rt_hw_board_init()
{
/* System Clock Update */
//將原來的改成這兩個,還有記得引入標頭檔案
SystemInit(); //這個是system.hc3213x.c檔案自帶的
SystemCoreClockUpdate();//這個是system.hc3213x.c檔案自帶的。
/* System Tick Configuration */
_SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
//這裡開始放我們的外設初始化函數
App_Timer0PortCfg();
User_KeyInit();
Uart_PortInit();
App_Uart0Cfg();
/* 硬體 BSP 初始化統統放在這裡,比如 LED,串列埠,LCD 等 */
/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
至此,只要在main引入
#include 「board.h」
#include 「rtthread.h」
建立幾個任務執行緒就可以跑系統了啊。。。。。
基本就可以在華大微控制器執行我們的國產RTThread作業系統了。。。
補張圖:這是rtconfig.h的部分程式碼,大概就是開啟對應的宏定義然後就可以實現對應的功能吧,目前我測試到事件而已啊。。。。然後郵箱,訊息佇列被工作任務耽擱了!!
main.c 函數
這是我自己仿照stm32的移植模式,移植的,中間由於stm32和華大不同也踩了不少坑。也是我第一次接觸作業系統和移植。所以難免寫的有點水。。。有問題可以評論提出,一起努力解決!!!加油!最後預告下,過不久應該也會出華大移植騰訊的作業系統Tencent OS 。。這個比較簡單了。因為華大和騰訊有合作所以就直接有demo歷程。。反正支援國產就完事了。。。