网址:
http://www.rt-thread.org
内核及组件
实时线程操作系统(RT-Thread) 是一款主要由中国开源社区主导开发的开源实时操作系统(许可证GPLv2)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用 系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,文件系统,libc接口,图形用户界面等。
实时操作系统核心 虚拟文件设备系统 轻型网络协议栈 图形用户界面 - 用户shell
实时操作系统核心
RT-Thread实时操作系统核心是一个高效的硬实时核心,它具备非常优异的实时性、稳定性、可剪裁性。
最小可以到3k ROM占用、1k RAM占用。
- 内核对象系统
实时线程操作系统内部采用面向对象的方式设计,内建内核对象管理系统,能够访问/管理所有内核对象。内核对象包含了内核中绝大部分设施,而这些内核对象可 以是静态分配的静态对象,也可以是从系统内存堆中分配的动态对象。通过内核对象系统,RT-Thread可以做到不依赖于具体的内存分配方式,伸缩性得到 极大的加强。
- 任务/线程调度
支持以线程为基本调度单位的多任务系统。调度算法是基于优先级的全抢占式线程调度,支持256个线程优先级(亦可配置成32个线程优先级),0优先级代表 最高优先级,255优先级留给空闲线程使用;相同优先级上支持多个线程,这些相同优先级的线程采用可设置时间片长度的时间片轮转调度;调度器寻找下一个最 高优先级就绪线程的时间是恒定的(O(1))。系统不限制线程数量的多少,只与物理平台的具体内存相关。
- 同步机制
系统支持semaphore,mutex等线程间同步机制。mutex采用优先级继存方式以防止优先级翻转。semaphore释放动作可安全用于中断服 务例程中。同步机制支持线程按优先级等待或按先进先出方式获取信号量或互斥锁。
- 通信机制
系统支持event,mailbox,message queue通信机制等。event支持多事件"或触发"及"与触发",适合于线程等待多个事件情况。mailbox中一个mail的长度固定为4字节,效 率较messagequeu高。通信设施中的发送动作可安全用于中断服务例程中。通信机制支持线程按优先级等待或按先进先出方式获取。
- 时钟,定时器
系统默认使用时钟节拍来完成同优先级任务的时间片轮转调度;线程对内核对象的时间敏感性是通过系统定时器来实现的;定时器又分成了硬定时器和软定时器,一 次定时及周期性定时。
- 内存管理
系统支持静态内存池管理及动态内存堆管理。从静态内存池中获取/释放内存块时间恒定,而当内存池空时,可根据申请线程请求把申请线程挂起、立刻返回、或等 待一段时间仍未获得返回。当其他线程释内存块到内存池时,将把挂起的线程唤醒。对于系统内存紧张的系统,RT-Thread也提供了小型的伙伴内存管理算 法。而对于拥有大一些内存的嵌入式系统,RT-Thread提供了性能非常高效的SLAB内存管理系统。
- 诊断
通过系统提供的FinSH shell系统,能够查看到线程,信号量,互斥锁,事件,邮箱,消息队列的运行情况,以及各个线程的栈使用情况。
RT-Thread与UCOS-II的对比
| UCOS-II | RT-Thread |
任务/线程调度 | 256 个优先级,
不允许有相同优先级任务
最大256个任务 | 256/32/8个优先级,
允许存在相同优先级线程
线程数不限制
允许动态创建/删除线程 |
同步互斥机制 | semaphore,mutex
mailbox, message queue, event
mailbox只能存放1条消息 | semaphore, mutex
mailbox, message queue,
event
mailbox可存储多条消息 |
内存管理 | 固定大小内存块管理 | 固定分区内存管理
小内存系统动态内存管理
大内存系统SLAB内存管理 |
定时器 | 只能使用OSTimeDly进行时间间隔处理 | 挂接到OS定时器的硬定时器或软定时器 |
中断嵌套 | 允许 | 允许 |
虚拟文件设备系统
RT-Thread实时操作系统中实现的是一套面向嵌入式设备的虚拟设备文件系统,它结合和嵌入式系统与Linux虚拟文件系统的特点,形成一套细粒度的统一接口封装层,具有内存占用少、上层应用接口与底层具体的文件系统实现无关的特点。
设备虚拟文件系统实现采用了三层结构:
最顶层的是虚拟文件系统接口,通过它能够适配下层不同的文件系统格式,例如个人电脑上常使用的FAT文件系统,或者是嵌入式设备中常用的 flash文件系统。RT-Thread的VFS提供了向上层的标准C函数适配。
FAT文件系统
RT-Thread 0.3.0正式版本中主要支持FAT文件系统,主要特征包括:
- FAT12/16/32文件系统格式;
- 长文件名支持;
- 多分区挂载支 持
底层驱动
在RT- Thread 0.3.0正式版本中,文件系统支持的驱动主要是包括了SPI接口的Flash、SD/MMC卡以及SDIO接口的SD/MMC卡。
轻型网络协议栈
LwIP轻型协议栈
lwIP 是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈,它在包含完整的TCP协议实现基础上实现了小型的资源占用,因此它十分适合于 使用到嵌入式设备中,占用的体积大概在数十kB RAM和40KB ROM代码左右。在RT-Thread实时操作系统的移植中,对它进行了部分优化,在保留它全部功能的同时,把它的常规内存占用减少到了10kB RAM以下。
LwIP的特性如下
- 支持多网络 接口下的IP转发;
- 支持ICMP协议;
- 包括实验性 扩展的UDP(用户数据报文协议)
- 包括阻塞控 制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)
- 提供专门的 内部回调接口(Raw API)用于提高应用程序性能
- 可选择的 Berkeley接口API
- DHCP动 态分配IP地址协议及PPP协议
- Ethernet 的ARP地址解析协议
TFTP Client、FTP ServerRT-Thread在使用LwIP的基础上亦实现了上层的一些应用协议,例如TFTP客户端,FTP服务端等应用协议,通过它可以在设备文件系统与网络侧进行文件传输操作。
GoAhead WebServerGoAhead Web服务器是一套广泛应用于嵌入式设备的Web服务器,它是一套源码公开的、功能强、可运行于多个平台的嵌入式WebServer。
GoAhead WebServer的主要特性有:
- 支持ASP
- 嵌入式的JavaScript
- 标准的CGI 执行
- 内存中的CGI处理GoFroms
- 扩展的API
- 快速响应,每秒可处理超过50个请求
- 完 全和标准兼容
- Web页面可以存在ROM或文件系统中
图形用户界面
用于嵌入式设备的RT-Thread/GUIRT- Thread携带的图形用户界面是专为嵌入式系统而制作的,在传统窗口式的图形用户界面基础上引入了面板的概念:
面板
,一个完整的屏幕是由数个相互不重叠的面板构成,在面板自己所属的可视区域 内,绘图几乎可以畅通无阻的自由绘画:独占可视区域。面板上的应用程序(RTGUI中称为workbench),可以直接操纵系统底层的视频缓冲,从而达 到直接写屏的操作。
另 外,RTGUI结构也是一种C/S的结构:每个Client端都受Server端进行管理。但和桌面上的C/S结构不同,Server端并不包含绘图操 作,而是把绘图操作交给了Client —— workbench或窗口。Workbench可以进行自己独立的绘图操作(使用RTGUI提供的API,或者直接对视频帧缓冲,FrameBuffer 进行读写)。RTGUI同样保留了传统意义的窗口环境,稍微不同的是,窗口是具备最高优先级的,永远处于Workbench的顶端,适合做为消息窗口或输 入显示出来。
RT-Thread 0.3.0版中RTGUI的特征包括:
- 支持Workbench及窗口机制
- 基本的widget
- 自 动布局控件
- 中文点阵字体显示
- 中文拼音输入法
RTGUI实际屏幕效果图:
基本控件
中文输入
STM32网络收音机播放主界面
用户shell
用户shell由 admin 于 星期三, 04/14/2010 - 20:45 发表
finsh shell
具备语言色彩的用户shell系统,包含自动完成,历史记录支持
呵呵
我试过,比UCOS好
我们要支持国产! 支持开源!
引用: 原帖由 ljt8015 于 2010-4-27 17:12 发表
我试过,比UCOS好
我们要支持国产! 支持开源!
说得太动听了,过了就不好。做技术的,更相信的是实力!
与rt作者的对话记录,大家参考一下吧。
wangkj 9:47:02
8K byte的flash
wangkj 9:47:26
所以,做成80*25的ascii文本终端上完全没问题的。
非飞 9:47:27
其他的,TCP/IP、文件系统、内核等,基本上要好过ucos很多。GUI这部分目前也在优化,力图做到更大的竞争力
wangkj 9:47:59
我知道另外一个ecgui项目,
非飞 9:48:19
但是确实不太想去专牛角尖
wangkj 9:48:22
我其实最想就是实现51 jpeg解码。
wangkj 9:48:42
这个我都找到资料里,帖子里面提到过。
wangkj 9:49:04
我也大概看了jpeg算法。通过优化确实可以实现。
非飞 9:49:07
所以,51这种基本上不会考虑支持,因为51是另一种模式,何必强行打断已有的模式,而且对自己也吃力不讨好呢
wangkj 9:49:20
这个我只是建议。
wangkj 9:49:43
基于商业的建议,如果从简单考虑,arm确实容易太多了。
非飞 9:49:44
ecgui不知道它实现现在依然开发着
wangkj 9:50:00
非开发的。
wangkj 9:50:05
非开放的。
非飞 9:50:11
你这个是7寸屏吧
wangkj 9:50:19
是vga显示器。
非飞 9:50:38
直接接VGA显示器?
wangkj 9:50:50
这样成本低。屏的话,只有商业用户才用得到。
wangkj 9:50:53
对。
wangkj 9:51:40
其实,对你而言,我fpga部分开不开源,对你无所谓的。
wangkj 9:52:05
你只需要写点就可以了,甚至我可以给你加块填充硬件加速。
wangkj 9:52:56
而且,非商业化版本,肯定成本价格提供,只是加点限制,比如打个logo之类的防止商业应用就行。
非飞 9:53:23
是的,有写点,那么我就基本上可以当图形来用。只是这样分辨率太大,刷新会很成问题
wangkj 9:53:46
所以,我正在考虑硬件加速。
wangkj 9:53:58
实际上,用硬件spi,每秒刷10屏不成问题。
非飞 9:54:07
硬件加速肯定是需要的,否则没啥办法用
wangkj 9:54:15
我可以做成160*120等非标准分辨率。
非飞 9:54:23
640 x 480?
wangkj 9:54:28
用硬件spi就没问题。
wangkj 9:54:43
我目前做到0.5s全屏刷新。实际上还可以更快。
wangkj 9:55:07
我实现了640 480,1024,768,800*600三种模式。
非飞 9:55:14
1秒2屏,这个就太慢了
wangkj 9:55:25
你想放影碟呀?
非飞 9:55:36
哈哈,那肯定不可能
wangkj 9:55:41
理论能到30屏,关键是你的cpu速度跟不上。
非飞 9:56:05
嗯,你的仅仅是一个FPGA吧?
wangkj 9:56:05
用我的点频75M,刷新用不到25M
非飞 9:56:18
STM32不包括?
wangkj 9:56:20
大概能刷新120屏,每秒。
wangkj 9:56:29
但你的cpu肯定达不到。
wangkj 9:57:48
nc950 winbond的arm9,带tft控制器,才50元左右。
wangkj 9:57:57
stm32+a3p060 >50
wangkj 9:58:21
从成本考虑,这个方案带arm不划算。
非飞 9:58:40
原来是这个意思
非飞 9:59:31
那意味着,你这个东西能够应用的市场仅在51上?那这样商业上能赚钱嘛
wangkj 10:00:56
wangkj 10:01:02
只有51才能赚钱。
非飞 10:01:10
wangkj 10:01:15
你看看dwin的东西,都是给51用的。
wangkj 10:01:22
串口终端。
wangkj 10:01:35
这个才是最赚钱的。
wangkj 10:01:42
用2410做都行。
wangkj 10:01:53
就是宝马用驴拉到东西。
非飞 10:02:19
呵呵,这个确实也是。51的应用太多了
wangkj 10:02:48
所以,只有用contex-mo+这个才有前途。
wangkj 10:03:01
-m0跟51差不多的价钱,内存也比较少。
wangkj 10:03:14
价格跟51差不多。
wangkj 10:03:31
m0+这个成本就下来了。
wangkj 10:03:42
我之所以没考虑2410主要就是怕抄板。
wangkj 10:04:09
这个破解成本非常高。不像arm,不用破解,重新开发一个都行。
非飞 10:05:04
那别人直接用arm开发一个不就可以了
wangkj 10:06:07
是这样,有公司就这样做了。
wangkj 10:06:22
这个市场,又不是只能容纳一个公司。
非飞 10:06:54
你这个成本是多少呢?
wangkj 10:08:25
大概30左右。
wangkj 10:08:35
小批量得50
非飞 10:09:18
包括了STM32?看你们的介绍,都是把STM32 和 VGA一起提及的
wangkj 10:09:38
不包括。
非飞 10:09:54
仅VGA模块?
wangkj 10:09:56
我没用过stm32,我一直用atmel的片子。
wangkj 10:09:58
对。
wangkj 10:10:14
a3p060零卖25.
非飞 10:11:13
嗯,你这个VGA + STM32应该可以做到大部分河dwin类似了吧
非飞 10:11:48
嗯,比较奇怪你为什么选择51。或者,这个仅仅给51使用
wangkj 10:12:01
对
wangkj 10:12:41
这个是通用的,不仅仅用于51
非飞 10:12:54
可以这样,STM32一 spi 连接 VGA,然后一 spi 供外部使用。这样外部spi上可以定义一些附加功能,这样就能够依赖于STM32实现非常多其他的功能
非飞 10:13:46
只有你这个VGA能够做到800 x 600、1024 x 768
非飞 10:14:29
例如,stm32本身携带nandflash,上面存储了图片,这样外部spi发一个命令,这个模块就能够显示出一幅图像
wangkj 10:18:33
对,就是这样。
wangkj 10:19:08
你加群63051
非飞 10:19:09
是啊,这样不就成了。如果这个内部用51去做,你论坛上列的功能,类似dwin的d语言,如何可能去实现
wangkj 10:19:14
630571
非飞 10:19:26
这样的话,RT-Thread会是一个非常不错的选择
非飞 10:19:30
好
wangkj 10:19:48
是两个东西,串口终端(arm),和 tft控制器(通用)
wangkj 10:20:03
串口终端就是arm+通用tft控制器。
wangkj 10:20:47
那个群我有很多资料,也有不少做cpld控制tft,vga的朋友
wangkj 10:21:01
互相交流。
非飞 10:21:25
嗯,好的
非飞 10:21:34
在STM32上,你可以考虑RT-Thread
wangkj 10:21:53
我吧这些话贴到论坛和群里面没问题吧?
wangkj 10:22:00
让大家借鉴一下。
非飞 10:24:15
和你说下目前RT-Thread在STM32上包含的功能,
文件系统、整个文件操作都不是问题,并且速度不错。
USB,把系统内部的SD卡和SPI Flash做为一个U盘弄到电脑上
sound,能够直接播放wav文件和mp3文件
图片浏览,这个是用内部自定义格式的,因为速度快,内存占用少,仅512+字节
然后就是RT-Thread/GUI,这个是能够实现窗口的,包括中文显示等。
网络也是RT-Thread的强项,不过对你这个估计没什么用处。
非飞 10:24:26
嗯,没问题,你直接转过去就是了
图片显示不了啊
油画|http://www.chndafen.com