摘自RT-Thread官方文档《um4003-rtthread-programming-manual》
链接: RTT官方文档.
一、线程调度
✨线程是 RT-Thread 操作系统中最小的调度单位
✨线程调度算法是基于优先级的全抢占式多线程调度算法
即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身
✨相同优先级的线程间采用时间片的轮转调度算法进行调度
二、时钟管理
⭐时钟节拍是 RT-Thread 操作系统中最小的时钟单位
⭐RT-Thread 的定时器提供两类定时器机制:
- 单次触发定时器
- 周期触发定时器
⭐通常使用定时器定时回调函数(即超时函数),完成定时服务
⭐用户根据自己对定时处理的实时性要求选择合适类型的定时器
三、线程间同步
💫RT-Thread 采用信号量、互斥量与事件集实现线程间同步
💫互斥量采用优先级继承的方式解决了实时系统常见的优先级翻转问题
💫线程同步机制支持线程按优先级等待或按先进先出方式获取信号量或互斥量
💫事件集支持多事件的 “或触发” 和 “与触发”,适合于线程等待多个事件的情况
四、线程间通信
🌠RT-Thread 支持邮箱和消息队列等通信机制
🌠邮箱中一封邮件的长度固定为 4 字节大小
🌠消息队列能够接收不固定长度的消息,并把消息缓存在自己的内存空间中
🌠通信机制支持线程按优先级等待或按先进先出方式获取
五、内存管理
🌠RT-Thread 支持静态内存池管理及动态内存堆管理
🌠当静态内存池具有可用内存时,系统对内存块分配的时间将是恒定的;当静态内存池为空时,系统将申请内存块的线程挂起或阻塞掉;当其他线程释放内存块到内存池时,如果有挂起的待分配内存块的线程存在的话,则系统会将这个线程唤醒
🌠动态内存堆管理模块(3种算法,适用于不同场景):
- 针对小内存块的分配管理(小内存管理算法);
- 针对大内存块的分配管理(slab 管理算法);
- 针对多内存堆的分配情况(memheap 管理算法)
六、I/O设备管理
✨RT-Thread 将 PIN、 I2C、 SPI、 USB、 UART 等作为外设设备,统一通过设备注册完成
✨实现了按名称访问的设备管理子系统,可按照统一的 API 界面访问硬件设备
✨在设备驱动接口上,根据嵌入式系统的特点,对不同的设备可以挂接相应的事件,当设备事件触发时,由驱动程序通知给上层的应用程序