0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

梁山派GD32F450/470-RT-Thread Nano移植(一)

冬至子 来源:子牧r 作者:子牧r 2023-09-25 15:33 次阅读

本文是在keil中给梁山派移植RT-Thread Nano版本

之所以使用Nano版本,是因为暂时对软件包没什么需求,只是想使用RT-Thread的内核,而Nano版本正好满足我目前的需求,所以最后选择Nano版本进行移植。

下面是Nano版本的简介

1.jpg

先给文件,文件信息如下

1.jpg

移植步骤如下:

1、准备好一份梁山派的例程文件,在上面的压缩包中已经给出

2、在keil上安装RT-Thread Nano Pack(如果已安装,直接进入下一步)

有两种方式,在keil在线下载,或离线安装,我个人推荐离线安装,毕竟我从没在keil中安装成功过

3、将RT-Thread Nano添加到工程中

打开一个梁山派的例程,我上面打包好的库函数点灯的程序就可以,然后如图勾选点确认即可

1.jpg

可以看到RT-Thread Nano已经添加到工程中去,别看文件很多,可我们需要且能修改的文件也只有board.c和rtconfig.h这两个文件

1.jpg

4、系统时钟配置

打开board.c文件,有两个函数需要我们处理,分别是rt_os_tick_callback和rt_hw_board_init,一个负责系统调度(提供节拍),一个负责系统初始化

1.jpg

4.1首先是rt_hw_board_init,我们先将其扩展出去,使其能够被其他文件调用,在rtconfig.h中添加如下代码

extern void rt_os_tick_callback(void);

1.jpg

然后将其放到滴答定时器中断服务函数中,该服务函数在gd32f4xx_it.c文件中,如下图所示(须在该.c文件中添加对应头文件,如下第二张图所示)

1.jpg

需要注意的是,这个滴答定时器进入中断的周期应为1ms,而在本程序中滴答定时器的周期正是1ms,所以无需修改,该周期的配置在systick.c文件中的systick_config函数中修改,该函数正是滴答定时器的初始化配置函数

1.jpg

4.2然后是rt_hw_board_init,这个函数我个人理解是负责系统初始化的函数,该函数的配置只需要将下图中选中的部分删去即可

1.jpg

5、最后处理
此时移植已经基本完成,但如果我们点击编译,会发现还是会报两个错,如下图所示

1.jpg

原因是RT-Thread 会接管异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),而在gd32f4xx_it.c已经对这两个函数进行了定义,相当于冲突了,所以我们删去gd32f4xx_it.c中的这两个函数即可

1.jpg

1.jpg

删去后编译0错误0警告

1.jpg

以上就是移植的全过程

搞个例程试一下

将main函数中的初始化函数放到board.c文件中的rt_hw_board_init函数里(注意在board.c引用相应头文件)

1.jpg

将如下代码对main.c中的代码进行替换

/********************************************************************************

  • 文 件 名: 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);
}
}
/

函数名称 : main
功 能 : 主函数
参 数 : 无
返 回 值 : 无
作 者 : LC
************************************************/
int main(void)
{
rt_thread_t tid = RT_NULL;
/
创 建 线 程 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);
}
}

编译后无错

1.jpg

最终实现效果:
实现梁山派的四个小灯以1s间隔进行闪烁
实现线程调度和rtt延时函数

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19134

    浏览量

    228901
  • GPIO
    +关注

    关注

    16

    文章

    1189

    浏览量

    51855
  • 定时器中断
    +关注

    关注

    0

    文章

    49

    浏览量

    11160
  • RT-Thread
    +关注

    关注

    31

    文章

    1266

    浏览量

    39865
  • GD32F450
    +关注

    关注

    1

    文章

    11

    浏览量

    6649
收藏 人收藏

    评论

    相关推荐

    梁山GD32F450/470-RT-Thread Nano移植(二)

    在上篇文章中,我实现了在keil中给梁山移植RT-Thread Nano,但在官方的
    的头像 发表于 09-25 15:40 1899次阅读
    <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>(二)

    梁山GD32F450/470-RT-Thread Nano移植(三)

    RT-Thread FinSH 是 RT-Thread 的命令行组件(shell),提供套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。
    的头像 发表于 09-26 14:50 1567次阅读
    <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>(三)

    rt-thread studio新建gd32f450工程

    rt-thread studio 软件版本是:2.2.6;开发板的软件包是:GD32450Z-GD-EVAL版本是V1.0.1;开发板使用兆易的官方开发板GD32F450ZKT6。
    的头像 发表于 09-28 14:17 1720次阅读
    <b class='flag-5'>rt-thread</b> studio新建<b class='flag-5'>gd32f450</b>工程

    移植RT-Thread操作系统到GD32星空开发板

    。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。本次移植所使用开发板为GD32星空: 2 代码下载目前RT-Thread提供很
    发表于 10-13 15:56

    移植RT-Thread操作系统到GD32星空开发板

    。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。本次移植所使用开发板为GD32星空: 2 代码下载目前RT-Thread提供很
    发表于 10-13 16:06

    GD32F4系列芯片移植RTOS Demo工程 GD32F407移植FreeRTOS GD32F407移植RT-Thread

    GD32F4系列移植FreeRTOS和RT-Thread工程例程GD32F407/GD32F450
    发表于 06-07 22:10

    移植RT-Thread BSP中GDF450工程运行在GD32F470芯片上失败如何修改

    各位好:如题,移植GD32F450的工程运行在GD32F470的芯片上,加载成功后程序会死在rt_smem_alloc函数里面的289行代码,RT
    发表于 11-07 14:18

    GD32F450的开发板工程RT系统启动错误如何解决呢?

    我自己设计的GD32F405的板子,在RT-Thread Studio里用的GD32F450的开发板工程,改了下RAM大小,从128改成了192然后把SDRAM、eth删除,在主函数
    发表于 02-21 11:33

    【国产MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano

    【国产MCU移植】HC32F460基于Keil MDK 移植 RT-Thread Nano
    发表于 11-18 18:51 65次下载
    【国产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>

    【国产MCU系列】在 HK32F030 上移植 RT-Thread Nano

    如需下载相关开源资料请点击阅读原文这是个航顺 HK32F030 的 RT-Thread Nano 移植示例,记录了在 Keil 裸机工程的
    发表于 11-21 18:51 42次下载
    【国产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>

    RT-Thread移植GD32F150系列MCU

    RT-Thread移植GD32F150系列MCU
    发表于 12-07 19:36 7次下载
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>移植</b>到<b class='flag-5'>GD32F</b>150系列MCU

    HC32F460移植RT-Thread Nano+FinSh工程源码下载

    HC32F460移植RT-Thread Nano+FinSh工程源码下载
    发表于 01-05 10:30 6次下载

    【国产MCU系列】在 HK32F030 上移植 RT-Thread Nano

    这是个航顺 HK32F030 的 RT-Thread Nano 移植示例,记录了在 Keil 裸机工程的基础上进行
    发表于 01-25 17:42 4次下载
    【国产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>

    基于 Keil MDK 移植 RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以个 stm32f103 的基础工程作为示例进行讲解。
    发表于 01-26 17:04 16次下载
    基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    RT-Thread开发GD32F450添加spiflash外设的步骤

    gd32f450工程上使用env工具增加spi falsh。
    的头像 发表于 08-07 14:58 2076次阅读
    <b class='flag-5'>RT-Thread</b>开发<b class='flag-5'>GD32F450</b>添加spiflash外设的步骤