• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 智能硬件 > RISC-V單片機快速入門02-移植RT_Thread Nano

    RISC-V單片機快速入門02-移植RT_Thread Nano

    作者:一葉孤沙 時間:2020-06-18 來源:知乎 收藏

    前言:

    本文引用地址:http://www.czjhyjcfj.com/article/202006/414404.htm

    上一節,我們使用Nuclei Studio IDE搭建了裸機開發環境,本節我們開始正式移植RT_Thread系統。

    一、基礎知識

    1.RT_Thread簡介

    RT-Thread是一個集實時操作系統(RTOS)內核、中間件組件和開發者社區于一體的技術平臺,由熊譜翔先生帶領并集合開源社區力量開發而成,RT-Thread也是一個組件完整豐富、高度可伸縮、簡易開發、超低功耗、高安全性的物聯網操作系統。RT-Thread具備一個IoT OS平臺所需的所有關鍵組件,例如GUI、網絡協議棧、安全傳輸、低功耗組件等等。經過11年的累積發展,RT-Thread已經擁有一個國內最大的嵌入式開源社區,同時被廣泛應用于能源、車載、醫療、消費電子等多個行業,累積裝機量超過2億臺,成為國人自主開發、國內最成熟穩定和裝機量最大的開源RTOS。

    2.RT_Thread和RT_Thread Nano區別

    RT_Thread有兩個版本,一個是RT_Thread Nano,這是一個純粹的RTOS內核,基本原理和Free RTOS、UCOSIII/UCOSII比較相似,另一個是RT_Thread完整版,完整版是在RT_Thread Nano的基礎上,增加了眾多的軟件包構成,同時支持眾多物聯網組件,是物聯網開發的利器。

    3.準備工作

    (1)裸機源碼:上一節環境搭建篇工程即可

    (2)RT_Thread Nano 3.1.3源碼: 我已經放到網盤上,也可以從官方下載

    (4)硬件:Sipeed Longan開發板

    (5)移植參考資料:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-gcc-riscv/an0042-nano-port-gcc-riscv/#nano

    二、移植步驟

    1.移植步驟概述

    (1)準備一個基礎的 NucleiStudio 工程,并獲取 RT-Thread Nano 源碼壓縮包。

    (2)在基礎工程中添加 RT-Thread Nano 源碼,添加相應頭文件路徑。

    (3)適配 Nano,主要從 中斷、時鐘、內存、應用 這幾個方面進行適配,實現移植。

    (4)最后可對 Nano 進行配置:Nano 是可裁剪的,通過配置文件 rtconfig.h 實現對系統的裁剪。

    2.獲取源碼

    下載上文準備工作中網盤資料,解壓后如下:

    3.添加Nano源碼

    在裸機代碼根目錄創建RT_Thread文件夾,將OS源碼中include、libcpu、src文件復制到其中,然后將bsp下的board.c以及rtconfig.h也放進去:

    然后刪除libcpu下面用不到的代碼,僅留risc-v/common、risc-v/bumblebee

    4.添加頭文件路徑

    右擊工程,點擊 properties 進入下圖所示界面,點擊 C/C++ Build -> settings ,分別添加匯編與 C 的頭文件路徑

    添加匯編路徑

    增加.h路徑

    5.適配 RT-Thread Nano

    RT_Thread Nano是從entry函數開始啟動,因此需要修改Start.s文件中C代碼入口函數call main為call entry。

    修改時鐘和中斷,直接將rt-thread-3.1.3/bsp/gd32vf103-blink/drivers下board.c覆蓋掉board.c即可,同時將gd32vf103v_eval.c和gd32vf103v_eval.h覆蓋掉utilites下文件中內容,主要目的是增加按鍵和串口相關函數。

    三、編譯運行

    1.編譯

    點擊左上方錘子圖標編譯,發現編譯失敗

    此時需要修改下根目錄RT_Thread為RT-Thread,然后修改配置路徑中所有RT_Thread為RT-Thread,注意匯編路徑和C路徑都需要修改。

    重新編譯

    2.修改代碼

    打開堆功能

    修改main.c內容,創建一個線程,線程中每隔500毫秒開關一次燈

    #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.運行

    點擊運行按鈕

    運行現象如下:

    可以看到指示燈循環閃爍,說明我們移植RT_Thread操作系統成功。

    寄語:自我突破第一步:從價值表達轉變為價值提供




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 视频| 松滋市| 南陵县| 昌黎县| 廊坊市| 崇仁县| 灌阳县| 浦县| 保德县| 通城县| 深州市| 文安县| 黄冈市| 福建省| 武汉市| 柘荣县| 遵义县| 聂拉木县| 罗定市| 马边| 通化市| 灵寿县| 当涂县| 屯留县| 万宁市| 白城市| 仁寿县| 榆林市| 阿克| 蒲城县| 青海省| 天台县| 托克托县| 隆昌县| 长汀县| 宁夏| 鸡泽县| 霞浦县| 安化县| 广丰县| 府谷县|