嵌入式系统软件设计方法和代码实现 第2-5:uC/OS-II 实时操作系统 1 第2-5:uC/OS-II 实时操作系统1 目 录: 2.5.1 概述 2.5.2 任务栈切换方法 2.5.3 优先级别算法 2.5.4 任务通信-使用邮箱 2.5.5 任务通信-使用消息队列 2.5.6 对共享资源的互斥访问控制与信号(semaphore) 2.5.7 任务同步与信号(signal) 2.5.8 内存分配方法 2.5.8 缺陷与改进(1:任务调度问题,2:通信问题:任务通信模型与uC/OS-II 通信机制的缺陷) 附录1:uC/OS-II 文件列表 附录2:相关函数列表 附录3:主要变量和数据类型列表 1 本章所涉及的操作系统理论知识可参阅各种操作系统教科书,比如《现代操作系统》 【美】Andrew S.Tanenbaum 著 陈向群等译 机械工业出版社 1999 年 11 月 嵌入式系统软件设计方法和代码实现 第 2-5:uC/OS-II 实时操作系统 2 2.5.1 概述 技术指标 uC/OS-II 是一个占先式实时多任务操作系统内核,但不支持时间片调度,支持任务间通信,提供了多种对共享资源的访问控制,如禁止切换,调度上锁等。 uC/OS-II 的也是一个可剪裁的系统,可以根据需要保留或者删除某些功能,任务数最多可达 64 个。下表中给出了 2 种常用情况下的目标代码大小。 序号 目标码(程序+数据) 任务数 邮箱 消息队列 信号量 任务栈大小 1 8K+6K 62 5 5 1 512 2 5K+4K 16 0 10 1 512 注:该表数据是根据《 uC/OS-II --源码公开的实时嵌入式操作系统》书中 p229,p230 的表 9.1 和表 9.2 综合得到的. 通过改变OS_CFG.H 文件中的各种配制,可以取消或者保留某些功能,并且改变某些数据结构的大小,在uC/OS-II 中,影响内存大小的数据结构主要包括任务数量,事件控制块数量和任务堆栈大小。 uC/OS-II 源代码 uC/OS-II 的 X86 版本代码规模约为5000 行,包括用于应用任务的例子代码和辅助代码,核心代码约3500 行,分布在 17 个文件中【详见附录1】。 任务状态 uC/OS-II 的任务一般会处于以下 6 状态之一, 1. 运行态 2. 就绪态 3. 等待信号量 4. 等待邮箱消息 5. 等待消息队列消息 6. 挂起 在某一时刻,系统中只会有一个任务处于“运行态”,处于其他各种状态的任务数量没有限制,“挂起态”的进入是任务主动进行的,其他状态一般由各种外部因素造成。只有处于“就绪态”的任务才可能成为下个要执行的任务。 任务切换过程和优先级别算法 uC/OS-...