RT-Thread与ucos比较:
任务管理及调度:
RT-Thread 32/256可选优先级抢占式调度,线程数不限,相同优先级线程时间片轮转调度;支持动态创建/销毁线程
ucos 256优先级抢占式调度,不允许相同优先级任务存在
同步/通信机制:
RT-Thread 支持semaphore, mutex, mailbox, message queue, event。mailbox可存储多条消息,任务等待可按优先级进行排队。
ucos semaphore,mutex, mailbox, message queue, event。mailbox只能存放1条消息
内存管理:
RT-Thread 固定分区内存管理,小内存系统动态内存管理,大内存系统SLAB内存管理
ucos 固定大小内存块管理
定时器:
RT-Thread 挂接到系统OS定时器的硬定时器
ucos 只能使用OSTimeDly进行时间间隔处理
中断嵌套:
RT-Thread 允许
ucos 允许
源码许可证:
RT-Thread GPL + 可用于商业产品(只需要注明使用了
RT-Thread)
ucos 商业收费
体积(典型配置,ARM7TDMI):
RT-Thread 8k ROM, 2K RAM(
RT-Thread/STM32包含完整的STM32固件,体积大些)
RT-Thread主要支持的平台:
STM32F103VB/STM32F103ZE
AT91SAM7S/7X
S3C2410
x86-IA32
RT-Thread/STM32F103VB 0.3.0 beta3更改记录:
- 内核,添加IAR EWARM 5.x工程,在内核定义中做相应的平台定义;
- 添加文件系统组件DFS,DFS是一套虚拟文件系统(类似Linux的VFS,但几乎不占用空间)
- 添加文件系统DFS-EFSL:把著名的FAT文件系统实现EFSL引入到DFS中,同时对它的不足进行修改:重写文件系统缓冲层;添加多扇区读写支持。(我们自己实现的DFS-FAT还在进行压力测试中,测试完毕后也会放出)
- STM32固件库更新到2.0.3patch1
RT-Thread/STM32F103VB 0.3.0 beta2更改记录:
- 修正message queue创建时内存分配的问题。
- 修正pendsv异常优先级过高的问题。
- 更改rt_console_puts为rt_hw_console_output,并由各个board自行实现,如果设置rt_hw_console_output为空函数,那么rt_kprintf将自动不起作用。
- 设备驱动框架中添加两个回调函数,设置回调函数的接口为:
* rt_device_set_rx_indicate,rx_indicate回调函数在设备驱动收到数据时调用,以通知上层应用有多少字节大小的数据已经接收(上层应用此时可以主动调用rt_device_read进行接收)。
* rt_device_set_tx_complete,tx_complete回调函数在驱动设备完成数据写入时调用,以通知上层应用数据已经写入完成(如果数据是动态申请的,可以在此时释放)。
设备驱动框架内部相关调用实现:
* rt_device_open/close,如果驱动设备是DMA接收模式,那么调用open将打开DMA开始进行接收,close则关闭DMA
* rt_device_read,设备驱动从设备中读取(轮询模式),或从已经接收到的buffer中读取(接收中断模式、DMA接收模式)
* rt_device_write,设备驱动往设备中写入数据(轮询模式),或挂接到链表中,等待DMA传输完成(如果当前DMA没使能,那么使能DMA直接进行发送)。
- STM32串口设备,实现在libcpu\stm32\serial.c中,发送支持轮询,DMA发送;接收支持轮询,中断接收,DMA接收等方式。
* 串口设备的注册在bsp\stm32f103vb\usart.c中,当前默认注册为
+ uart1, 轮询发送,中断接收, 中断接收通知指向finsh,rt_hw_console_output则轮询发送(不产生中断)。
+ uart2, DMA接收,轮询发送
+ uart3, 中断接收,DMA发送
- bsp\stm32f103vb\application.c是几个串口设备的使用例子。
简而言之,
RT-Thread/STM32F103VB 0.3.0 beta3是一个RTOS + Shell(finsh) + VFS(DFS + EFSL(FAT16/32)),并且文件系统已在万利STM32开发板SPI SDCard上验证通过(大范围的SD/MMC卡还有待验证)。