本文是在keil中給梁山派移植RT-Thread Nano版本
之所以使用Nano版本,是因為暫時對軟件包沒什么需求,只是想使用RT-Thread的內(nèi)核,而Nano版本正好滿足我目前的需求,所以最后選擇Nano版本進(jìn)行移植。
下面是Nano版本的簡介
先給文件,文件信息如下
移植步驟如下:
1、準(zhǔn)備好一份梁山派的例程文件,在上面的壓縮包中已經(jīng)給出
2、在keil上安裝RT-Thread Nano Pack(如果已安裝,直接進(jìn)入下一步)
有兩種方式,在keil在線下載,或離線安裝,我個人推薦離線安裝,畢竟我從沒在keil中安裝成功過
3、將RT-Thread Nano添加到工程中
打開一個梁山派的例程,我上面打包好的庫函數(shù)點(diǎn)燈的程序就可以,然后如圖勾選點(diǎn)確認(rèn)即可
可以看到RT-Thread Nano已經(jīng)添加到工程中去,別看文件很多,可我們需要且能修改的文件也只有board.c和rtconfig.h這兩個文件
4、系統(tǒng)時鐘配置
打開board.c文件,有兩個函數(shù)需要我們處理,分別是rt_os_tick_callback和rt_hw_board_init,一個負(fù)責(zé)系統(tǒng)調(diào)度(提供節(jié)拍),一個負(fù)責(zé)系統(tǒng)初始化
4.1首先是rt_hw_board_init,我們先將其擴(kuò)展出去,使其能夠被其他文件調(diào)用,在rtconfig.h中添加如下代碼
extern void rt_os_tick_callback(void);
然后將其放到滴答定時器中斷服務(wù)函數(shù)中,該服務(wù)函數(shù)在gd32f4xx_it.c文件中,如下圖所示(須在該.c文件中添加對應(yīng)頭文件,如下第二張圖所示)
需要注意的是,這個滴答定時器進(jìn)入中斷的周期應(yīng)為1ms,而在本程序中滴答定時器的周期正是1ms,所以無需修改,該周期的配置在systick.c文件中的systick_config函數(shù)中修改,該函數(shù)正是滴答定時器的初始化配置函數(shù)
4.2然后是rt_hw_board_init,這個函數(shù)我個人理解是負(fù)責(zé)系統(tǒng)初始化的函數(shù),該函數(shù)的配置只需要將下圖中選中的部分刪去即可
5、最后處理
此時移植已經(jīng)基本完成,但如果我們點(diǎn)擊編譯,會發(fā)現(xiàn)還是會報兩個錯,如下圖所示
原因是RT-Thread 會接管異常處理函數(shù) HardFault_Handler() 和懸掛處理函數(shù) PendSV_Handler(),而在gd32f4xx_it.c已經(jīng)對這兩個函數(shù)進(jìn)行了定義,相當(dāng)于沖突了,所以我們刪去gd32f4xx_it.c中的這兩個函數(shù)即可
刪去后編譯0錯誤0警告
以上就是移植的全過程
搞個例程試一下
將main函數(shù)中的初始化函數(shù)放到board.c文件中的rt_hw_board_init函數(shù)里(注意在board.c引用相應(yīng)頭文件)
將如下代碼對main.c中的代碼進(jìn)行替換
/********************************************************************************
- 文 件 名: main.c
- 版 本 號: 初版
- 修改作者: LC
- 修改日期: 2022年04月12日
- 功能介紹:
注意事項:
**********************************/
#include "gd32f4xx.h"
#include "systick.h"
#include
#include "main.h"
#include "bsp_led.h"
#include
#define THREAD_PRIORITY 25
#define THREAD_STACK_SIZE 512
#define THREAD_TIMESLICE 5
/ 線 程 入 口 /
void thread1_entry(void parameter)
{
while(1)
{
gpio_bit_toggle(PORT_LED1,PIN_LED1);
gpio_bit_toggle(PORT_LED2,PIN_LED2);
rt_thread_mdelay(1000);
}
}
/
函數(shù)名稱 : main
功 能 : 主函數(shù)
參 數(shù) : 無
返 回 值 : 無
作 者 : LC
************************************************/
int main(void)
{
rt_thread_t tid = RT_NULL;
/ 創(chuàng) 建 線 程 1 */
tid = rt_thread_create("thread1",
thread1_entry, RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE);
if (tid != RT_NULL)
rt_thread_startup(tid);
while(1) {
gpio_bit_toggle(PORT_LED3,PIN_LED3);
gpio_bit_toggle(PORT_LED4,PIN_LED4);
rt_thread_mdelay(1000);
}
}
編譯后無錯
最終實(shí)現(xiàn)效果:
實(shí)現(xiàn)梁山派的四個小燈以1s間隔進(jìn)行閃爍
實(shí)現(xiàn)線程調(diào)度和rtt延時函數(shù)
-
處理器
+關(guān)注
關(guān)注
68文章
19440瀏覽量
231334 -
GPIO
+關(guān)注
關(guān)注
16文章
1217瀏覽量
52447 -
定時器中斷
+關(guān)注
關(guān)注
0文章
49瀏覽量
11267 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1306瀏覽量
40437 -
GD32F450
+關(guān)注
關(guān)注
1文章
11瀏覽量
6675
發(fā)布評論請先 登錄
相關(guān)推薦
梁山派GD32F450/470-RT-Thread Nano移植(三)
![<b class='flag-5'>梁山</b><b class='flag-5'>派</b><b class='flag-5'>GD32F450</b>/<b class='flag-5'>470-RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>移植</b>(三)](https://file1.elecfans.com/web2/M00/A6/2B/wKgaomUSfjOALoj-AAC-yiTtpLA961.jpg)
rt-thread studio新建gd32f450工程
![<b class='flag-5'>rt-thread</b> studio新建<b class='flag-5'>gd32f450</b>工程](https://file1.elecfans.com/web2/M00/A8/3C/wKgZomUVGdOAYf0nAAA7IhChdVk391.jpg)
移植RT-Thread操作系統(tǒng)到GD32星空派開發(fā)板
移植RT-Thread操作系統(tǒng)到GD32星空派開發(fā)板
GD32F4系列芯片移植RTOS Demo工程 GD32F407移植FreeRTOS GD32F407移植RT-Thread
移植RT-Thread BSP中GDF450工程運(yùn)行在GD32F470芯片上失敗如何修改
GD32F450的開發(fā)板工程RT系統(tǒng)啟動錯誤如何解決呢?
【國產(chǎn)MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano
![【國產(chǎn)MCU<b class='flag-5'>移植</b>】HC32<b class='flag-5'>F</b>460基于Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【國產(chǎn)MCU系列】在 HK32F030 上移植 RT-Thread Nano
![【國產(chǎn)MCU系列】在 HK32<b class='flag-5'>F</b>030 上<b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【國產(chǎn)MCU系列】在 HK32F030 上移植 RT-Thread Nano
![【國產(chǎn)MCU系列】在 HK32<b class='flag-5'>F</b>030 上<b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
基于 Keil MDK 移植 RT-Thread Nano
![基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論