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】欢迎添加关注!文章转载请注明出处。

审核编辑:彭菁

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

    关注

    446

    文章

    47746

    浏览量

    409042
  • 乘法器
    +关注

    关注

    8

    文章

    191

    浏览量

    36581
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38865

原文标题:GD32L233开发板评测 | RT-Thread操作系统移植

文章出处:【微信号:GD32MCU,微信公众号:GD32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    从安装到使用,RT-Thread Nano最全教程看完不信你还不会使用

    RT-Thread Nano发布以来,小编收到不少开发者询问RT-Thread Nano的配套教程实例,幸得RT-Thread开发者燕十三
    的头像 发表于 09-26 06:39 4.7w次阅读
    从安装到使用,<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 793次阅读
    <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

    移植 RT-Thread Nano 到 RISC-V

    本文介绍了如何移植 RT-Thread Nano 到 RISC-V 架构,以 Eclipse GCC 环境为例,基于一个 GD32V103 MCU 的基础工程作为示例进行讲解。移植 Nano
    发表于 06-09 16:33

    如何基于Keil MDK移植RT-Thread Nano

    本文介绍如何基于 Keil MDK 移植 RT-Thread Nano ,并以一个 stm32f103 的基础工程作为示例进行讲解。开发平台:Keil MDK硬件平台:XNUCLEO-F103RB
    发表于 01-26 07:09

    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 移植

    基于 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>