基於 Keil MDK 移植 RT-Thread Nano


后文rtt代表RT-Thread

在官網公眾號中,看到rtt發布了rtt nano,這個就很輕量級的rtos內核,把多余的驅動都裁剪了,因此移植工作量小,可以哪來學習一番,體驗rtt之美

rtt現在也集成到cubemx5.0以上的平台,類似於freertos中間件,這個做法,倒是有點類似於大廠的風格了,看好rtt。

在keil5中,有兩種方法可以移植rtt nano。
前提條件是:cubemx生成一個最小的裸機led系統。
MRTE的方法,
1、這個需要下載pack包RealThread::RT-Thread,keil有很多類似的第三方包,有ucos,freertos(這個比官網更新的都快,厲害了我的keil)rtx還是keil自帶的免費rtos,這個我之前也有移植文檔,也是很方便的。
安裝好之后,左上方的寫的小正方形,里面的rtos里面有很多選項。之前一直找不到, 是rtt的技術支持微信親自指點的。因此需要注意。

我的選擇如下:

其他的你也看到, 集成有很多rtos。

 2、之后編譯,會出現很多錯誤(重復定義之類),可以看到rtt的官網上,已經提到了,需要把很多中斷Handler()注釋掉,因為rtt自己已經實現了很多中斷函數。

3、添加<rtthread.h>,把hal_delay()替換成rtt的延時函數,再次編譯,即可一次成功。

源文件移植方法:
1、在現有的裸機工程中,添加rtt nano的3.1.3源碼。注意也有rtt3.1.3的完整版,完整版的代碼就很大了。我們使用namo版本,兩個版本官網都可以下載。
2、依照官網的說明,把源文件拷貝到工程目錄中,逐次添加c文件,.s文件,s文件是編譯器有區別的,iar gcc rdvs三種。c文件都是一樣的,因此移植工作很簡單。 

3、把重復定義的,需要注釋相關中斷,因為rtt已經實現了。
4、魔術棒里面,添加c的頭文件路徑。添加<rtthread.h>,把hal_delay()替換成rtt的延時函數,再次編譯,即可一次成功。
5、編譯,運行。

這里講講幾個細節:
1、首先rtt默認不使用heap,這樣可以保持1一個較小的體積,不用為內存堆開辟空間。開啟系統 heap 將可以使用動態內存功能,如使用 rt_malloc、rt_free 以及各種系統動態創建對象的 API。
這個可以比較好的理解。就相當於把rtt當作一個靜態生成任務,適合新手,在freertos中,我們通常使用heap4.c的內存管理,使用動態的方式來創建任務的,rtt也是可以的,需要開啟宏定義。細節可以參考官網文檔。
2、配置文件,這個類似於之前用過的nrf的工程,用作系統裁剪。其實就是.h文件,符合keil的規范,當然iar里面是只能修改代碼的。編譯器ide的差別。
3、裸機中的main函數,經過移值以后,變成了main線程。這個是比較聰明的方法,在其他公眾號中,我看到了他的實現原理,可以單步仿真試試他到底是怎么運行的。說白了,在main線程運行之前,就已經作了一些代碼操作,如初始化工作,時鍾滴答等等,還可以把一定硬件初始化放到rtt寫的代碼中。
4、后面就可以自己在main線程中,再根據需求創建新的線程。

參考文檔:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-keil/an0039-nano-port-keil/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM