RT-thread国产实时操作系统概述
RT-Thread实时操作系统是一个分层的操作系统,它包括了:
• 组件层components,这些是基于RT-Thread核心基础上的外围组件,把一些功能模块划分成独立的一个个组件模块,做到组件与组件之间的低耦合,组件内部的高内聚。
例如文件系统,命令行shell接口,lwIP轻型TCP/IP协议栈,GUI图形用户界面等。
• 硬实时内核kernel,这层是RT-Thread的核心,包括了内核系统中对象的实现,例如多线程及其调度,信号量,邮箱,消息队列,内存管理,定时器等实现。
•分支接口porting,主要由libcpu以及不同硬件平台的bsp构成,即RT-Thread支持的一个个芯片移植,外设驱动等

在官网http://www.rt-thread.org/下载RT-Thread v2.0.0正式版,解压后:

bsp: 针对各个具体开发板、平台的目录,其中包含相应的Keil工程文件(如果包含了Keil MDK的移植)
components:各个组件,如dfs/drivers/finsh/gdb/libc/libdl/net/vbus/vmm等
documentation/examples:辅助文档以及一些内核、组件的测试实例
include:包含了RT-Thread内核头文件
libcpu: 面向各个芯片cpu移植的代码
src:包含了RT-Thread内核源文件
tools:支持各种集成开发环境的python文件,如常见的iar.py/keil.py/sconsui.py/vs2012.py
v2.0.0版本相对v1.2.x版本,又加入众多新功能,有些很有趣,有些很实用:
1. 设备驱动框架在v2.0.0版本中进一步完善。DeviceDriver在RT-Thread中类似抽象的驱动框架层,初衷是,向应用层(或组件)提供标准统一的接口,向下(底层硬件)提供简化的编程模型,在v2.0.0版本中,新添加了:SPI NorFlash(ATMEL/SST/华邦等厂家),SPI ETH(ENC28J60),SPI WiFi(RW009)等的驱动,这些驱动依赖于RT-Thread的SPI抽象模型,提供了抽象、无需修改的外设驱动代码;类似的,建立在I2C驱动框架上,v2.0.0版本也引入了sensor的驱动框架,并提供了MPU6050、BMI055等传感器的驱动;作为杂类设备的尝试,GPIO(IO pin)的抽象框架也终于在这个版本提出来了,以后点灯简单啦!
2. 在1.x系列版本中,USB device/host框架支持得一般,不能说非常棒,而在v2.0.0版本中,USB框架通过逐步的重构,也开始走向成熟,在服务公司里也应用到多个项目,多个处理器上;
3. 为了方便的切换不同的编译器平台,在v2.0.0版本中也把原来的minilibc/newlib/armlibc用统一的宏替换:RT_USING_LIBC。老版本的代码迁移过来,请注意下使用新的、统一的宏:RT_USING_LIBC。同时也加入了IAR的dlib,这样当配置中打开LIBC时,scons将会自动根据你当前使用的编译器来自动选择不同libc库的移植;
4. GDB stub,这部分是CSDN编程夏令营活动的成果之一,一直觉得类似夏令营的活动很好,可以拉近学生和开发者的距离。通过这个组件,终于可以让RT-Thread可以进行软件方式的调试了,虽然是命令行方式的GDB,但它也有很多图形化前端配合来进行源码级的调试仿真;
5. lwIP相关的更新。这个貌似有很多,引爆点应该说是一个很热门的词:物联网。围绕着这个,v2.0.0版本中加入了RW009这样的简单易用的Wi-Fi网卡驱动,IPv4/v6双协议栈的支持,DHCP server,甚至是NAT这样的地址转换实现,哦,用RT-Thread来做小路由,网关变成了可能。哦,RT-Thread的目标并不是物联网,更重要的是它是一套基础性的软件平台。
6. 随着Linux/RT-Thread同时执行的方式,相应的VMM组件,VBUS组件也在这个版本上发布出来。VMM组件更多的侧重于单核,Linux/RT-Thread双系统并行执行以获得更好的实时性,而VBUS组件则解决了Linux/RT-Thread双系统之间的数据通信问题。两者是相辅相成的。这两个组件要求的技术性也更高,一般用于一些可靠性要求非常高的场合。在RT-Thread 2.0.0版本中也终于支持了LPC4357这样的小异构系统(LPC4357中包含了ARM Cortex M4/M0两个异构核心),实现了M4/M0上分别运行RT-Thread系统,两者之间则通过VBUS进行通信。所以,对多系统/VBUS感兴趣的同学可以从LPC4357上入手。
在开发的过程中也出现了一个附加品,QEMU/realview上模拟执行RT-Thread(或者Linux/RT-Thread)的BSP,它可以让未经修改的标准QEMU,去软件仿真模拟执行RT-Thread,或更进一步,执行Linux/RT-Thread。
RT-Thread v2.1.0 roadmap
下一个版本应该是一个小版本,不可能总是类似原来,每次都出大版本很多人来询问过下一个版本的计划是什么。其实我想说,RT-Thread是一个开源社区,RT-Thread的后续发展在社区,属于每一个社区参与者,你想在里面加入什么样的功能,做好哪部分的工作,关键在于每个社区的参与者。只要符合RT-Thread的东西(例如许可证上没有冲突),我也没理由不把它放到RT-Thread开发主干上来。所以我下面提及的更多代表的是我个人的一些想法,社区还是需要更多的多样性,社区是属于你的,只要你参与进去做!
1. CloudIDE,这个是托管在http://lab.rt-thread.org/cloudide 上(可能因为备案的问题暂时不通)的在线方式的集成开发环境,嗯,有些类似mbed但是希望有自己的特色,以及希望它是属于国内的Online IDE,速度能够快些。这部分也在密集的进行改版,演变成多标签页编辑方式;配合Wi-Fi入门套件,进行在线方式更新固件;加入开发者间的代码片段,组件分享功能;集成文档帮助等信息等等;创建这个的初衷是希望新手入门能够方便些,而不是受搭建开发环境的困扰,需要的只是一个浏览器。Wi-Fi入门套件,暂时称为ART-wifi吧,简单的名字就是一个称呼,名字而已。
2. 去年12月份上海嵌入式沙龙活动中,weety提到了POSIX兼容性的问题,导致Linux的一些程序并不那么容易移植过来(或者说后续的代码一致性),这里主要问题在于BSD socket接口是完全属于lwIP协议栈,而和RT-Thread的文件接口没关系,所以在RT-Thread上没有socket/file descriptor/device间的select/poll/read/write等调用;另外一个隐含问题是,POSIX实现也不是那么标准,可能里面还有一些坑等。这个问题是一个大问题,因为关键点在于,大家既然选择了开源的系统,那么他肯定也考虑到开源生态很好,有很多的资源可以使用,可以左右逢源。。。所以,RT-Thread也需要以更开放的姿态来解决这个问题,使得它能够更开放,增强POSIX标准本身的亲和力。相类似的,它也应该更好地支持一些C++标准,基础设施RT-Thread已经提供了,后面如何去应用,那么就看用户的想法、创新性有多大了。
3. 一些重型平台的支持,例如市场上新出的一些堆叠封装了SDRAM/DDR的ARM9,Cortex-A8/9,MIPS32/64,甚至是x86,这个肯定也会逐步地演变成RT-Thread的目标硬件平台,但是这个投入也会比较重。如果上面的第二项解决了,也不是不可能,首要解决的是底层驱动的问题,这样后续就比较容易和上面的组件、应用粘合起来。
好了,以下是想到的无责任feature list,感兴趣的同学可以来认领:
* CloudIDE相关
- 完善NAT功能,把ART-wifi变成一个Wi-Fi中继(路由)。
- 期待在CloudIDE上分享MQTT组件,CoAP组件;
- 期待把ART-wifi变成一个Wi-Fi/6LoWPAN网关。
- 期待把ART-wifi变成一个Wi-Fi/nRF51822 6LoWPAN网关,Wi-Fi/nRF51822 BLE网关;
- 期待把ART-wifi变成一个多轴飞控,并跑一些PX4的算法代码;
- 期待在CloudIDE上分享乐联网物联网接入组件;
- 期待在CloudIDE上分享yeelink物联网接入组件;
- 期待在CloudIDE上分享SSL组件;
- 期待在CloudIDE上分享阿里云,机智云,百度云,腾讯云等等接入组件;
- 更多的传感器驱动,例如气压计,温度计,光照,9轴传感器等;
- 期待在CloudIDE上加载RealBoard 4088 APP开发功能;
- 期待在CloudIDE上加入图形用户界面设计功能;
- 期待把CloudIDE变成本地化的桌面应用程序;
* POSIX相关
- 针对lwIP实现DFS上相应的lwIP fs接口,让DFS的fd和lwIP socket关联起来;实现select/poll接口;
- 更好的把device接口和DFS devfs融合起来;协同实现好select功能;
- 加入更多POSIX相关接口,包括但不限制于aio,signal等功能;
- 整理DeviceDriver框架,让device接口,和各自设备驱动接口分离开来。应用程序更多的倾向于使用device接口,固件开发可以使用设备驱动接口;
* 其它
- openbsd的TCP/IP协议栈移植;openbsd POSIX外围接口移植;
- canopen组件;
- ARM Cortex-A8/A9 + M4/M3的多系统(硬件)平台;
- 其他一些硬件移植;
以上摘自http://www.rt-thread.org/phpBB3/topic3965.html
与v2.0.0RC版本相比,主要有以下改进:
内核
console以RT_DEVICE_FLAG_STREAM参数打开字符设备;
在rt_memheap_free中加入更多的断言检查;
组件
更新RW009驱动以支持Wi-Fi SoftAP模式(aozima);
修正sensor框架的一些问题,并加入C API接口(睿赛德服务公司提供);
加入MPU6050 sensor的代码(bernard, Coing);
加入BMI055 sensor的代码(Coing);
当未使能heap时,修正finsh/msh中list_memheap的问题;
修正LIBC编译的警告;
加入IAR dlib相关的移植,使得应用能够使用标准的API接口;
修正YMode握手时可能引起的竞争问题(grissiom);
更新FreeType版本到2.5.4
单独把C++的全局对象初始化放到cplusplus_system_init函数中,并在初始化线程中调用;
finsh中以RT_DEVICE_FLAG_STREAM参数打开字符设备;
添加VBUS组件用于Linux与RT-Thread系统之间,RT-Thread与RT-Thread系统之间通信(睿赛德服务公司捐赠);
增加lwIP/NAT组件,可以做多个网口间的地址转换(Hicard);
增加lwIP/DHCP服务端,用于向客户端分配IP地址(睿赛德服务公司提供);
BSP
修正LPC4357串口驱动初始化时过早打开中断的问题(nongxiaoming);
重写LPC4357串口驱动,并让芯片上M4/M0核心分别都执行RT-Thread系统,两核心之间以VBUS组件进行系统间通信(睿赛德服务公司捐赠);
新增RX移植(limxuzheng);
新增NuMicro M051 Series移植,支持GCC、Keil MDK编译器(bright-pan);
新增LPC54102移植(Coing);
移除STM32F4 BSP中不需要的RT_TIMER_TICK_PER_SECOND配置(pangweishen);
在Linux Clang编译分析中,强制以32位模式进行编译(grissiom);
修正STM32F103中串口驱动中断过早打开的问题(armink);
工具
增加scons中的MD5支持(bright-pan);
以上摘自http://www.rt-thread.org/node/98
RT-thread国产实时操作系统概述的更多相关文章
- RT Thread 通过ENV来配置SFUD,操作SPI Flash
本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...
- STM32 + RT Thread OS 学习笔记[二]
串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1. 目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...
- STM32 + RT Thread OS 串口通讯
1. 创建项目 a) 禁用Finsh和console b) 默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...
- STM32 + RT Thread OS 学习笔记[三]
RTGUI 据说RTGUI是多线程的,因此与RT-Thread OS的耦合度较高,有可能要访问RT-Thread的线程控制块.如果要移植到其它OS,估计难度较大.目前还处于Alpha状态,最终将会包含 ...
- STM32 + RT Thread OS 学习笔记[四]
1. 补注 a) 硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,M ...
- RT thread 设备驱动组件之USART设备
本文以stm32f4xx平台介绍串口驱动,主要目的是:1.RTT中如何编写中断处理程序:2.如何编写RTT设备驱动接口代码:3.了解串行设备的常见处理机制.所涉及的主要源码文件有:驱动框架文件(usa ...
- RT Thread的SPI设备驱动框架的使用以及内部机制分析
注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...
- RT Thread SPI设备 使用
后记: 之前,我把SPI的片选在Cubemx中配置成了SPI_NSS.现在我给它改为了GPIO_OUTPUT. 同时参考了别人的类似的一个操作无线模块(采用SPI设备驱动)的例子程序(清楚了RTT的 ...
- 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...
随机推荐
- 环境变量Path简介
更多详细专业的详解,请参见:http://www.cnblogs.com/sunada2005/articles/2725277.html 什么是Path变量: PATH环境变量.作用是指定命令搜索路 ...
- APP支付 + 退款(JAVA实现)
首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档! https://pay.weixin.qq ...
- 北京Uber优步司机奖励政策(2月22日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Android Parcelable 源码解析
大家都知道,要想在Intent里面传递一些非基本类型的数据,有两种方式,一种实现Parcelable,另一种是实现Serializable接口. 今天先不说Serializable 接口,只说Parc ...
- andriod学习二 设置开发环境
1.官方环境搭建步骤 http://developer.android.com/sdk/installing/index.html 包括:下载JDK6,Eclipse 3.6, ...
- 金山注入浏览器默认开启上网导航 www.uu114.cn
金山注入浏览器默认开启上网导航 www.uu114.cn 今天突然发现我的电脑所有浏览器打开后,都会默认打开一个www.uu114.cn网站,chrome.firefox和IE都中招了.经过排查,发现 ...
- 180612-Spring之Yml配置文件加载问题
Yml配置文件加载问题 在resource目录下有一个application.yml文件,希望是通过@PropertySource注解,将配置文件数据读取到Environment中,然而调试发现数据始 ...
- 各种对list,string操作函数的总结
#encoding=utf-8#reverse,用来反转lista=['aa','bb','cc']a.reverse()print a#['cc', 'bb', 'aa']#不能直接print a. ...
- UE4蓝图小记
http://www.element3ds.com/forum.php?mod=viewthread&tid=76930&page=1&authorid=104414 http ...
- Java应用基础微专业-设计篇
第1章--抽象与接口 1.1 抽象 An abstract class can be created without abstract methods, the purpose of doing th ...