RISC-V單片機快速入門(mén)02-移植RT_Thread Nano
前言:
本文引用地址:http://dyxdggzs.com/article/202006/414404.htm上一節,我們使用芯來(lái)科技Nuclei Studio IDE搭建了裸機開(kāi)發(fā)環(huán)境,本節我們開(kāi)始正式移植RT_Thread系統。
一、基礎知識
1.RT_Thread簡(jiǎn)介
RT-Thread是一個(gè)集實(shí)時(shí)操作系統(RTOS)內核、中間件組件和開(kāi)發(fā)者社區于一體的技術(shù)平臺,由熊譜翔先生帶領(lǐng)并集合開(kāi)源社區力量開(kāi)發(fā)而成,RT-Thread也是一個(gè)組件完整豐富、高度可伸縮、簡(jiǎn)易開(kāi)發(fā)、超低功耗、高安全性的物聯(lián)網(wǎng)操作系統。RT-Thread具備一個(gè)IoT OS平臺所需的所有關(guān)鍵組件,例如GUI、網(wǎng)絡(luò )協(xié)議棧、安全傳輸、低功耗組件等等。經(jīng)過(guò)11年的累積發(fā)展,RT-Thread已經(jīng)擁有一個(gè)國內最大的嵌入式開(kāi)源社區,同時(shí)被廣泛應用于能源、車(chē)載、醫療、消費電子等多個(gè)行業(yè),累積裝機量超過(guò)2億臺,成為國人自主開(kāi)發(fā)、國內最成熟穩定和裝機量最大的開(kāi)源RTOS。
2.RT_Thread和RT_Thread Nano區別
RT_Thread有兩個(gè)版本,一個(gè)是RT_Thread Nano,這是一個(gè)純粹的RTOS內核,基本原理和Free RTOS、UCOSIII/UCOSII比較相似,另一個(gè)是RT_Thread完整版,完整版是在RT_Thread Nano的基礎上,增加了眾多的軟件包構成,同時(shí)支持眾多物聯(lián)網(wǎng)組件,是物聯(lián)網(wǎng)開(kāi)發(fā)的利器。
3.準備工作
(1)裸機源碼:上一節環(huán)境搭建篇工程即可
(2)RT_Thread Nano 3.1.3源碼: 我已經(jīng)放到網(wǎng)盤(pán)上,也可以從官方下載
(4)硬件:Sipeed Longan開(kāi)發(fā)板
二、移植步驟
1.移植步驟概述
(1)準備一個(gè)基礎的 NucleiStudio 工程,并獲取 RT-Thread Nano 源碼壓縮包。
(2)在基礎工程中添加 RT-Thread Nano 源碼,添加相應頭文件路徑。
(3)適配 Nano,主要從 中斷、時(shí)鐘、內存、應用 這幾個(gè)方面進(jìn)行適配,實(shí)現移植。
(4)最后可對 Nano 進(jìn)行配置:Nano 是可裁剪的,通過(guò)配置文件 rtconfig.h 實(shí)現對系統的裁剪。
2.獲取源碼
下載上文準備工作中網(wǎng)盤(pán)資料,解壓后如下:
3.添加Nano源碼
在裸機代碼根目錄創(chuàng )建RT_Thread文件夾,將OS源碼中include、libcpu、src文件復制到其中,然后將bsp下的board.c以及rtconfig.h也放進(jìn)去:
然后刪除libcpu下面用不到的代碼,僅留risc-v/common、risc-v/bumblebee
4.添加頭文件路徑
右擊工程,點(diǎn)擊 properties 進(jìn)入下圖所示界面,點(diǎn)擊 C/C++ Build -> settings ,分別添加匯編與 C 的頭文件路徑
添加匯編路徑
增加.h路徑
5.適配 RT-Thread Nano
RT_Thread Nano是從entry函數開(kāi)始啟動(dòng),因此需要修改Start.s文件中C代碼入口函數call main為call entry。
修改時(shí)鐘和中斷,直接將rt-thread-3.1.3/bsp/gd32vf103-blink/drivers下board.c覆蓋掉board.c即可,同時(shí)將gd32vf103v_eval.c和gd32vf103v_eval.h覆蓋掉utilites下文件中內容,主要目的是增加按鍵和串口相關(guān)函數。
三、編譯運行
1.編譯
點(diǎn)擊左上方錘子圖標編譯,發(fā)現編譯失敗
此時(shí)需要修改下根目錄RT_Thread為RT-Thread,然后修改配置路徑中所有RT_Thread為RT-Thread,注意匯編路徑和C路徑都需要修改。
重新編譯
2.修改代碼
打開(kāi)堆功能
修改main.c內容,創(chuàng )建一個(gè)線(xiàn)程,線(xiàn)程中每隔500毫秒開(kāi)關(guān)一次燈
#include "gd32vf103.h"
#include "gd32vf103c_start.h"
#include "rtthread.h"
static rt_thread_t dynamic_thread = RT_NULL;
void led_process_thread_entry(void parameter)
{
rt_err_t ret = RT_EOK;
while(1)
{
/ insert 500 ms delay /
rt_thread_mdelay(500);
/ toggle the LED /
gpio_bit_write(GPIOA, GPIO_PIN_1, (bit_status)(1-gpio_input_bit_get(GPIOA, GPIO_PIN_1)));
/ insert 500 ms delay /
rt_thread_mdelay(500);
}
}
/!
brief main function
param[in] none
param[out] none
retval none
/
int main(void)
{
/ enable the LED clock /
rcu_periph_clock_enable(RCU_GPIOA);
/ configure LED GPIO port */
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
gpio_bit_reset(GPIOA, GPIO_PIN_1);
// create iwdt_thread
dynamic_thread = rt_thread_create("led_thread", led_process_thread_entry,
RT_NULL, 512, 2, 10);
rt_thread_startup(dynamic_thread);
}
3.運行
點(diǎn)擊運行按鈕
運行現象如下:
可以看到指示燈循環(huán)閃爍,說(shuō)明我們移植RT_Thread操作系統成功。
寄語(yǔ):自我突破第一步:從價(jià)值表達轉變?yōu)閮r(jià)值提供
評論