实时线程操作系统(RT-Thread)是国内RT-Thread工作室精心打造的开源实时操作系统,历时4年的呕心沥血开发,力图突破国内没有小型开源实时操作系统的局面,它不仅仅是一款开源意义的实时操作系统,也是一款产品级别的实时操作系统,它已经被国内十多所企业所采用,被证明是一款能够长时间稳定持续运行的操作系统。
TI流明LM3S系列芯片是基于ARM Cortex M3 v7构架的32位芯片,其中LM3S S6000,S8000,S9000系列芯片携带网络功能。RT-Thread的标准内核可以运行在除LM3S S100系列外的所有系列芯片上。这次RT-Thread针对于LM3S进行移植验证并经过压力测试的是LM3S6918芯片,芯片携带64K片内静态内存,256K闪存,频率是50MHz。在这个平台上,RT-Thread支持的特性包括:
1. 完善的实时核心
- 面向对象方式的实时核心(但依然保留了C语言的优雅、小巧风格);
- 默认32线程优先级的全抢占式实时内核(亦可配置成256线程优先级);相同优先级线程时间片轮转调度;
- 相同优先级线程实施时间片可配置的分时时间片轮转调度;
- 线程间同步机制:信号量和防止优先级翻转的互斥锁;
- 完善高效的线程间通信机制,包括邮箱,消息队列和事件;
- 支持线程挂起和唤醒的固定内存块管理及线程安全的动态内存堆管理;
- 向上层提供基于名字的统一接口设备驱动模型;
2. FinSH shell命令行
- 命令即C代码的命令行方式;
- 直接在命令行中调用系统内核函数;
- 直接在命令行中访问系统全局变量;
- 历史记录及命令自动补全;
3. 面向小型设备的虚拟文件系统
- 向上层应用提供POSIX风格的API接口;
- 支持多种具体文件系统实现;
- LM3S分支内置SD卡驱动程序;
4. LwIP轻型TCP/IP协议栈
- 标准的BSD Socket接口;
- IP、ICMP、UDP、TCP标准协议支持;
- DNS,DHCP,PPP协议支持;
- TFTP、HTTP、FTP应用协议支持(见netutil组件);
- LM3S分支内置以太网驱动;
5. 开发环境支持:
- GNU GCC (scons做为构建工具)
- Keil MDK
以上是RT-Thread/LM3S 0.3.0的特性,这些特性在RT-Thread 0.3.x分支中不会有大的改变。
6. 技术指标及优势
看几个体积指标:
RT-Thread标准Kernel(标准Kernel指得是没经过剪裁的内核):
9.5K只读数据和执行代码占用,1.5K内存占用(通常只读数据和执行代码放置在闪存中)
包括上面说的完整组件,即标准Kernel,finsh shell,文件系统,网络协议栈:
80K只读数据和执行代码占用,13.5K内存占用,当运行时,会有5K左右的动态内存占用。即当系统运行时,大约剩余45K内存给用户使用。
和LM3S提供的无操作系统LwIP,FatFS文件系统比较:
120K只读数据和执行代码占用,35K内存占用。即当系统运行时,大约剩余20K内存给用户使用。
网络的一些性能指标
对比情况采用了相同的netio测试得到的数据统计
RT-Thread/LM3S
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel
TCP connection established.
Packet size 1k bytes: 704 KByte/s Tx, 5131 Byte/s Rx.
Packet size 2k bytes: 704 KByte/s Tx, 1950 KByte/s Rx.
Packet size 4k bytes: 704 KByte/s Tx, 2197 KByte/s Rx.
Packet size 8k bytes: 704 KByte/s Tx, 2200 KByte/s Rx.
Packet size 16k bytes: 706 KByte/s Tx, 2196 KByte/s Rx.
Packet size 32k bytes: 709 KByte/s Tx, 2136 KByte/s Rx.
Done.
TI/无操作系统情况下的LwIP
NETIO - Network Throughput Benchmark, Version 1.26
(C) 1997-2005 Kai Uwe Rommel
TCP connection established.
Packet size 1k bytes: 870 KByte/s Tx, 5187 Byte/s Rx.
Packet size 2k bytes: 870 KByte/s Tx, 2463 KByte/s Rx.
Packet size 4k bytes: 870 KByte/s Tx, 3322 KByte/s Rx.
Packet size 8k bytes: 870 KByte/s Tx, 3239 KByte/s Rx.
(上面的是PC端NETIO输出的结果,Tx对应LM3S开发板上的接收,Rx对应LM3S开发板上的发送)
从上面可以看出,在大数据块发送时,RT-Thread/LM3S的移植会有一些损耗,但总的来说损耗不算太大,特别是报文在1k - 2k范围时数据相差不大。如何看待这个差异:通常没有操作系统时,系统能够更专注的做一件事。而有操作系统的情况下,它能够额外的做一些事务,这些事务在进行切换时,会产生一定的系统资源开销。总的来说,体积上的改善一定程度上弥补了性能的差距(例如RT-Thread/LM3S能够支持16k、32k bytes大小的网络包发送接收,而无操作系统的LwIP则不能)。
这个版本是0.3.0正式版本的候选版本,原使用beta1版本的用户,建议更新到新的版本来。欢迎反馈您的信息给RT-Thread论坛。
下载地址:
RT-Thread on Google |