如何设计一个小型嵌入式操作系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何设计一个小型嵌入式操作系统
前言本文的目的是设计一个简单的嵌入式操作系统,只实现一个基本任务调度器的功能。虽然不能称为操作系统,但已体现了小型嵌入式操作系统的精髓,可以从中一窥操作系统的面目。
一、多任务机制
其实在单一CPU 的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的。但由于CPU执行速度非常快,加上任务切换十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。
实时系统的特征是延时可预测,能够在一个规定的时间内(通常是 ms 级别的)对某些信号做出反应。
二、任务的状态
任务有下面的特性:任务并不是随时都可以运行的,而一个已经运行的任务并不能保证一直占有 CPU 直到运行完。一般有就绪态,运行态,挂起态等。
运行态:一个运行态的任务是一个正在使用 CPU 的任务。任何时刻有且只有一个运行着的任务。
就绪态:一个就绪态任务是可运行的,等待占有 CPU 的任务释放 CPU。
挂起态:某些条件不满足而挂起不能运行的状态。
三、如何转化为就绪态
INT32U OSRdyTbl; /* 就绪任务表 */上面定义一个 32 位变量,每一位代表一个任务,0 表示挂起状态,1 表示就绪状态。它记录了各任务的就绪与否状态,称它为就绪表。OSRdyTbl 定义为 32 位变量,对应32 个任务。当然,定义为 64 位的话,便最多能支持 64 个任务。这样,可以定义两个宏,实现把任务的状态变为就绪或挂起态。
/* 在就绪表中登记就绪任务 */#define OSSetPrioRdy(prio) { OSRdyTbl |= 0x01时钟节拍,通常由定时器产生一个固定周期的中断来充当。