查看: 1774|回复: 1
收起左侧

RISC-V单片机快速入门02-移植RT_Thread Nano

[复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-27 09:25
  • 签到天数: 57 天

    [LV.5]

    发表于 2020-6-26 19:45:32 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 小飞飞 于 2020-8-28 19:44 编辑


    本系列上一篇:RISC-V单片机快速入门01-开发环境搭建,本篇开始正式移植RT_Thread系统。

    一、基础知识
    1.RT_Thread简介

    RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread具备一个IoT OS平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。经过11年的累积发展,RT-Thread已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过2亿台,成为国人自主开发、国内最成熟稳定和装机量最大的开源RTOS。

    2.RT_Thread和RT_Thread Nano区别

    RT_Thread有两个版本,一个是RT_Thread Nano,这是一个纯粹的RTOS内核,基本原理和Free RTOS、UCOSIII/UCOSII比较相似,另一个是RT_Thread完整版,完整版是在RT_Thread Nano的基础上,增加了众多的软件包构成,同时支持众多物联网组件,是物联网开发的利器。

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(1)


    3.准备工作
    (1)裸机源码:上一节环境搭建篇工程即可

    (2)RT_Thread Nano 3.1.3源码: 我已经放到网盘上,也可以从官方下载

    (4)硬件:Sipeed Longan开发板

    二、移植步骤
    1.移植步骤概述
    (1)准备一个基础的 NucleiStudio 工程,并获取 RT-Thread Nano 源码压缩包。
    (2)在基础工程中添加 RT-Thread Nano 源码,添加相应的文件路径。
    (3)适配 Nano,主要从 中断、时钟、内存、应用 这几个方面进行适配,实现移植。
    (4)最后可对 Nano 进行配置:Nano 是可裁剪的,通过配置文件 rtconfig.h 实现对系统的裁剪。

    2.获取源码
    下载上文准备工作中网盘资料,解压后如下:

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(2)


    3.添加Nano源码
    在裸机代码根目录创建RT_Thread文件夹,将OS源码中include、libcpu、src文件复制到其中,然后将bsp下的board.c以及rtconfig.h也放进去:
    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(3)



    然后删除libcpu下面用不到的代码,仅留RISC-V/common、risc-v/bumblebee

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(4)


    4.添加头文件路径
    右击工程,点击 ​properties​ 进入下图所示界面,点击 ​C/C++ Build​ -> ​settings​ ,分别添加汇编与 C 的头文件路径
    添加汇编路径

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(5)


    增加.h路径

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(6)



    5.适配 RT-Thread Nano
    RT_Thread Nano是从entry函数开始启动,因此需要修改Start.s文件中C代码入口函数call main为call entry。

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(7)


    修改时钟和中断,直接将rt-thread-3.1.3/bsp/gd32vf103-blink/drivers下board.c覆盖掉board.c即可,同时将gd32vf103v_eval.c和gd32vf103v_eval.h覆盖掉utilites下文件中内容,主要目的是增加按键和串口相关函数。

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(8)


    三、编译运行
    1.编译
    点击左上方锤子图标编译,发现编译失败

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(9)


    此时需要修改下根目录RT_Thread为RT-Thread,然后修改配置路径中所有RT_Thread为RT-Thread,注意汇编路径和C路径都需要修改。

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(10)


    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(11)


    重新编译
    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(12)


    2.修改代码
    1. #include "gd32vf103.h"
    2. #include "gd32vf103c_start.h"
    3. #include "rtthread.h"
    4. static rt_thread_t dynamic_thread = RT_NULL;
    5. void led_process_thread_entry(void parameter)
    6. {
    7.     rt_err_t ret = RT_EOK;
    8.     while(1)
    9.     {
    10.         / insert 500 ms delay /
    11.         rt_thread_mdelay(500);
    12.         / toggle the LED /
    13.         gpio_bit_write(GPIOA, GPIO_PIN_1, (bit_status)(1-gpio_input_bit_get(GPIOA, GPIO_PIN_1)));
    14.         / insert 500 ms delay /
    15.         rt_thread_mdelay(500);
    16.     }
    17. }
    18. /!
    19.     \brief      main function
    20.     \param[in]  none
    21.     \param[out] none
    22.     \retval     none
    23. /
    24. int main(void)
    25. {
    26.     / enable the LED clock /
    27.     rcu_periph_clock_enable(RCU_GPIOA);
    28.     / configure LED GPIO port */
    29.     gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
    30.     gpio_bit_reset(GPIOA, GPIO_PIN_1);
    31.     // create iwdt_thread
    32.     dynamic_thread = rt_thread_create("led_thread", led_process_thread_entry,
    33.                                         RT_NULL, 512, 2, 10);
    34.     rt_thread_startup(dynamic_thread);
    35. }
    复制代码

    打开堆功能
    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(13)


    修改main.c内容,创建一个线程,线程中每隔500毫秒开关一次灯





    上一篇:【pdf下载】GD32VF数据手册(英文版)
    下一篇:RISC-V单片机快速入门03-基于RT_Thread Nano添加控制台
    RISCV作者优文
    相信自已,未来是自已创造的。
    回复

    使用道具 举报

      离线 

  • TA的每日心情
    慵懒
    2021-7-27 09:25
  • 签到天数: 57 天

    [LV.5]

     楼主| 发表于 2020-6-26 19:46:15 | 显示全部楼层
    本帖最后由 小飞飞 于 2020-7-24 12:50 编辑

    3.运行
    点击运行按钮

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(14)


    运行现象如下:

    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(15)


    GD32VF 单片机芯片及应用-RISC-V单片机快速入门02-移植RT_Thread Nanorisc-v单片机中文社区(16)


    可以看到指示灯循环闪烁,说明我们移植RT_Thread操作系统成功。

    本篇完*

    相信自已,未来是自已创造的。
    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-11-26 02:30 , Processed in 0.448015 second(s), 51 queries .

    快速回复 返回顶部 返回列表