RT-Thread实时操作系统简介

2023-05-16

目录

一、概述

二、架构

三、版本选择

四、内核启动流程

五、自动初始化机制

六、内核对象模型

七、I/O设备模型

1、框架

2、设备驱动使用序列图

3、设备类型

八、FinSH控制台

九、ENV工具

1、menuconfig

2、Scons构建工具

3、软件包管理器(package)

 十、RT-Thread Studio

一、概述
RT-Thread 是一款完全由国内团队开发维护的集实时操作系统(RTOS)内核,文件系统、网络框架、设备框架等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接等能力的物联网操作系统,具有完全的自主知识产权。具有如下特点:

资源占用极低,超低功耗设计,最小内核(Nano版本)仅需1.2KB RAM,3KB Flash;
组件丰富,繁荣发展的软件包生态 ;                                
简单易用 ,优雅的代码风格,易于阅读、掌握;
高度可伸缩,优质的可伸缩的软件架构,松耦合,模块化,易于裁剪和扩展;
强大,支持高性能应用;
跨平台、芯片支持广泛,已经覆盖当前应用中的主流体系架构: ARM Cortex-M0/M0+,  ARM Cortex-M3/M4/7,  ARM Cortex-R4,  ARM Cortex-A8/A9 ARM920T/ARM926 etc,  MIPS32, x86,Andes,C-Sky, RISC-V, PowerPC
丰富的软件包
物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。

脚本语言相关的软件包:目前支持 JerryScript、MicroPython。

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

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

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

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

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


三、版本选择


四、内核启动流程
RT-Thread 支持多种平台和多种编译器,而 rtthread_startup() 函数是 RT-Thread 规定的统一启动入口。一般执行顺序是:系统先从启动文件开始运行,然后进入 RT-Thread 的启动 rtthread_startup() ,最后进入用户入口 main()。以MDK-ARM为例,使用了MDK的扩展功能$Sub与$Super,给 main 添加 $Sub$$ 的前缀符号作为一个新功能函数 $Sub$$main,这个 $Sub$$main 可以先调用一些要补充在 main 之前的功能函数(这里添加 RT-Thread 系统启动,进行系统一系列初始化),再调用$Super$$main 转到 main() 函数执行, 这样可以让用户不用去管 main() 之前的 系统初始化操作。 

五、自动初始化机制
自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。例如在串口驱动中调用一个宏定义告知系统初始化需要调用的函数,代码如下:

int rt_hw_usart_init(void)  {    
      ... ...
     rt_hw_serial_register(&serial1, "uart1", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,  uart);
     return 0;
}
INIT_BOARD_EXPORT(rt_hw_usart_init);    /* 使用组件自动初始化机制 */
示例代码最后的 INIT_BOARD_EXPORT(rt_hw_usart_init) 表示使用自动初始化功能,按照这种方式,rt_hw_usart_init() 函数就会被系统自动调用。

那么它是在哪里被调用的呢?实现的原理又是什么呢?

在哪里被调用的:

初始化顺序

宏接口

描述

1

INIT_BOARD_EXPORT(fn)

非常早期的初始化,此时调度器还未启动

使用该宏后,fn 将属于 “board init functions”

2

INIT_PREV_EXPORT(fn)

主要是用于纯软件的初始化、没有太多依赖的函数

使用该宏后,fn 将属于 “pre-initialization functions”

3

INIT_DEVICE_EXPORT(fn)

外设驱动初始化相关,比如网卡设备

使用该宏后,fn 将属于 “device init functions”

4

INIT_COMPONENT_EXPORT(fn)

组件初始化,比如文件系统或者 LWIP

使用该宏后,fn 将属于 “components init functions”

5

INIT_ENV_EXPORT(fn)

系统环境初始化,比如挂载文件系统

使用该宏后,fn 将属于 “enviroment init functions”

6

INIT_APP_EXPORT(fn)

应用初始化,比如 GUI 应用

使用该宏后,fn 将属于 “application init functions”

自动初始化原理:

RT-Thread 的自动初始化机制使用了自定义 RTI 符号段,将需要在启动时进行初始化的函数指针使用这些宏定义接口放到了该段中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的

六、内核对象模型
RT-Thread 内核采用面向对象的设计思想进行设计,系统级的基础设施都是一种内核对象,例如线程,信号量,互斥量,定时器等。内核对象分为两类:静态内核对象和动态内核对象,静态内核对象通常放在 RW 段和 ZI 段中,在系统启动后在程序中初始化;动态内核对象则是从内存堆中创建的,而后手工做初始化。

 RT-Thread 采用内核对象管理系统来访问 / 管理所有内核对象,内核对象包含了内核中绝大部分设施,这些内核对象可以是静态分配的静态对象,也可以是从系统内存堆中分配的动态对象;对象容器中包含了每类内核对象的信息,包括对象类型,大小等。对象容器给每类内核对象分配了一个链表,所有的内核对象都被链接到该链表上

七、I/O设备模型
1、框架
RT-Thread提供了一套简单的I/O设备模型框架,对不同的I/O设备进行管理;它位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层。这样使得设备的硬件操作与应用程序相互独立,双方只需关心各自的实现,从而降低代码的耦合性、复杂性、提高了系统的稳定性

 应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互

I/O 设备管理层实现了对设备驱动程序的封装,对应用程序提供访问底层设备的标准IO接口

设备驱动框架层是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现

设备驱动层是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。它负责创建和注册 I/O 设备,对于操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到 I/O 设备管理器中

2、设备驱动使用序列图
1、直接注册到I/O设备管理器中

设备驱动根据设备模型定义,创建出具备硬件访问能力的设备实例,将该设备通过 rt_device_register() 接口注册到 I/O 设备管理器中。
应用程序通过 rt_device_find() 接口查找到设备,然后使用 I/O 设备管理接口来访问硬件


 2、先注册到设备驱动框架

看门狗设备驱动程序根据看门狗设备模型定义,创建出具备硬件访问能力的看门狗设备实例,并将该看门狗设备通过 rt_hw_watchdog_register() 接口注册到看门狗设备驱动框架中。
看门狗设备驱动框架通过 rt_device_register() 接口将看门狗设备注册到 I/O 设备管理器中。
应用程序通过 rt_device_find() 接口查找到设备,然后使用 I/O 设备管理接口来访问硬件


3、设备类型
RT_Device_Class_Char             /* 字符设备       */
RT_Device_Class_Block            /* 块设备         */
RT_Device_Class_NetIf            /* 网络接口设备    */
RT_Device_Class_MTD              /* 内存设备       */
RT_Device_Class_RTC              /* RTC 设备        */
RT_Device_Class_Sound            /* 声音设备        */
RT_Device_Class_Graphic          /* 图形设备        */
RT_Device_Class_I2CBUS           /* I2C 总线设备     */
RT_Device_Class_USBDevice        /* USB device 设备  */
RT_Device_Class_USBHost          /* USB host 设备   */
RT_Device_Class_SPIBUS           /* SPI 总线设备     */
RT_Device_Class_SPIDevice        /* SPI 设备        */
RT_Device_Class_SDIO             /* SDIO 设备       */
RT_Device_Class_Miscellaneous    /* 杂类设备        */
八、FinSH控制台
FinSH 是 RT-Thread 的命令行组件,提供一套供用户在命令行调用的操作接口;支持权限验证、自动补全、查看历史命令等功能

 在设备端通常使用串口与PC机进行通讯

 FinSH 支持两种输入模式,分别是传统命令行模式(msh)和 C 语言解释器模式(C-Style),它们可以切换;两种模式下的命令不通用。C-Style 模式在运行脚本或者程序时不太方便且占用体积较大,推荐使用msh模式

msh 模式下,FinSH 与传统 shell(dos/bash)执行方式一致:command [arg1] [arg2] [...]
C-Style模式下,FinSH输入的命令必须类似 C 语言中的函数调用方式,即必须携带 () 符号,FinSH命令的输出为此函数的返回值。对于一些不存在返回值的函数,这个输出没有意义


 自定义FinSH 命令

类型

命令

描述

自定义msh命令

MSH_CMD_EXPORT(name, desc);

可以导出有参或无参的命令

自定义C-Style命令

FINSH_FUNCTION_EXPORT(name, desc);

导出一个函数

自定义C-Style变量

FINSH_VAR_EXPORT(name, type, desc);

导出一个变量

自定义命令重命名

FINSH_FUNCTION_EXPORT_ALIAS(name, alias, desc);

默认导出到C-Style模式;在重命名的命令名字前加 __cmd_ 就可以将命令导出到 msh 模式

九、ENV工具
Env是RT-Thread 推出的开发辅助工具,提供Scons编译构建环境、menuconfig图形化系统配置及基于git的软件包管理功能。ENV带有 SCons 和 Python,在 windows 平台使用 SCons 则不需要安装这两个软件,但需要自行安装 git 并加入环境变量。

1、menuconfig
menuconfig 是一种图形化配置工具,是RT-Thread 3.0 以上版本的特性,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。执行 menuconfig 命令时是通过读取当前 bsp 目录下的 Kconfig 文件来生成配置界面的,这个文件就是所有配置的总入口,它会包含其他目录的 Kconfig 文件。Kconfig文件中使用Kconfig语法在menuconfig的配置项中添加宏定义

 Kconfig语法:

1、config 语句表示一个配置选项的开始,紧跟着的是配置选项的名称,每个配置项可以有如下属性,表示该配置选项的类型、输入提示、依赖关系、 默认值、帮助信息等

配置选项的类型,bool 、string 、hex 、int 等
select 反向依赖关系
default 配置选项的默认值
2、menu/endmenu 语句用于生成菜单

3、if/endif 语句是一个条件判断

4、menuconfig 语句表示带菜单的配置项

5、depends on 表示依赖某个配置选项

6、source 语句用于读取另一个文件中的 Kconfig 文件

2、Scons构建工具
SCons 是一套由 Python 语言编写的开源构建系统,类似于 GNU Make,但是它采用不同于 Makefile 文件的方式,而是使用 SConstruct 和 SConscript 文件来组织源码结构。SCons 可以根据一定的规则或指令,将源代码编译成可执行的二进制程序,目前支持的编译器包括 ARM GCC、MDK、IAR、VisualStudio、Visual DSP。通常来说一个项目只有一 SConstruct(位于BSP目录下),但是会有多个 SConscript,是组织源码的主力军;一般情况下,每个存放有源代码的子目录下都会放置一个 SConscript文件,这些文件会被 BSP 目录下的 SConscript 文件 “找到” 从而将 rtconfig.h 中定义的宏对应的源代码加入到编译器中来。

Scons常用命令:

scons -c 清理编译目标

scons --target=iar/mdk4/mdk5 编译成目标工程

scons --dist 搭建项目框架,在 BSP 目录下生成 dist 目录,包含了RT-Thread源码及BSP相关工程,不相关的BSP文件夹及libcpu都会被移除,可以拷贝此工程到任何目录下使用。

 Scons用法:

SCons 提供了很多内置函数,利用这些函数,再配合一些简单的 Python 语法 就能向项目中添加或者删除源码

3、软件包管理器(package)
RT-Thread 提供一个软件包管理平台,这里存放了官方提供或开发者提供的软件包。该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。package 为开发者提供了软件包的下载、更新、删除等管理功能

pkgs --upgrade 命令是用来升级 Env 功能脚本本身和软件包列表的。没有最新的包列表就不能选择最近更新的软件包。

pkgs --update 命令是用来更新软件包本身的,比如说你在 menuconfig 中选中了 json 和 mqtt 的软件包,但是退出 menuconfig 时并没有下载这些软件包。你需要使用 pkgs --update 命令,这时候 Env 就会下载你选中的软件包并且加入到你的工程中去。

menuconfig -s/--setting 命令用来修改Env的默认配置,如果不想每次更换软件包后使用 pkgs --update 命令,在使用 menuconfig -s/--setting 命令后配置 Env 选择每次使用 menuconfig 后自动更新软件包即可。

 十、RT-Thread Studio
RT-Thread 一站式开发工具,主要包括工程创建和管理,代码编辑,SDK管理,RT-Thread配置,构建配置,调试配置,程序下载和调试等功能,结合图形化配置系统以及软件包和组件资源,减少重复工作,提高开发效率。


————————————————
版权声明:本文为CSDN博主「hurryddd」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37845735/article/details/124547624

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RT-Thread实时操作系统简介 的相关文章

  • 生成随机数方法总结

    使用srand time NULL 或srand time 0 设置当前的系统时间值为随机数种子 xff0c 需要在头文件处使用 include lt cstdlib gt 和 include lt ctime gt 要取得 a b 的随机
  • 尚硅谷_JavaScript_学习笔记

    JavaScript简介 JavaScript 简介 xff1a JavaScript 是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言 xff0c 是一种动态 弱类型 基于原型的语言 xff0c 内置支持类 它的解释器被称为 Ja
  • SQL语句拼接常加 where 1=1 的原因

    数据库在进行查询的时候 xff0c 经常看到有的人使用where 1 61 1和1 61 0 1 61 2等的查询 xff0c 这种条件在执行前 xff0c 就会被计算出true 或者false xff0c 1 61 2实际解释为 NULL
  • 如何完全屏蔽Chrome的提示:"请停用以开发者模式运行的扩展程序"

    参考链接 xff1a chrome怎么安装非官方市场的插件 xff1f https www zhihu com question 24027794 屏蔽Google Chrome安装第三方插件之后反复提示 请停用以开发者模式运行的扩展程序
  • Win7中出错:无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll

    安装完 Python 后 xff0c 配置好 Python 目录于 Path xff0c 然后 CMD 命令下输入 python 验证是否配置成功 xff0c 但是竟然出现结果跳出对话框 xff0c 出错 xff1a 无法启动此程序 xff
  • rviz global status显示为error的问题解决

    rviz global status显示为error的问题解决 运行ros官方教程中程序rosrun rviz rviz d rospack find turtle tf rviz turtle rviz rviz 发现出现的结果 xff0
  • Chrome浏览器各个版本区别及离线安装包下载

    chrome现在分为 Stable Beta Dev Canary xff08 金丝雀 xff09 Chromium 五个版本 这五个版本的不同在于功能 稳定性 更新速度等方面 Chromium的更新速度很快 xff0c 每隔数小时即有新的
  • 【总结】浏览器 User-Agent 大全

    一 基础知识 Http Header之User Agent User Agent中文名为用户代理 xff0c 是Http协议中的一部分 xff0c 属于头域的组成部分 xff0c User Agent也简称UA 它是一个特殊字符串头 xff
  • Visual Studio 2017各版本安装包离线下载、安装全教程

    微软最近发布了正式版Visual Studio 2017并公开了其下载方式 xff0c 不过由于VS2017采用了新的模块化安装方案 xff0c 所以微软官方并未提供ISO镜像 xff0c 但是官方提供了如何进行离线下载的方案给需要进行离线
  • Python基础入门笔记(一)

    前言 xff08 认识Python xff09 既然学习 Python xff0c 那么至少得了解下这门语言 xff0c 知道 Python 代码执行过程吧 Python 的历史有兴趣的百度百科下就有 xff0c 这个不多说了 1 我们先来
  • Spring学习笔记1

    前言 Spring框架的学习路线 xff1a Spring第一天 xff1a Spring的IOC容器之XML的方式 xff0c Spring框架与Web项目整合Spring第二天 xff1a Spring的IOC容器之注解的方式 xff0
  • GitHub学生包的介绍与申请

    1 Github学生包介绍 1 Github学生包是什么 xff1f GitHub 学生包是一个由 GitHub 免费提供给学生的福利 xff0c 里面包括了计算机专业可能用到的很多付费资源 xff0c 其中包含一系列网站服务的打折 代金券
  • (二)GitHub的使用随记

    一 Git及GitHub的使用 1 突破GitHub单个大文件上传限制 GitHub 上新建的仓库容量大小限制在 1G xff0c 单个文件不能超过 100M xff0c 有 50M 的文件 xff0c 就会警告了 可通过以下命令查找超过
  • 总结一个月以来调试STM32底盘踩过的坑

    深坑1 xff1a 基本配置方法 xff1b 配置PWM输出 xff0c TIM4有四路PWM输出 xff0c 依葫芦画瓢开始配置 xff0c 配置完后 xff0c 开始测试 xff0c 啥都没有啊 xff0c 很是伤心 xff0c 开始查
  • Android开发60条技术经验总结

    1 全部Activity可继承自BaseActivity xff0c 便于统一风格与处理公共事件 xff0c 构建对话框统一构建器的建立 xff0c 万一需要整体变动 xff0c 一处修改到处有效 2 数据库表段字段常量和SQL逻辑分离 x
  • 无人机利用视觉slam实现位置估计

    无人机利用视觉slam实现室内位置估计 自己近期所做的以及思考的东西 我们实验室买了阿木的p200 带t265 无人机用于无人机的控制研究 xff0c 通过阿木实验室的ros功能包px4 command可以 无脑的实现飞机的悬停功能 xff
  • 学习api的使用方式

    网上有很多API教程 xff0c 但是都是针对单个API的使用来讲解 xff0c 但是如果遇到网上没有教程的API呢 xff1f 这篇教程的目的就是这样 xff1a 当遇到一个不会的API的时候 xff0c 懂得如何利用资料学会使用这个AP
  • 解决favicon.ico无法显示的问题

    今天在做站的时候发现网站favicon ico图标不显示 xff0c favicon是什么 xff1f 其实我们在浏览器看网页的时候 xff0c 在地址栏的左边 xff0c 你就可以看到一个小的图标 xff08 每个网站都不一样 xff09
  • RTK和GPS定位

    GPS定位的基本原理是 xff0c 测量出已知位置的卫星到地面GPS接收器之间的距离 xff0c 然后接收器通过与至少4颗卫星通讯 xff0c 计算与这些卫星间的距离 xff0c 就能确定其在地球上的具体位置 普通GPS的定位精度 1米 x
  • ESP8266EX 串口WIFI无线模块

    介绍 内部跑LWIP协议 xff0c 支持三种模式 xff1a AP STA AP 43 STA共存模式 简洁高效的AT指令 特点 支持无线802 11 b g n标准 支持STA AP STA 43 AP 三种工作模式 内置CTP IP协

随机推荐

  • Cesium球心坐标与本地坐标系经纬转换的数学原理—矩阵变换

    之前整理过 xff1a 透析矩阵 xff0c 由浅入深娓娓道来 高数 线性代数 矩阵 三维旋转笔记 欧拉角 四元数 旋转矩阵 轴角 记忆点整理 xff0c 这次转载 FuckGIS的 Cesium之球心坐标与本地坐标 xff0c 算是线性代
  • 怎么在keil官网上下载芯片固件包(*.pack)

    第一步 xff1a 登录keil官网 www keil com 第二步 xff1a 点击 Product 第三步 xff1a 点击 ARM development tools 第四步 xff1a Public software Packs
  • UCOS开发手册中关于OSQPend()函数讲

    转自 xff1a http www openedv com thread 44168 1 1 html UCOS开发手册中 第十章 UCOSIII消息传递 章节中关于等待消息队列的函数OSQPend 讲解有误 xff0c OSQPend 函
  • ucos-ii学习笔记——信号量集(事件标志组)的原理及使用

    xfeff xfeff ucos ii学习笔记 信号量集 事件标志组 的原理及使用 Created on 2012 10 8 Author zhang bin 学习笔记 for ucos ii PC redesigned by zhang
  • 低速容错CAN:ISO 11898-3 与ISO 11519-2标准两者关系

    xfeff xfeff 有关 低速容错CAN xff1a ISO 11898 3 与ISO 11519 2标准两者关系 最近有几个客户问到这个问题 xff0c 对应的产品是否兼容 于是上ISO官网查看发现并无两者的关系 xff0c 不过在网
  • CAN总线仲裁机制--对于多个节点同时发送相同ID的报文

    最近在学习CAN总线 xff0c 原先一直不太明白 xff0c 若有A xff0c B 2个节点同一时刻一起向总线上发送数据 xff0c CAN总线是怎么仲裁的 xff0c 来让A xff0c B其中一个节点退出 xff0c 保证高优先级的
  • roslaunch mavros px4.launch fcu_url=xxxx到底做了什么

    roslaunch mavros px4 launch fcu url 61 xxxx到底做了什么 一言以蔽之 xff0c roslaunch mavros px4 launch fcu url span class token opera
  • PX4,ROS,gazebo仿真

    https gitee com bingobinlw some tree master Overview Simulation Px4 command Slam map image process planning P200 AmovCar
  • 飞行控制PID算法——无人机飞控

    PID控制应该算是应用非常广泛的控制算法了 小到控制一个元件的温度 xff0c 大到控制无人机的飞行姿态和飞行速度等等 xff0c 都可以使用PID控制 这里我们从原理上来理解PID控制 PID proportion integration
  • Ubuntu20.04桌面版图文安装(超详细)

    Ubuntu20 04桌面版图文安装 xff08 超详细 xff09 一 准备工具 VMWare Workstation15 Pro xff1b ubuntu 20 04 desktop amd64 iso xff1b 二 虚拟机初始配置
  • 嵌入式芯片概念梳理 - CPU、MCU、MP、DSP、FPGA、ASIC

    CPU中央处理单元包含基本的运算单元AUL xff0c 存储单元cache等基本资源 xff0c 实现硬件设备的基本控制功能 中央处理器作为一个普世概念 xff0c 实际根据具体数据处理功能方向不同 xff0c 细分位DSP MCU和MP
  • UART、I2C、USB、SPI、CAN、Jtag、PCI/PCIE协议汇总

    协议通信方式UART串行全双工I2C SPI是串行外设接口 xff08 Serial Peripheral Interface xff09 的缩写 SPI是一种高速的 全双工 同步的通信总线 xff0c 并且在芯片的管脚上只占用四根线 xf
  • busybox概述

    busybox是什么 xff1f xff08 1 xff09 busybox是Linux上的一个应用程序 application xff0c 即只有一个ELF文件头 xff08 2 xff09 它整合了许多Linux上常用的工具和命令 xf
  • SR-IOV

    SSR IOV是Single Root I O Virtualization的缩写 在虚拟机中 xff0c 一切皆虚拟 比如网卡 xff0c 虚拟机看来好像有一个真实网卡 xff0c 但是这个网卡是宿主机虚拟出来的硬件 xff0c 也就是一
  • 希尔排序算法

    本章介绍排序算法中的希尔排序 内容包括 xff1a 1 希尔排序介绍 2 希尔排序图文说明 3 希尔排序的时间复杂度和稳定性 4 希尔排序实现 4 1 希尔排序C实现 4 2 希尔排序C 43 43 实现 4 3 希尔排序Java实现 转载
  • 归并排序算法

    概要 本章介绍排序算法中的归并排序 内容包括 xff1a 1 归并排序介绍 2 归并排序图文说明 3 归并排序的时间复杂度和稳定性 4 归并排序实现 4 1 归并排序C实现 4 2 归并排序C 43 43 实现 4 3 归并排序Java实现
  • 拓扑排序算法

    拓扑排序介绍 拓扑排序 Topological Order 是指 xff0c 将一个有向无环图 Directed Acyclic Graph简称DAG 进行排序进而得到一个有序的线性序列 这样说 xff0c 可能理解起来比较抽象 下面通过简
  • 线性时不变系统输出调节问题

    线性时不变系统输出调节问题 最近在学习 Nonlinear output regulation 中的linear output regulation时 xff0c 对于linear robust output regulation的问题时
  • MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本

    MinGW w64安装教程 著名C C 43 43 编译器GCC的Windows版本 MinGW w64安装教程 著名C C 43 43 编译器GCC的Windows版本 本文主要讲述如何安装 C语言 编译器 MinGW w64 xff0c
  • RT-Thread实时操作系统简介

    目录 一 概述 二 架构 三 版本选择 四 内核启动流程 五 自动初始化机制 六 内核对象模型 七 I O设备模型 1 框架 2 设备驱动使用序列图 3 设备类型 八 FinSH控制台 九 ENV工具 1 menuconfig 2 Scon