RT-Thread系统移植


前言

  本文以正点原子W601开发板为例,讲解如何移植RT-Thread


一、实验平台简介

1.1 W601简介

  W601就是国内联盛德微电子推出的一款集 WiFi 与 MCU 为一体的 WIFI 芯片方案,以代替传统的 WIFI 模组+外置 MCU 方案。它集成了 Cortex-M3 内核,是一款支持多功能接口的 SoC 芯片。可作为主控芯片应用于智能家电、智能家居、智能玩具、医疗监护、工业控制等物联网领域

  学习 W601 有几份资料经常用到:

《W601 芯片产品规格书》
《WM_W601_寄存器手册》
《W601 芯片设计指导书》

  其中,最常用的是《WM_W601_寄存器手册》,该文档是官方针对 W601 芯片提供的一份参考资料,里面有绝大部分寄存器的详细描述,内容详实,方便大家编写代码,不过没有实例,也没有对 Cortex-M3 构架进行多少介绍,读者只能根据自己对书本的理解来编写相关代码。当然官方也提供了相关外设例程,但也都是基于操作系统的。而《W601 芯片产品规格书》和《W601 芯片设计指导书》可以让我们更好的了解 W601 的电气参数和硬件电路的设计。

1.2 RT-Thread简介

  RT-Thread,全称是 Real Time-Thread,顾名思义,是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),基本属性之一是支持多任务。可以使用Env工具对源码功能进行配置或裁剪,生成 MDK/IAR/GCC 工程,需要配合 MDK/IAR/GCC 使用。也可以使用自家RT-Thread Studio下载源码包并创建 rt-thread 工程,独立完成开发、编译、下载、调试等功能,并能进行功能裁剪。
  RT-Thread内核分为三个版本,有标准版本、Nano版本以及Smart版本。RT-Thread Nano 是一个极简版的硬实时内核,类似于FreeRTOS。RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,它把应用从内核中独立出来,形成独立的用户态应用程序,并具备独立的地址空间(32 位系统上是 4G 的独立地址空间),类似于linux操作系统。Nano版与其他RTOS区别不大,没有设备驱动和scons构建概念;而Smart版太复杂学习难度不低于Linux,所以不建议深入了解。
  近年来,物联网(Internet Of Things,IoT)概念广为普及,物联网市场发展迅猛,嵌入式设备的联网已是大势所趋。终端联网使得软件复杂性大幅增加,传统的 RTOS 内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。RT-Thread标准版与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,相当于RTOS+LWIP,如下图所示。
在这里插入图片描述
  本篇文章以rt-thread-master为例,为大家讲解移植,具体内核与设备驱动学习可以见官网详细说明:
https://www.rt-thread.org/document/

1.3 ENV简介

  env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理三大功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。有以下特性:

  • menuconfig 图形化配置界面,交互性好,操作逻辑强;
  • 丰富的文字帮助说明,配置无需查阅文档;
  • 使用灵活,自动处理依赖,功能开关彻底;
  • 自动生成 rtconfig.h,无需手动修改;
  • 使用 scons 工具生成工程,提供编译环境,操作简单;
  • 提供多种软件包,模块化软件包耦合关联少,可维护性好;
  • 软件包可在线下载,软件包持续集成,包可靠性高;

二、开发环境搭建

2.1 MDK安装

  MDK安装与使用见下链接,注意串口驱动CH340-以及ST-Link驱动的安装:
https://blog.csdn.net/weixin_44567668/article/details/134191384

2.2 Git安装

  Env软件包管理功能需要git的支持,Git的安装与命令操作见以下链接:
https://blog.csdn.net/weixin_44567668/article/details/125102572

2.3 RT-Thread相关下载

  RT-Thread内核源码与ENV工具前往RT-Thread官网下载:
https://www.rt-thread.org/download.html

2.4 其他素材

  • 正点原子W601 RTT例程
  • W601官方SDK
  • 星通智联串口调试下载助手

下载链接:https://download.csdn.net/download/weixin_44567668/88692870

三、移植RT-Thread

  本来想详细写的,发现内容太多遂放弃。本小节只介绍移植注意事项,此外需要对Keil使用的了解,见2.1小节
  首先打开工程,光标停在C文件上就可以看见文件所在目录位置,这样就可以在Manage Project Items添加文件
在这里插入图片描述
  注意libc文件可以不用,这是RTT的一个组件,我们常用的组件就需要finsh就够了
在这里插入图片描述
  整个RTT系统移植过程中需要大改的就是驱动部分,board.c里主要是时钟和定时器的配置,其他就是设备驱动部分。具体驱动开发见官网:https://www.rt-thread.org/document/site/#/建议了解一下就行,RTT开发的重心在物联网,具体配置可以复制粘贴
在这里插入图片描述
  然后打开Options for Target->Target,注意ROM与RAM的起始位置。ROM的地址是因为Flash里RUN AREA区起始地址为0x8010000,而RUN PARAM又占用了 256 个字节,所以代码实际存放的位置是从0x8010000+0x100=0x8010100地址处开始的。
在这里插入图片描述
  然后在User选项卡里注意下面这两个文件。其中 Run #1为调用 MDK 提供的工具生成 bin 文件,bin 文件的名字为 Output 选项卡中设置的名字。Run #2为调用官方提供的 makeimg.exe 和 makeimg_all.exe 工具生成 FLS 文件,可用于 W601 芯片串口升级功能。由于 makeimg.bat 脚本中固定了 bin 文件名,所以请不要随意修改 Output 选项中的名字

fromelf --bin !L --output rtthread.bin
.\makeimg.bat

在这里插入图片描述
  最后注意的是Linker,要取消勾选Use Memory Layout Target Dialog,使用drivers目录下编译工具链。点击Edit可以发现链接里的ROM和RAM设置与Option里的默认配置不一样
在这里插入图片描述
  剩下的就是常规的移植与配置

四、RT-Thread的构建与配置系统

  RT-Thread的构建与配置系统由以下几个部分组成
在这里插入图片描述

4.1 Kconfig配置

  C语言项目的裁剪配置本质上通过条件编译和宏的展开来实现的,RT-Thread借助Kconfig这套机制更方便的实现了这一功能。当前以Windows下Env工具中的使用为例,简述Kconfig在RT-Thread的工作机制。Kconfig机制包括了Kconfig文件和配置UI界面(如menuconfig,pyconfig等)。Kconfig机制有如下特点:

  • Kconfig文件中的配置项会映射至rtconfig.h中
  • Kconfig文件可以随源码分散至各级子目录,便于灵活修改。

在这里插入图片描述
  Kconfig文件在源码中呈现树形结构,需要在工程的根目录下存在一份顶层Kconfig文件,顶层Kconfig文件在文件中通过source语句显示地调用各子目录下的Kconfig文件。Env在根目录下执行menuconfig命令后会递归解析各级Kconfig文件,然后提供如下配置界面,完成相应的配置后并保存,根目录下会存在一份.config文件保存当前选择的配置项,并将.config文件转为RT-Thread的系统配置文件rtconfig.h。
在这里插入图片描述
  Kconfig源于Linux内核的配置构建系统:
https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html#

4.2 SCons构建工具(系统)

  SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make。它采用不同于通常 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来替代。这些文件也是 Python 脚本,能够使用标准的 Python 语法来编写。所以在 SConstruct、SConscript 文件中可以调用 Python 标准库进行各类复杂的处理,而不局限于 Makefile 设定的规则。简而言之,SCons工具就是用来构成一个编译工具链,生成可执行文件
  SCons 使用 SConscript 和 SConstruct 文件来组织源码结构并进行构建,SConstruct是scons构建的主脚本,SConscript存放在源代码的子目录下,通常放在项目的子目录,以达到分层构建的目的。一个项目 (BSP) 只有一 SConstruct,但是会有多个 SConscript。一般情况下,每个存放有源代码的子目录下都会放置一个 SConscript,还有一份便于配置构建行为的配置脚本(rtconfig.py)同时,RT-Thread也在SCons标准接口的基础上,提供了一组用于组织源码工程的扩展接口。开发者在使用时,可以借助RT-Thread提供的扩展接口,更方便的完成源码的组织与配置。
在这里插入图片描述
  关于 SCons 原生标准函数,在 SCons 的网站上可以找到详细的 SCons 原生函数介绍:
https://www.scons.org/doc/production/HTML/scons-user/index.html

4.3 ENV开发工具使用

  下载好了之后解压,点击env.exe控制台,菜单栏右击->Settings
在这里插入图片描述
  点击Integration,点击Register注册到环境变量,最后保存设置
在这里插入图片描述
  此时可以在空白处右击打开env
在这里插入图片描述
注意:第一次打开 env 时,杀毒软件可能会误报,务必添加其至信任白名单

  输入以下命令可以编译

scons				# 编译
scons --target=iar	# 编译生成IAR工程
scons --target=mdk5	# 编译生成MDK5工程

在这里插入图片描述
注意:如果工程目录有中文会编译失败

  输入menuconfig打开配置项目。menuconfig是图形化界面,它丰富的配置菜单,可以自动处理依赖,自动生成 rtconfig.h
在这里插入图片描述
  RT-Thread 提供一个软件包管理平台,这里存放了官方提供或开发者提供的软件包。这些软件包位于 RT-Thread online packages 菜单下,进入该菜单后,则可以看如下软件包分类:
在这里插入图片描述
  找到你需要的软件包然后选中开启,保存并退出menuconfig 。此时软件包已被标记选中,但是还没有下载到本地,所以还无法使用。

  • 下载 :如果软件包在本地已被选中,但是未下载,此时输入:pkgs --update ,该软件包自动下载;
  • 更新 :如果选中的软件包在服务器端有更新,并且版本号选择的是 latest 。此时输入: pkgs --update ,该软件包将会在本地进行更新;
  • 删除 :某个软件包如果无需使用,需要先在 menuconfig 中取消其的选中状态,然后再执行: pkgs --update 。此时本地已下载但未被选中的软件包将会被删除。
    在这里插入图片描述
      使用menuconfig -s命令进入Env配置界面,进入后看见Env config后按回车
    在这里插入图片描述
    3 个选项分别为:
  • 软件包自动更新功能:在退出 menuconfig 功能后,会自动使用pkgs --update命令来下载并安装软件包,同时删除旧的软件包。本功能在下载在线软件包时使用。
  • 自动创建 MDK 或 IAR 工程功能:当修改 menuconfig 配置后 ,必须输入 scons --target=xxx 来重新生成工程。开启此功能,就会在退出 menuconfig 时,自动重新生成工程,无需再手动输入 scons 命令来重新生成工程。
  • 使用镜像服务器下载软件包:由于大部分软件包目前均存放在 GitHub 上,所以在国内的特殊环境下,下载体验非常差。开启此功能,可以通过 国内镜像服务器下载软件包,大幅提高软件包的下载速度和稳定性

五、W601开发板下载验证

5.1 使用串口下载软件

  首先需要安装串口驱动,安装见前面开发环境搭建。然后在附件资源里找到星通智联串口调试下载助手,双击运行ThingsTurn_Serial_Tool.exe
  选择 ALIENTEK W601 开发板在电脑上的 COM 口,在电脑的“控制面板->设备管理器->端口(COM 和 LPT)”中查看,如果电脑的 COM 口太多,请插拔开发板的 USB 线观察具体的 COM 口编号。串口参数按如图所示参数进行设。打开串口后,还需要选择 FLS 文件路径(这里的文件选择上面新建工程并且编译后的 BIN 文件夹路径就可以了,如果没有 FLS,请先编译工程),然后点击下载,就可以将程序下载到 W601 芯片。
在这里插入图片描述

5.2 ST-Link下载

  首先需要安装ST-Link驱动,安装见前面开发环境搭建。打开 Options for Target 选项卡,在 Debug 栏选择仿真工具为 ST-Link Debugger,这里我们还勾选了 Run to main(),如图所示:
在这里插入图片描述
  然后我们点击 Settings,设置ST-Link的一些参数,如图所示:
在这里插入图片描述

  单击 OK,完成此部分设置,接下来我们还需要在 Utilities 选项卡里面设置下载时的目标编程器,我们直接勾选 Use Debug Driver,即和调试一样,选择高速 DAP 来给目标器件的 FLASH 编程,如图所示:
在这里插入图片描述
  然后这里需要拷贝官方提供的下载算法 W60X_QFlash.FLM(路径为附件资源\W601的RT-Thread开发环境\WM_SDK\Doc\W60X_QFLASH_Driver_for_SWD\W60X_QFlash)文件到MDK安装目录下(路径为.\Keil_v5\ARM\Flash),如图所示:
在这里插入图片描述

  然后点击 Utilities->Settings,在 Download Function 勾选“Reset and Run”功能,在“RAM for Algorithm”处,需要将 Size 改为“0x00002000”,而后点击 Add 选项,选择刚刚拷贝的下载算法“Winner Micro 1M Flash V1.0”,然后点击 Add,添加后最后点击 OK 退出就可以了。
在这里插入图片描述
  在设置完之后,点击确定,然后再点击 OK,回到 IDE 界面,编译一下工程。然后点击下载按钮,就可以下载代码到 W601 上面了,如图所示:
在这里插入图片描述

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F103是意法半导体(STMicroelectronics)生产的一款32位嵌入式微控制器,具有高性能和低功耗的特点。RT-Thread Nano是RT-Thread实时操作系统的一个轻量级版本,适用于资源受限的嵌入式系统。 在将RT-Thread Nano移植到STM32F103上之前,需要先了解RT-Thread Nano的架构和STM32F103的硬件特性。 首先,需要确保RT-Thread Nano的源代码和STM32F103的开发环境已经准备好。接着,根据STM32F103的芯片手册和引脚映射表,需要对RT-Thread Nano的硬件抽象层进行适配,确保操作系统可以正确地访问外设和中断。 其次,需要根据STM32F103的内存和存储器大小来合理配置RT-Thread Nano的内存管理器和文件系统。可以根据实际需求对系统进行裁剪,移除不必要的模块和功能,以减小系统的内存占用和代码体积。 然后,需要配置STM32F103的系统时钟和中断向量表,并在启动代码中初始化硬件资源和系统任务。可以参考RT-Thread Nano的官方文档和示例代码,根据具体的硬件平台和应用需求进行相应的设置和调试。 最后,进行系统的编译、烧录和调试。可以使用STM32F103的开发工具链和调试器,对编译后的固件进行烧录和调试,确保系统能够正确地启动和运行。 总结来说,将RT-Thread Nano移植到STM32F103上需要进行硬件适配、内存管理和系统配置等工作,最终通过编译、烧录和调试来验证移植的正确性。这样可以使得STM32F103可以运行使用RT-Thread Nano操作系统的应用程序,实现更灵活和可靠的嵌入式系统设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别问,问就是全会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值