RT-Thread内核移植

目录

  • 前言
  • 一、实验平台简介
    • 1.1 W601简介
    • 1.2 RT-Thread简介
    • 1.3 ENV简介
  • 二、开发环境搭建
    • 2.1 MDK安装
    • 2.2 Git安装
    • 2.3 RT-Thread相关下载
    • 2.4 其他素材
  • 三、移植RT-Thread
  • 四、ENV使用
  • 五、W601开发板下载验证
    • 5.1 使用串口下载软件
    • 5.2 ST-Link下载


前言

  本文以正点原子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就够了
在这里插入图片描述
  然后打开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里的默认配置不一样
在这里插入图片描述
  剩下的就是常规的移植与配置

四、ENV使用

  下载好了之后解压,点击env.exe控制台,菜单栏右击->Settings
在这里插入图片描述
  点击Integration,点击Register注册到环境变量,最后保存设置
在这里插入图片描述
  此时可以在空白处右击打开env
在这里插入图片描述
  在工程目录下右击打开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 上面了,如图所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器端口PPTP 1723放行教程

阿里云服务器安装PPTP VPN需要先开通1723端口,阿里云服务器端口是在安全组中操作的,阿里云服务器网aliyunfuwuqi.com来详细说明阿里云服务器安全组开放PPTP VPN专用1723端口教程: 阿里云服务器放行1723端口教程 PPTP是点对点隧道协议&#…

STM32 学习(二)GPIO

目录 一、GPIO 简介 1.1 GPIO 基本结构 1.2 GPIO 位结构 1.3 GPIO 工作模式 二、GPIO 输出 三、GPIO 输入 1.1 传感器模块 1.2 开关 一、GPIO 简介 GPIO(General Purpose Input Output)即通用输入输出口。 1.1 GPIO 基本结构 如下图&#xff0…

C#使用 OpenHardwareMonitor获取CPU或显卡温度、使用率、时钟频率相关方式

C# 去获取电脑相关的基础信息,还是需要借助 外部的库,我这边尝试了自己去实现它 网上有一些信息,但不太完整,都比较零碎,这边尽量将代码完整的去展示出来 OpenHardwareMonitor获取CPU的温度和频率需要管理员权限 在没…

梯度下降法

前言:在均方差损失函数推导中,我使用到了梯度下降法来优化模型,即迭代优化线性模型中的和。现在进一步了解梯度下降法的含义以及具体用法。 一、梯度下降法(入门级理解) 定义:梯度下降是一种用于最小化损失函数的优化…

Python爬取今日头条热门文章

前言 今日头条文章收益是没有任何门槛,只要是你发布文章,每篇文章的阅读量超过1000就能有收益,阅读量越多收益越高。于是乎我就有了个大胆的想法。何不利用Python爬虫,爬取热门文章,然后完成自动化发布文章呢&#xf…

专访 | STIF2023第四届国际科创节访第七在线CEO赵嘉程

12月15日,在STIF2023第四届国际科创节暨数服会上,第七在线获得年度数智化创新典范奖,第七在线CEO赵嘉程在颁奖典礼现场接受了媒体专访。 主持人:赵总,您好,欢迎您接受我们的专访,首先我们特别想…

杰发科技AC7840——Eclipse环境DMA注意事项

0.序 用 户 使 用 DMA 时 , 所 有 DMA 搬 运 的 SRAM 数 据 都 必 须 存 放 在 SRAM_U 区 (0x20000000~0x2000EFFF) 。 1. 修改办法 第一步: RAM定义 /* Specify the memory areas */ MEMORY {FLASH (rx) : ORIGIN 0x00000000, LENGT…

dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib

更新Xcode14后低版本iPhone调试报错 dyld: Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib Referenced from: /var/containers/Bundle/Application/…/….app/… Reason: image not found 这是缺少libswiftCoreGraphics库 直接导入libswiftCoreGraphics库即…

【新手小白的xsslab靶场学习】

第1关 最开始页面源代码 直接输入<script>alert(1)</script> 第2关 页面源代码 先尝试<script>alert(1)</script>看页面源代码 <h2>里面尖括号被编码&#xff0c;<input>里面没有编码,直接双引号闭合&#xff0c; 修改payload&…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-01x00

如上表所示&#xff0c;MOE0&#xff0c;OSSI1&#xff0c;CCxE0&#xff0c;CCxNE0时&#xff0c;OCx与OCxN的输出状态取决于GPIO端口上下拉状态。 ---------------------------------------------------------------------------------------------------------------------…

基于RetinaFace+Jetson Nano的智能门锁系统——第二篇(配置环境)

文章目录 设备一、安装远程登录终端Xshell1.1下载Xshell1.2新建回话1.3查询ip地址1.4启动连接 二、安装远程文件管理WinScp2.1下载WinScp2.2连接Jetson Nano2.3连接成功 三、安装远程桌面VNC Viewer3.1下载VNC Viewer3.2在Jetson Nano安装VNC Viewer3.3设置VINO登录选项3.4将网…

单片机原理及应用:计数按键控制数码管显示

承接上文&#xff0c;我们来介绍一下按键和数码管的配合工作&#xff0c;由于数码管显示的字符和位数多种多样&#xff0c;无法做到一个字符对应一个按键&#xff0c;所以程序主要记录按键的使用次数来切换数码管的显示。 #include <reg52.h> //包含reg52.h头…

opencv003图像裁剪(应用NumPy矩阵的切片)

这一部分相对于马上要学习的二值化是要更更更简单一些的&#xff0c;只需三行&#xff0c;便能在opencv上裁剪图像啦&#xff08;顺便云吸猫&#xff0c;太可爱了&#xff01;&#xff09; 出处见水印&#xff01; 1、复习图像的显示 前几天期末考试&#xff0c;太久没有看…

第28关 k8s监控实战之Prometheus(一)

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。对于运维开发人员来说&#xff0c;不管是哪个平台服务&#xff0c;监控都是非常关键重要的。 在传统服务里面&#xff0c;我们通常会到zabbix、open-falcon、netdata来做服务的监控&#xff0…

error C2666: “Date::operator ==”: 重载函数具有类似的转换

error C2666: “Date::operator ”: 重载函数具有类似的转换 1.错误描述2.解决方案 1.错误描述 class Date { public:Date(int year 2024, int month 1, int day 1){_year year;_month month;_day day;}bool operator(const Date& d){return _year d._year&&…

接入第三方登录

1.进行认证 https://graph.qq.com/oauth2.0/authorize?response_typecode&client_id[YOUR_APPID]&redirect_uri[YOUR_REDIRECT_URI]&scope[THE_SCOPE] https://graph.qq.com/oauth2.0/show?whichLogin&displaypc&client_id101284669&redirect_urih…

认识SpringBoot项目中的Starter

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

流量预测_MLP模型_keras

目录 0、我在干什么&#xff1f;1、import libararies2、加载数据load data3、独家观察数据函数 :heartbeat:4、数据预处理pre-processing&#xff08;1&#xff09;将时间戳转换为一个日期时间索引&#xff08;2&#xff09;填充所有缺失的值&#xff08;3&#xff09;将时间序…

ElasticSearch的DSL查询语法解析

Elasticsearch提供了基于ISON的DSL (Domain Specific Lanquage)来定义查询。 目录 一、常见查询类型 二、DSLQuery基本语法 三、全文检索查询 3.1 match查询&#xff1a;会对用户输入内容分词&#xff0c;常用于搜索框搜索 &#xff0c;语法&#xff1a; 3.2 multi match…

java智慧工地源码,互联网+建筑工地,实现对工程项目内人员、车辆、安全、设备、材料等的智能化管理

智慧工地全套源码&#xff0c;微服务JavaSpring Cloud UniApp MySql&#xff1b;支持多端展示&#xff08;大屏端、PC端、手机端、平板端&#xff09;演示自主版权。 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&…