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

本文是在keil中给梁山派移植rt-thread nano版本
之所以使用nano版本,是因为暂时对软件包没什么需求,只是想使用rt-thread的内核,而nano版本正好满足我目前的需求,所以最后选择nano版本进行移植。
下面是nano版本的简介
先给文件,文件信息如下
移植步骤如下:
1、准备好一份梁山派的例程文件,在上面的压缩包中已经给出
2、在keil上安装rt-thread nano pack(如果已安装,直接进入下一步)
有两种方式,在keil在线下载,或离线安装,我个人推荐离线安装,毕竟我从没在keil中安装成功过
3、将rt-thread nano添加到工程中
打开一个梁山派的例程,我上面打包好的库函数点灯的程序就可以,然后如图勾选点确认即可
可以看到rt-thread nano已经添加到工程中去,别看文件很多,可我们需要且能修改的文件也只有board.c和rtconfig.h这两个文件
4、系统时钟配置
打开board.c文件,有两个函数需要我们处理,分别是rt_os_tick_callback和rt_hw_board_init,一个负责系统调度(提供节拍),一个负责系统初始化
4.1首先是rt_hw_board_init,我们先将其扩展出去,使其能够被其他文件调用,在rtconfig.h中添加如下代码
extern void rt_os_tick_callback(void);
然后将其放到滴答定时器中断服务函数中,该服务函数在gd32f4xx_it.c文件中,如下图所示(须在该.c文件中添加对应头文件,如下第二张图所示)
需要注意的是,这个滴答定时器进入中断的周期应为1ms,而在本程序中滴答定时器的周期正是1ms,所以无需修改,该周期的配置在systick.c文件中的systick_config函数中修改,该函数正是滴答定时器的初始化配置函数
4.2然后是rt_hw_board_init,这个函数我个人理解是负责系统初始化的函数,该函数的配置只需要将下图中选中的部分删去即可
5、最后处理
此时移植已经基本完成,但如果我们点击编译,会发现还是会报两个错,如下图所示
原因是rt-thread 会接管异常处理函数 hardfault_handler() 和悬挂处理函数 pendsv_handler(),而在gd32f4xx_it.c已经对这两个函数进行了定义,相当于冲突了,所以我们删去gd32f4xx_it.c中的这两个函数即可
删去后编译0错误0警告
以上就是移植的全过程
搞个例程试一下
将main函数中的初始化函数放到board.c文件中的rt_hw_board_init函数里(注意在board.c引用相应头文件)
将如下代码对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);
}
}
编译后无错
最终实现效果:
实现梁山派的四个小灯以1s间隔进行闪烁
实现线程调度和rtt延时函数

公有云是不是云计算,告诉你错了
如何进行酒店的智能管理系统设计
芯片都用在什么地方
什么是光伏电池封装胶膜 光伏EVA胶膜的优点
宽带连接不上怎么办
梁山派GD32F450/470-RT-Thread Nano移植(一)
荣耀畅玩8C续航怎么样
Intel CPU核心简介
平板电脑市场是否充斥着泡沫?
标志的插电式混合动力亮相,准备要在欧洲市场弄出点动静来
2019世界人工智能大会倒计时,开幕式上将上演“双马对话”
如何使用Zenoh协议扩展物联网过去的分布式数据孤岛
利用机器学习改善电动汽车电池性能
英集芯IP6862一芯三充 无线充方案设计
电抗器的作用_电抗器的工作原理及原理图
闪存在太空中存在哪些优缺点
Xilinx助力西安交大蝉联亚太区大学生机器人大赛冠军
小米发布首款5G手机小米MIX3_推动5G产业发展
CC1310F128系列 超低功耗低于1GHz射频 微控制器芯片
【分享】NTP网络时间服务器的功能原理是什么?