華大單片機移植RTThread-國產作業系統
文章目錄
- 華大單片機移植RTThread-國產作業系統
- 1.華大單片機型號選擇
- 2.RTThread原始碼下載
- 2.1 .資料說明
- 2.3.原始碼下載
- 3.移植程序
- 3.1.新建華大單片機最小系統工程模板,這里不展開
- 3.2.在Keil MDK加入Rtthread代碼
- 3.3添加rtthread原始碼到工程中
- 3.4 添加完成的樣子
- 3.5 移植后需要修改部分東西才能讓系統真正跑起來,,
- 4.測驗例子
- 5.最后一說:
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歷程,,反正支持國產就完事了,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/136057.html
標籤:其他
