了解最新你所在地址试管婴儿费用试管婴儿中介公司试管婴儿资讯以及其它试管相关技术。
RISC
试管需知 凡是以任何理由向无故收费的机构均有欺诈嫌疑,请保持警惕!建议多家咨询对比,寻找有通过身份证+执照验证的招聘信息。切勿个人与个人合作。
会员级别: 免费会员(到期时间:终身)
置顶情况: 未置顶
公司名称: 神州中泰国际医疗集团
认证情况:

未上传身份证认证 未上传身份证认证

未上传营业执照认证 未上传营业执照认证

咨询电话:
18908074581
联系微信: 18908074581
  • 想要入驻中泰忧孕网站可以点击右侧立即入驻 →


前言:

本文引用地址:http://www.eepw.com.cn/article/202006/414404.htm

上一节,我们使用芯来科技Nuclei Studio IDE搭建了裸机开发环境,本节我们开始正式移植RT_Thread系统。

一、基础知识

1.RT_Thread简介

RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread具备一个IoTOS平台所需的所有关键组件,例如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的基础上,增加了众多的软件包构成,同时支持众多物联网组件,是物联网开发的利器。

3.准备工作

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

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

链接:https://pan.baidu.com/s/1UCQXjfWLPlbWqxxfaayT4Q

提取码:z8qz

(4)硬件:Sipeed Longan开发板

(5)移植参考资料:https://www.rt-thread.org/document/site/tutorial/nano/nano-port-gcc-riscv/an0042-nano-port-gcc-riscv/#nano

二、移植步骤

1.移植步骤概述

(1)准备一个基础的 NucleiStudio 工程,并获取 RT-Thread Nano 源码压缩包。

(2)在基础工程中添加 RT-Thread Nano 源码,添加相应头文件路径。

(3)适配 Nano,主要从 中断、时钟、内存、应用 这几个方面进行适配,实现移植。

(4)最后可对 Nano 进行配置:Nano 是可裁剪的,通过配置文件 rtconfig.h 实现对系统的裁剪。

2.获取源码

下载上文准备工作中网盘资料,解压后如下:

3.添加Nano源码

在裸机代码根目录创建RT_Thread文件夹,将OS源码中include、libcpu、src文件复制到其中,然后将bsp下的board.c以及rtconfig.h也放进去:

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

4.添加头文件路径

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

添加汇编路径

增加.h路径

5.适配 RT-Thread Nano

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

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

三、编译运行

1.编译

点击左上方锤子图标编译,发现编译失败

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

重新编译

2.修改代码

打开堆功能

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

#include gd32vf103.h #include gd32vf103c_start.h #include rtthread.h staticrt_thread_tdynamic_thread=RT_NULL;voidled_process_thread_entry(voidparameter)rt_err_tret=RT_EOK;while(1){/insert500msdelay/rt_thread_mdelay(500);/toggletheLED/gpio_bit_write(GPIOA,GPIO_PIN_1,(bit_status)(1-gpio_input_bit_get(GPIOA,GPIO_PIN_1)));/insert500msdelay/rt_thread_mdelay(500);}\briefmainfunction\param[in]none\param[out]none\retvalnoneintmain(void)/enabletheLEDclock/rcu_periph_clock_enable(RCU_GPIOA);/configureLEDGPIOport*/gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_1);gpio_bit_reset(GPIOA,GPIO_PIN_1);//createiwdt_threaddynamic_thread=rt_thread_create( led_thread ,led_process_thread_entry,RT_NULL,512,2,10);rt_thread_startup(dynamic_thread);}

3.运行

点击运行按钮

运行现象如下:

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

寄语:自我突破第一步:从价值表达转变为价值提供