GD32L233C-START評(píng)測系列
兆易創(chuàng)新GD32L233系列全新低功耗MCU的最高主頻為64MHz,集成了64-256KB的嵌入式eFlash和16-32KB的SRAM,以及連接到兩條APB總線的各類增強(qiáng)型I/O和外設(shè)資源。芯片持續(xù)采用行業(yè)領(lǐng)先的Arm Cortex-M23內(nèi)核,通過精簡強(qiáng)大的Armv8-M指令集和全面優(yōu)化的總線設(shè)計(jì)帶來高效處理能力,包含獨(dú)立的乘法器和除法器,廣泛適用于工業(yè)表計(jì)、小型消費(fèi)電子設(shè)備、便攜式醫(yī)療設(shè)備、電池管理系統(tǒng)、數(shù)據(jù)采集與傳輸?shù)鹊湫褪袌觥?/p>
評(píng)測主角:GD32L233C-START 評(píng)估板 使用 GD32L233CCT6 作為主控制器,使用 GD-Link Mini USB 接口提供 5V 電源,提供包括擴(kuò)展引腳在內(nèi)的及Reset、Boot、Button key、LED、USB、USART 轉(zhuǎn) USB 接口等外設(shè)資源。下載程序到評(píng)估板需要使用 GD-Link 工具,所有例程提供了Keil 和IAR 兩個(gè)版本。
移植RT-Thread至GD32L233
本文將嘗試使用國產(chǎn)的嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread,相比較于FreeRTOS,RT-Thread還是有很多有點(diǎn)的,比如有Fish命令行界面,國產(chǎn)開源免費(fèi),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的第二篇帖子中,講解了如何創(chuàng)建一個(gè)全新的工程,本文將會(huì)在上一篇?jiǎng)?chuàng)建的工程的基礎(chǔ)上添加RT-Thread OS,觀看上一篇帖子請(qǐng)移步:http://bbs.eeworld.com.cn/thread-1192155-1-1.html
2. 點(diǎn)擊 Manage Run-Time Environment,展開RTOS,勾上kernel
3. 點(diǎn)擊OK,我們可以看到KEIL已經(jīng)自動(dòng)為我們添加了Cortex-M23相關(guān)的內(nèi)核源碼,這點(diǎn)還是很方便,很人性化的,不用我們在手動(dòng)修改了。
查看官方的文檔堆各個(gè)文件都有具體的描述:
三、修改文件適配Rt-Thread
我們需要修改HardFault_Handler()和 PendSV_Handler(),這兩個(gè)文件是由RT-Thread實(shí)現(xiàn)的,所以我們工程里面原來的這兩個(gè)函數(shù)都需要?jiǎng)h除掉,屏蔽掉這兩個(gè)函數(shù)的申明和定義:
四、修改系統(tǒng)時(shí)鐘
RT-Thread已經(jīng)為我們寫好了時(shí)鐘節(jié)拍函數(shù)rt_os_tick_callback(), 在board.c文件中,我們只需要將這個(gè)函數(shù)放置到SysTick_Handler()中即可,注意需要?jiǎng)h除SysTick_Handler()中的原有內(nèi)容。
刪除rt_hw_board_init()函數(shù)中的#error信息,這個(gè)函數(shù)在board.c文件中,其目的是提醒用戶移植的時(shí)候不要忘了心跳節(jié)拍的移植,這點(diǎn)還是很人性化的,免得移植了半天發(fā)現(xiàn)不工作。
五、修改時(shí)鐘節(jié)拍
RT-Thread為我們提供的配置文件的時(shí)鐘節(jié)拍是1000,也就是1ms,如果你想要修改心跳節(jié)拍,可以在rtconfig.h中修改這個(gè)宏RT_TICK_PER_SECOND,目前是1000,如果想修改節(jié)拍為10ms,則修改該值為10000,修改的時(shí)候最好不要直接修改rtconfig.h這個(gè)文件,因?yàn)镵EIL提供了配置界面修改,在配置界面修改安全可靠。
六、創(chuàng)建線程測試移植是否成功
經(jīng)過了上面的步驟,我們的移植已經(jīng)算是完成了,接下來就是寫程序驗(yàn)證了,像上一篇帖子一樣,我們寫兩個(gè)LED動(dòng)作的線程,LED1 100ms閃爍一次,LED2500ms閃爍一次來做對(duì)比,別忘了修改LED燈的引腳,上一篇帖子已經(jīng)說明白了,引腳不對(duì),需要我們自己修改,如下:
在main.c中寫兩個(gè)線程,如下:
#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,/*線程入口函數(shù)*/ RT_NULL,/*線程入口函數(shù)參數(shù)*/ 256, /*線程棧大小*/ 4 , /*線程優(yōu)先級(jí)*/ 20); /*線程時(shí)間片*/ led2_thr = rt_thread_create( "led2", /*線程名字*/ thread_led2_entry,/*線程入口函數(shù)*/ RT_NULL,/*線程入口函數(shù)參數(shù)*/ 256, /*線程棧大小*/ 3 , /*線程優(yōu)先級(jí)*/ 20); /*線程時(shí)間片*/ 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); }}
編譯成功下載,發(fā)現(xiàn)程序并不運(yùn)行,這是為什么呢?通過堆問題的查找,發(fā)現(xiàn)是main函數(shù)線程的堆??臻g分配的太小了,因?yàn)橄啾容^于其他嵌入式系統(tǒng),RT-Thread將main函數(shù)也做為了一個(gè)線程,我們在main函數(shù)中創(chuàng)建線程需要較大的空間,而RT-Thread給的默認(rèn)配置的main線程的堆棧空間為256,修改為512即可:
再次編譯下載,成功,后期可以使用RT-Thread來開發(fā)多線程任務(wù)了。
七、演示
原文標(biāo)題:GD32L233開發(fā)板評(píng)測 | RT-Thread操作系統(tǒng)移植
文章出處:【微信公眾號(hào):GD32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
芯片
+關(guān)注
關(guān)注
459文章
52465瀏覽量
440293 -
乘法器
+關(guān)注
關(guān)注
9文章
212瀏覽量
37951 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1402瀏覽量
41875
原文標(biāo)題:GD32L233開發(fā)板評(píng)測 | RT-Thread操作系統(tǒng)移植
文章出處:【微信號(hào):GD32MCU,微信公眾號(hào):GD32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
從安裝到使用,RT-Thread Nano最全教程看完不信你還不會(huì)使用

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

基于 Keil MDK 移植 RT-Thread Nano
如何基于CubeMX移植RT-Thread Nano?
RT-Thread Nano 簡介
基于 Keil MDK 移植 RT-Thread Nano
基于 CubeMX 移植 RT-Thread Nano
基于 IAR 移植 RT-Thread Nano
在 RT-Thread Studio 上使用 RT-Thread Nano
基于 Keil MDK 移植 RT-Thread Nano
【國產(chǎn)MCU系列】在 HK32F030 上移植 RT-Thread Nano

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

基于 Keil MDK 移植 RT-Thread Nano

評(píng)論