吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何創建RT-Thread Nano工程

GD32MCU ? 來源:GD32MCU ? 作者:GD32MCU ? 2022-03-19 12:13 ? 次閱讀

GD32L233C-START評測系列

兆易創新GD32L233系列全新低功耗MCU的最高主頻為64MHz,集成了64-256KB的嵌入式eFlash和16-32KB的SRAM,以及連接到兩條APB總線的各類增強型I/O和外設資源。芯片持續采用行業領先的Arm Cortex-M23內核,通過精簡強大的Armv8-M指令集和全面優化的總線設計帶來高效處理能力,包含獨立的乘法器和除法器,廣泛適用于工業表計、小型消費電子設備、便攜式醫療設備、電池管理系統、數據采集與傳輸等典型市場。

評測主角:GD32L233C-START 評估板 使用 GD32L233CCT6 作為主控制器,使用 GD-Link Mini USB 接口提供 5V 電源,提供包括擴展引腳在內的及Reset、Boot、Button key、LED、USB、USART 轉 USB 接口等外設資源。下載程序到評估板需要使用 GD-Link 工具,所有例程提供了Keil 和IAR 兩個版本。

移植RT-Thread至GD32L233

本文將嘗試使用國產的嵌入式實時操作系統RT-Thread,相比較于FreeRTOS,RT-Thread還是有很多有點的,比如有Fish命令行界面,國產開源免費,Nano版本代碼量極小,移植起來非常簡單(比freeRTOS移植還簡單)等,本文將講解如何將RT-Thread Nano移植到GD32L233C。

一、獲取RT-Thread基于KEIL的離線安裝包

https://www.rt-thread.org/download/mdk/RealThread.RT-Thread.3.1.5.pack

下載之后雙擊安裝即可。

二、添加RT-Thread Nano到工程

1. 打開我們自己的工程,在我的GD32L233C的第二篇帖子中,講解了如何創建一個全新的工程,本文將會在上一篇創建的工程的基礎上添加RT-Thread OS,觀看上一篇帖子請移步:http://bbs.eeworld.com.cn/thread-1192155-1-1.html

2. 點擊 Manage Run-Time Environment,展開RTOS,勾上kernel

06c78c94-a69f-11ec-952b-dac502259ad0.png

3. 點擊OK,我們可以看到KEIL已經自動為我們添加了Cortex-M23相關的內核源碼,這點還是很方便,很人性化的,不用我們在手動修改了。

06e40658-a69f-11ec-952b-dac502259ad0.png

查看官方的文檔堆各個文件都有具體的描述:

06fd03b0-a69f-11ec-952b-dac502259ad0.png

三、修改文件適配Rt-Thread

我們需要修改HardFault_Handler()和 PendSV_Handler(),這兩個文件是由RT-Thread實現的,所以我們工程里面原來的這兩個函數都需要刪除掉,屏蔽掉這兩個函數的申明和定義:

0714259a-a69f-11ec-952b-dac502259ad0.png

072e032a-a69f-11ec-952b-dac502259ad0.png

四、修改系統時鐘

RT-Thread已經為我們寫好了時鐘節拍函數rt_os_tick_callback(), 在board.c文件中,我們只需要將這個函數放置到SysTick_Handler()中即可,注意需要刪除SysTick_Handler()中的原有內容。

075c43a2-a69f-11ec-952b-dac502259ad0.png

刪除rt_hw_board_init()函數中的#error信息,這個函數在board.c文件中,其目的是提醒用戶移植的時候不要忘了心跳節拍的移植,這點還是很人性化的,免得移植了半天發現不工作。

0791d828-a69f-11ec-952b-dac502259ad0.png

五、修改時鐘節拍

RT-Thread為我們提供的配置文件的時鐘節拍是1000,也就是1ms,如果你想要修改心跳節拍,可以在rtconfig.h中修改這個宏RT_TICK_PER_SECOND,目前是1000,如果想修改節拍為10ms,則修改該值為10000,修改的時候最好不要直接修改rtconfig.h這個文件,因為KEIL提供了配置界面修改,在配置界面修改安全可靠。

07cf2584-a69f-11ec-952b-dac502259ad0.png

六、創建線程測試移植是否成功

經過了上面的步驟,我們的移植已經算是完成了,接下來就是寫程序驗證了,像上一篇帖子一樣,我們寫兩個LED動作的線程,LED1 100ms閃爍一次,LED2500ms閃爍一次來做對比,別忘了修改LED燈的引腳,上一篇帖子已經說明白了,引腳不對,需要我們自己修改,如下:

08049e3a-a69f-11ec-952b-dac502259ad0.png

在main.c中寫兩個線程,如下:

#include "gd32l23x.h"#include "systick.h"#include #include "main.h"#include "gd32l233r_eval.h"#include 

static rt_thread_t led1_thr = RT_NULL;static rt_thread_t led2_thr = RT_NULL;
static void thread_led1_entry(void *parameter);static void thread_led2_entry(void *parameter);
/*!    rief      main function    param[in]  none    param[out] none    
etval     none*/
int main(void){    /* configure systick */    systick_config();    /* initilize the LEDs, USART and key */    gd_eval_led_init(LED1);    gd_eval_led_init(LED2);
    led1_thr = rt_thread_create( "led1",     /*線程名字*/                                                      thread_led1_entry,/*線程入口函數*/                                  RT_NULL,/*線程入口函數參數*/                                  256,    /*線程棧大小*/                                  4 ,    /*線程優先級*/                                  20);   /*線程時間片*/    led2_thr = rt_thread_create( "led2",     /*線程名字*/                                                      thread_led2_entry,/*線程入口函數*/                                  RT_NULL,/*線程入口函數參數*/                                  256,    /*線程棧大小*/                                  3 ,    /*線程優先級*/                                  20);   /*線程時間片*/        rt_thread_startup (led1_thr);    rt_thread_startup (led2_thr);
    while(1)     {        rt_thread_mdelay(100);    }}
static void thread_led1_entry(void *parameter){    while (1)    {        gd_eval_led_toggle(LED1);        rt_thread_mdelay(100);    }}
static void thread_led2_entry(void *parameter){    while (1)    {        gd_eval_led_toggle(LED2);        rt_thread_mdelay(500);    }}

編譯成功下載,發現程序并不運行,這是為什么呢?通過堆問題的查找,發現是main函數線程的堆棧空間分配的太小了,因為相比較于其他嵌入式系統,RT-Thread將main函數也做為了一個線程,我們在main函數中創建線程需要較大的空間,而RT-Thread給的默認配置的main線程的堆棧空間為256,修改為512即可:

081b858c-a69f-11ec-952b-dac502259ad0.png

再次編譯下載,成功,后期可以使用RT-Thread來開發多線程任務了。

七、演示

原文標題:GD32L233開發板評測 | RT-Thread操作系統移植

文章出處:【微信公眾號:GD32MCU】歡迎添加關注!文章轉載請注明出處。

審核編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    456

    文章

    51170

    瀏覽量

    427227
  • 乘法器
    +關注

    關注

    8

    文章

    206

    瀏覽量

    37192
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40384

原文標題:GD32L233開發板評測 | RT-Thread操作系統移植

文章出處:【微信號:GD32MCU,微信公眾號:GD32MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    從安裝到使用,RT-Thread Nano最全教程看完不信你還不會使用

    RT-Thread Nano發布以來,小編收到不少開發者詢問RT-Thread Nano的配套教程實例,幸得RT-Thread開發者燕十三
    的頭像 發表于 09-26 06:39 ?5.9w次閱讀
    從安裝到使用,<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>最全教程看完不信你還不會使用

    RT-Thread Nano入門:獨立看門狗(IWDT)

    本文主要介紹怎么用RT-Thread Nano實現獨立看門狗IWDT驅動,創建一個喂狗線程,實現定時喂狗功能。
    的頭像 發表于 11-22 11:04 ?2487次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>入門:獨立看門狗(IWDT)

    基于 Keil MDK 移植 RT-Thread Nano

    基于 Keil MDK 移植 RT-Thread Nano 本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎
    發表于 03-29 06:58

    如何基于CubeMX移植RT-Thread Nano

    本文介紹了如何基于 CubeMX 移植 RT-Thread Nano,并說明生成代碼工程的步驟。RT-Thread Nano 已集成在 Cu
    發表于 03-29 06:56

    RT-Thread Nano 簡介

    基于 Nano 創建工程直接使用。以下是使用不同開發環境時,可以選擇移植或使用 Nano 的方法:在 RT-Thread Studio 上使用 RT
    發表于 05-14 10:22

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎工程作為示例進行講解。RT-Thread
    發表于 05-14 10:32

    基于 CubeMX 移植 RT-Thread Nano

    本文介紹了如何基于 CubeMX 移植 RT-Thread Nano,并說明生成代碼工程的步驟。RT-Thread Nano 已集成在 Cu
    發表于 05-14 16:09

    基于 IAR 移植 RT-Thread Nano

    本文介紹了如何基于 IAR 移植 RT-Thread Nano,并以一個 stm32f103 的基礎工程作為示例進行講解。移植 Nano 的主要步驟:準備一個基礎的 IAR
    發表于 05-18 15:40

    RT-Thread Studio 上使用 RT-Thread Nano

    本文介紹了如何在 RT-Thread Studio 上使用 RT-Thread Nano,并以創建 stm32f103RB 的 Nano
    發表于 05-18 15:59

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎工程作為示例進行講解。RT-Thread
    發表于 05-19 18:15

    【國產MCU系列】在 HK32F030 上移植 RT-Thread Nano

    如需下載相關開源資料請點擊閱讀原文這是一個航順 HK32F030 的 RT-Thread Nano 移植示例,記錄了在 Keil 裸機工程的基礎上進行 RT-Thread
    發表于 11-21 18:51 ?42次下載
    【國產MCU系列】在 HK32F030 上移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>入門學習筆記

    STM32 RT-Thread Nano(1)基于 Keil MDK 移植

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎工程作為示例進行講解。開發平臺:Keil MDK硬件平臺:XNUCLEO-F103RB
    發表于 12-02 16:06 ?13次下載
    STM32 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>(1)基于 Keil MDK 移植

    HC32F460移植RT-Thread Nano+FinSh工程源碼下載

    HC32F460移植RT-Thread Nano+FinSh工程源碼下載
    發表于 01-05 10:30 ?6次下載

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎工程作為示例進行講解。 RT-Thread
    發表于 01-26 17:04 ?16次下載
    基于 Keil MDK 移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>
    扬州市| 888真人娱乐城| 怎么看百家乐路单| 百家乐官网资深 | 百家乐官网客户端LV| 利澳娱乐城注册| 百家乐追号软件| 百家乐一般的庄闲比例是多少| 百家乐技术方式| 网上赌百家乐官网的玩法技巧和规则| 百家乐官网美食坊| 百家乐官网如何写路| 娱乐城去澳门| 大发888游戏出纳| 君怡百家乐的玩法技巧和规则| 百家乐小音箱| 百家乐游戏规测| 百家乐官网必赢| 百家乐官网网上真钱娱乐场| 百家乐官网赌博机怎么玩| 百家乐官网另类投注法| 漳浦县| 澳门网上| 博狗娱乐场| 德州扑克发牌| 大发888缺少casino组件common| 路单百家乐的玩法技巧和规则 | 六合彩开奖| 鼎丰娱乐城开户| 大发888娱乐场下载yguard | 百家乐与21点| 历史百家乐路单图| 网络百家乐| 百家乐代理在线游戏可信吗网上哪家平台信誉好安全 | 澳门百家乐游戏官网| 百家乐真人百家乐皇冠| 百家乐新注册送彩金| 最好的百家乐投注| 优博百家乐娱乐城| 百家乐如何写路| 百家乐庄闲和游戏机|