RT-Thread

RT-Thread是一款物联网系统,可以帮助用户构建商用的物联网,附加很多编程工具,用户可以到获取相关的工具设计适合企业使用的物联网控制系统,提供多种软件包,支持Cloud SDK/FOTA、第三方云接入SDK、RTI/View、mDNS/uPnP、TLS/DTLS、脚本引擎、音频框架、压缩/解压库、数据库、MQTT、http c/s、Airkiss,也提供组件和服务层,包括键值数据库、DFS虚拟文件系统、FinSH控制台、网络框架、Wi-Fi Mar、设备框架,新版添加SAL_INTERNET_CHECK配置项以支持打开或关闭网络状态,解决了处理底层网络设备的do_pollfd函数返回错误-1的问题,修复网卡设备调用关闭dhcp时,底层无需调用dhcp_stop函数关闭dhcp的问题!

RT-Thread软件功能

1、内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。

2、组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。

3、RT-Thread 软件包:运行于 RT-Thread 物联网作系统平台上,面向不同应用领域的通用软件组件,由描述、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个作系统的选择至关重要,因为这些软件包具有很强的可重用,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread 已经支持的软件包数量已经达到 60+,如下举例:

4、物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。

5、脚本语言相关的软件包:目前支持 JerryScpt、MicPython。

6、多媒体相关的软件包:Openmv、mupdf。

7、工具类软件包:CmBacktrace、EasyFlash、EasyLogger、View。

8、系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。

9、外设库与驱动类软件包:RealTek RTL8710BN SDK。

RT-Thread软件特色

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程作系统,基本属之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。

RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪非常好。针对资源受限的微控制器(MCU)系统,可通过方便易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 版本(NANO 是 RT-Thread 于 2017 年 7 月份发布的一个极简版内核);而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现类似 Andid 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。

相较于 Linux 作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。虽然 32 位 MCU 是它的主要运行平台,实际上很多带有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列级别 CPU 的应用处理器在特定应用场合也适合使用 RT-Thread。

RT-Thread使用说明

DFS 简介

DFS 是 RT-Thread 提供的虚拟文件系统组件,全称为 Device File ,即设备虚拟文件系统,文件系统的名称使用类似 UNIX 文件、文件夹的风格,目录结构如下图所示:

在 RT-Thread DFS 中,文件系统有统一的根目录,使用 / 来表示。而在根目录下的 f1.bin 文件则使用 /f1.bin 来表示,2018 目录下的 f1.bin 目录则使用 /data/2018/f1.bin 来表示。即目录的分割符号是 /,这与 UNIX/Linux 完全相同,与 Windows 则不相同(Windows 作系统上使用 来作为目录的分割符)。

DFS 架构

RT-Thread DFS 组件的主要功能特点有:

为应用程序提供统一的 POSIX 文件和目录作接口:read、wte、poll/select 等。

支持多种类型的文件系统,如 FatFS、RomFS、DevFS 等,并提供普通文件、设备文件、网络文件描述符的管理。

支持多种类型的存储设备,如 SD Card、SPI Flash、Nand Flash 等。

DFS 的层次架构如下图所示,主要分为 POSIX 接口层、虚拟文件系统层和设备象层。

初始化 DFS 组件

DFS 组件的的初始化是由 dfs_init() 函数完成。dfs_init() 函数会初始化 DFS 所需的相关资源,创建一些关键的数据结构, 有了这些数据结构,DFS 便能在系统中找到特定的文件系统,并获得对特定存储设备内文件的作方法。如果开启了自动初始化(默认开启),该函数将被自动调用。

注册文件系统

在 DFS 组件初始化之后,还需要初始化使用的具体类型的文件系统,也就是将具体类型的文件系统注册到 DFS 中。注册文件系统的接口如下所示:

该函数不需要用户调用,他会被不同文件系统的初始化函数调用,如 elm-FAT 文件系统的初始化函数elm_init()。开启对应的文件系统后,如果开启了自动初始化(默认开启),文件系统初始化函数也将被自动调用。

elm_init() 函数会初始化 elm-FAT 文件系统,此函数会调用 dfs_register() 函数将 elm-FAT 文件系统注册到 DFS 中,文件系统注册过程如下图所示:

将存储设备注册为块设备

因为只有块设备才可以载到文件系统上,因此需要在存储设备上创建所需的块设备。如果存储设备是 SPI Flash,则可以使用 “串行 Flash 通用驱动库 SFUD” 组件,它提供了各种 SPI Flash 的驱动,并将 SPI Flash 象成块设备用于载,注册块设备过程如下图所示:

格式化文件系统

注册了块设备之后,还需要在块设备上创建指定类型的文件系统,也就是格式化文件系统。可以使用 dfs_mkfs() 函数对指定的存储设备进行格式化,创建文件系统,格式化文件系统的接口如下所示:

文件系统类型(fs_name)可取值及对应的文件系统如下表所示:

以 elm-FAT 文件系统格式化块设备为例,格式化过程如下图所示:

还可以使用 mkfs 命令格式化文件系统,格式化块设备 sd0 的运行结果如下所示:

载文件系统

在 RT-Thread 中,载是指将一个存储设备接到一个已存在的路径上。我们要访问存储设备中的文件,必须将文件所在的分区载到一个已存在的路径上,通过这个路径来访问存储设备。载文件系统的接口如下所示:

如果只有一个存储设备,则可以直接载到根目录 / 上。

卸载文件系统

当某个文件系统不需要再使用了,那么可以将它卸载掉。卸载文件系统的接口如下所示:

上一篇 2022-11-28

相关推荐

  • RT-Thread

    RT-Thread是一款物联网系统,可以帮助用户构建商用的物联网,附加很多编程工具,用户可以到获取相关的工具设计适合企业使用的物联网控制系统,提供多种软件包,支持Cloud S...
正在提交中,请稍等片刻...

发表回复

请登录后评论...
登录后才能评论

评论列表 (0条)