uCOS
1. uC/OS-II 完整的,可移植的,可固化,可裁剪,抢占式 实时 多任务 微内核
基本功能:进程调度,时钟管理,内存管理,进程间通信、同步
三部分:配置文件,处理器无关代码,处理器相关代码
2.任务组成
任务控制块, TCB,在系统中类似池或者cache一样,维护一个OSTCBFreeList,需要时就申请一个,做初始化;任务删除后,把tcb再放回OSTCBFreeList
任务代码
任务堆栈
3.系统任务
必须存在的:
=空闲任务------------最低优先级
=时钟节拍任务-------优先级1
选择配置开启:
=统计任务------------最低优先级-1
=定时任务------------优先级2
=中断服务管理任务---优先级0,在ISR中post信息,只是把信息放到一个队列,在ISR退出的时候,发生调度由中断服务管理任务完成post操作,类似上半部和下半部,减少关中断的时间
任务状态:休眠(不被cpu管理),就绪,运行,等待,中断服务态
优先级和进程一一对应【ucos-II】
ucos-III优先级个数由宏定义,理论上无限制(一般默认64个)。每个优先级下挂多个进程,这个需要开启时间片轮转调度的功能。
4.任务调度
调度原则:
1)及时响应
2)支持优先
3)公平
4)有效:资源均衡使用,cpu和外设都有比较高的利用率
调度算法:
FIFO
短作业优先
优先级调度, uCOS-II 64个优先级,0最高,63(idle)最低,一个优先级一个任务
时间片轮转 RR
调度时机:
1)os刚开始运行
OSStart()->OSStartHighRdy()
2)当前任务时间片用尽
3)当前任务转为等待状态
延时函数
4)当前任务被自身删除
OS_Sched()->OS_TASK_SW()
5)中断返回的时候
OSIntExit()-》OSIntCtxSw()
就绪表:
因为是固定最多64个,做一个8x8矩阵存储
将建立下标(也就是优先级)到任务TCB 8x8矩阵的映射
动态分配空间,有很大不确定性,对于实时系统,避免在实时任务使用动态分配。
5.
同步机制:
单一事件:互斥锁、信号量
多个事件:事件标志组(信号量集)
6.
通信机制:
单一消息:消息邮箱
大量消息:消息队列
ECB
7.
内存管理:
固定分区,分成一系列的小块
8.
ucos在删除任务时候,并不会检查资源,释放他持有的所有资源,比如信号量。这可能导致问题。
如果一定要删除任务,要自己来保证释放了所有资源,而自己的共享资源没有人在使用。
关中断:只保留了hardfault和NMI,其余的全部关闭(包括嘀嗒tick中断)