一、系统架构

  RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统。
  RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。针对资源受限的微控制器(MCU)系统,可通过方便易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 版本(NANO 是 RT-Thread 官方于 2017 年 7 月份发布的一个极简版内核);而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。
  近年来,物联网(Internet Of Things,IoT)概念广为普及,物联网市场发展迅猛,嵌入式设备的联网已是大势所趋。终端联网使得软件复杂性大幅增加,传统的 RTOS 内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。物联网操作系统是指以操作系统内核(可以是 RTOS、Linux 等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台,RT-Thread 就是一个 IoT OS。

  RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。

它具体包括以下部分:

1、内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
2、组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。
3、RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread 已经支持的软件包数量已经达到 60+,如下举例:

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

 <2>脚本语言相关的软件包:目前支持 JerryScript、MicroPython。
多媒体相关的软件包:Openmv、mupdf。
 <3>工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。
 <4>系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。
 <5>外设库与驱动类软件包:RealTek RTL8710BN SDK。
其他。

二、文件结构

1、RT-Thread 完整版


该版本适用于需要使用RT-Thread的丰富功能,如各类外设、物联网组件、软件包等的场景。

2、RT-Thread Nano版


适用于系统资源紧张或是项目功能较为简单,仅需使用RTOS内核,无需丰富功能的场景,且开发时无需额外的辅助工具。

3 源文件的文件说明

1、applications       RT-Thread 应用程序。2、rt-thread      RT-Thread 的源文件。- components     RT-Thread 的各个组件目录。- include         RT-Thread 内核的头文件。- libcpu           各类芯片的移植代码,此处包含了 STM32 的移植文件。- src                RT-Thread 内核的源文件。- tools                RT-Thread 命令构建工具的脚本文件。
-
3、drivers           RT-Thread 的驱动,不同平台的底层驱动具体实现。4、Libraries      STM32 固件库文件。5、kernel-sample-0.1.0   RT-Thread 的内核例程。

4 移植后的文件层次

Applications 它用于存放用户应用代码。
Drivers         它用于存放 RT-Thread 底层的驱动代码。
STM32_HAL       它用于存放 STM32 的固件库文件。
kernel-sample   它用于存放 RT-Thread 的内核例程。
Kernel          它用于存放 RT-Thread 内核核心代码。
CORTEX-M3       它用于存放 ARM Cortex-M3 移植代码。
DeviceDrivers   它用于存放 RT-Thread 驱动框架源码。
finsh           它用于存放 RT-Thread 命令行 finsh 命令行组件。

三、系统启动

  一般了解一份代码大多从启动部分开始,同样这里也采用这种方式,先寻找启动的源头,因为 MDK-ARM 的用户程序入口为 main() 函数,所以先看看 main() 函数在哪个文件中。这里的 main() 函数位于 Startup 组的 startup.c 文件中,它位于 STM32 的启动汇编代码后,与 C 代码的入口跳转前。启动汇编在 STM32_HAL 组的 startup_stm32f103xe.s 中。

下面我们来看看 main() 函数中的这段代码:


//components.c 中定义
/* re-define main function */
int $Sub$$main(void)
{rt_hw_interrupt_disable();rtthread_startup();return 0;
}

  在这里 $Sub$$main 函数仅仅调用了 rtthread_startup() 函数。RT-Thread 支持多种平台和多种编译器,而 rtthread_startup() 函数是 RT-Thread 规定的统一入口点,所以 $Sub$$main 函数只需调用 rtthread_startup() 函数即可。例如采用 GNU GCC 编译器编译的 RT-Thread,就是直接从汇编启动代码部分跳转到 rtthread_startup() 函数中,并开始第一个 C 代码的执行的。在 components.c 的代码中找到 rtthread_startup() 函数,我们将可以看到 RT-Thread 的启动流程:

int rtthread_startup(void)
{rt_hw_interrupt_disable();/* board level initalization* NOTE: please initialize heap inside board initialization.*/rt_hw_board_init();/* show RT-Thread version */rt_show_version();/* timer system initialization */rt_system_timer_init();/* scheduler system initialization */rt_system_scheduler_init();#ifdef RT_USING_SIGNALS/* signal system initialization */rt_system_signal_init();
#endif/* create init_thread */rt_application_init();/* timer thread initialization */rt_system_timer_thread_init();/* idle thread initialization */rt_thread_idle_init();/* start scheduler */rt_system_scheduler_start();/* never reach here */return 0;
}
#endif

  这部分启动代码,大致可以分为四个部分 :

1 初始化与系统相关的硬件;
2 初始化系统内核对象,例如定时器,调度器;
3 初始化系统设备,这个主要是为 RT-Thread的设备框架做的初始化;
4 初始化各个应用线程,并启动调度器。

四、用户代码

  上面的启动代码基本上可以说都是和 RT-Thread 系统相关的,那么用户如何加入自己的应用程序的初始化代码呢?RT-Thread 将 main 函数作为了用户代码入口,只需要在 main 函数里添加自己的代码即可。

int main(void)
{/* user app entry */return 0;
}

  为了在进入 main 程序之前,完成系统功能初始化,可以使用 $sub 和 $super 函数标识符在进入主程序之前调用另外一个例程,这样可以让用户不用去管 main() 之前的系统初始化操作。

RT-Thread嵌入式操作系统相关推荐

  1. 正点原子delay函数移植到rt thread操作系统(HAL库)

    正点原子教程中涉及到的操作系统只涉及了UCOS的教程,其中例程的system文件夹中的delay.c函数只是适配了UCOS. 下面将delay.c函数移植到rt thread中,使用的bsp是rt t ...

  2. uclinux 嵌入式linux,嵌入式操作系统uCLinux

    嵌入式操作系统是嵌入式系统的灵魂,而且在同一个硬件平台上可以嵌入不同的嵌入式操作系统.比如ARM7TDMI内核,可以嵌入Nucleus.VxWorks.uClinux等操作系统.在此主要对uClinu ...

  3. 关于RT thread系统节拍时钟的配置

    关于RT thread系统节拍时钟的配置                  -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...

  4. 学python与嵌入式操作系统_嵌入式操作系统那么多,哪一个适合你?

    原标题:嵌入式操作系统那么多,哪一个适合你? 物联网.人工智能的发展都离不开嵌入式系统,而嵌入式操作系统又是其中不容忽视的重要部分,工程师对其要求也由过去的简单易用上升到既要简单易用又安全可靠.嵌入式 ...

  5. 嵌入式操作系统漫议:功能与特点

    何为操作系统? 在手机.PC等个人计算系统中,操作系统是不可或缺的存在,其重要性如同空气和水对人而言一样.随着手机的普及,安卓.iOS等操作系统也变得广为人知.其实个人计算系统的操作系统是由内核.各种 ...

  6. 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)

    最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...

  7. 嵌入式操作系统风云录:历史演进与物联网未来Chapter3 第3章

    Chapter3 第3章 开源的嵌入式操作系统 今天开源软件正大行其道,从服务器.云计算.桌面到手机和嵌入式设备,到处都可以见到开源软件和开源的操作系统.本章介绍对嵌入式系统发展具有重要影响的几种开源 ...

  8. 本科生学习fpga,dsp,嵌入式操作系统哪个好

    本科生的话,建议做软件方向的嵌入式系统,即利用现有的芯片和操作系统(开源的非开源的都可以)进行开发.嵌入式没有竞争相对小的方向,不管你搞什么,今天无限风光,明天就有可能寄人篱下.希望楼主在选择之前首先 ...

  9. 实验6Linux系统开发环境,哈工大嵌入式操作系统课件—6 Linux开发环境1-linux基.ppt...

    <哈工大嵌入式操作系统课件-6 Linux开发环境1-linux基.ppt>由会员分享,可在线阅读,更多相关<哈工大嵌入式操作系统课件-6 Linux开发环境1-linux基.ppt ...

  10. 优先级调度算法实现_一篇讲透嵌入式操作系统任务调度

    进互联网公司操作系统和网络库是基础技能,面试过不去的看,这里基于嵌入式操作系统分几章来总结一下任务调度.内存分配和网络协议栈的基础原理和代码实现. 处理器上电时会产生一个复位中断,接下来会执行复位中断 ...

最新文章

  1. Mysql Workbench导出数据库时报 Unknown table ‘column_statistics‘ in information_schema (1109)
  2. vue 版本发布 在线跟新用户操作解决方案_Vue3.0正式发布,本次发布所有总结,一起看看!【附在线视频】...
  3. 多重继承与虚继承编程实验
  4. C#构造函数、操作符重载以及自定义类型转换
  5. 前端学习(2308):react之子传父
  6. linux 网络设备 安装,Linux_Linux系统配置网络详解,一.安装和配置网络设备- phpStudy...
  7. SQL JOIN 简单介绍
  8. mysql 系统工程师_数据库系统工程师难考吗?
  9. Web 前端页面劫持和反劫持
  10. CSS / 清除浮动+切图+属性书写顺序+页面布局思路
  11. android 蓝牙耳机 sco,Android:通过Sco蓝牙耳机播放声音
  12. 测试开发岗面试系列——大华技术股份有限公司
  13. Linux驱动01 - Timer
  14. android微信列表滑动删除,Android仿微信对话列表滑动删除效果
  15. 学习笔记 JavaScript 动画
  16. 华为 P10 手机开始推送鸿蒙 HarmonyOS 2 内测版
  17. PaddleOCR识别繁体中文和其他国家文字
  18. Clickhouse - System Tables 集合(一)
  19. 古剑奇谭ol服务器维护,古剑奇谭ol12月13日更新维护公告 网络版更新了什么
  20. 视频教程-Unity3D实战入门之第三人称射击游戏(TPS)-Unity3D

热门文章

  1. NTP(Network Time Protocol)协议详解
  2. PHP数字字母汉字验证码实现
  3. 数据备份数据迁移方案
  4. Golang 构造最佳随机密码
  5. 修改hifi音乐pro服务器,hifi音乐pro
  6. [译] 深入 Flutter 之手势
  7. 设计模式----建造者模式
  8. 移动端的角度浅谈数据分析报告
  9. HTML 超链接,HTML 样式- CSS
  10. linux cmake增量编译,Cmake 设置交叉编译环境