華大微控制器移植RTThread作業系統

2020-09-28 12:02:04

華大微控制器移植RTThread-國產作業系統

1.華大微控制器型號選擇

1.由於收拾目前又華大的HC32L13x系列的晶片和開發板,因此本文章的移植過程全部基於該型號的移植。我相信其他型號華大微控制器也是類似。畢竟我就是通過stm32的例子移植成功的。

2.RTThread原始碼下載

2.1 .資料說明

官網:https://www.rt-thread.org/document/site/ 這裡有你需要的原始碼資料以及檔案說明,非常重要建議反覆閱讀。

野火的開發檔案:我強烈推薦除了官網的檔案說明外,這本由野火出的《RT-Thread 核心實現與應用開發實戰—基於STM32》文章,具體內容可以直接到野火的論壇下載。都是免費開源的。野火的資料是我們嵌入式開發者和入門者領路人,當然正點原子也是!!!!

2.3.原始碼下載

1.華大的工程的原始碼就不提供了,大家手上應該還是有的。

2.RTThread的已經整合在了Keil MDK,儘量安裝新版本的MDK。

3.移植過程

3.1.新建華大微控制器最小系統工程模板,這裡不展開

3.2.在Keil MDK加入Rtthread程式碼

參考連結:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-keil/an0039-nano-port-keil/#rt-thread-nano 官方的操作,我可能寫的沒官方好吧。。。
在這裡插入圖片描述

3.3新增rtthread原始碼到工程中

在這裡插入圖片描述

3.4 新增完成的樣子

在這裡插入圖片描述

3.5 移植後需要修改部分東西才能讓系統真正跑起來。。

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的部分程式碼,大概就是開啟對應的宏定義然後就可以實現對應的功能吧,目前我測試到事件而已啊。。。。然後郵箱,訊息佇列被工作任務耽擱了!!

4.測試例子

main.c 函數
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

5.最後一說:

這是我自己仿照stm32的移植模式,移植的,中間由於stm32和華大不同也踩了不少坑。也是我第一次接觸作業系統和移植。所以難免寫的有點水。。。有問題可以評論提出,一起努力解決!!!加油!最後預告下,過不久應該也會出華大移植騰訊的作業系統Tencent OS 。。這個比較簡單了。因為華大和騰訊有合作所以就直接有demo歷程。。反正支援國產就完事了。。。