一个小型嵌入式操作系统设计.pdfVIP

  • 1
  • 0
  • 约5.77千字
  • 约 4页
  • 2021-11-08 发布于重庆
  • 举报
1、多任务机制 其实在单一 CPU 的情况下,是不存在真正的多任务机制的,存在的只 有不同的任务轮流使用 CPU,所以本质上还是单任务的。但由于 CPU执行速 度非常快, 加上任务切换十分频繁并且切换的很快, 所以我们感觉好像有很 多任务同时在运行一样。这就是所谓的多任务机制。 实时系统的特征是延时可预测,能够在一个规定的时间内 ( 通常是 ms 级别的 ) 对某些信号做出反应。 2、任务的状态 任务有下面的特性: 任务并不是随时都可以运行的, 而一个已经运行的 任务并不能保证一直占有 CPU 直到运行完。一般有就绪态,运行态,挂起 态等。 运行态:一个运行态的任务是一个正在使用 CPU 的任务。任何时刻有 且只有一个运行着的任务。 就绪态: 一个就绪态任务是可运行的, 等待占有 CPU 的任务释放 CPU。 挂起态:某些条件不满足而挂起不能运行的状态。 3 、如何转化为就绪态 INT32U OSRdyTbl; /* 就绪任务表 */ 上面定义一个 32 位变量,每一位代表一个任务, 0 表示挂起状态, 1 表示就绪状态。 它记录了各任务的就绪与否状态, 称它为就绪表。 OSRdyTbl 定义为 32 位变量,对应 32 个任务。当然,定义为 64 位的话,便最多能 支持 64 个任务。 这样, 可以定义两个宏, 实现把任务的状态变为就绪或挂 起态。 /* 在就绪表中登记就绪任务 */ #define OSSetPrioRdy(prio) { OSRdyTbl |= 0x01prio;} // 把相应位置 1 /* 从就绪表中删除任务 */ #define OSDelPrioRdy(prio) { OSRdyTbl = ~(0x01prio); }// 把相应位清零 任务之间互相独立, 不存在互相调用的关系。 所有任务在逻辑上都是平 等的。 由于任务之间互相看不见, 所以他们之间的信息传输就无法当面完成。 这就需要各种通信机制如信号量,消息邮箱,队列等来实现。 4、什么是抢占式调度? 调度的概念, 通俗的说就是系统在多个任务中选择合适的任务执行。 系 统如何知道何时该执行哪个任务?可以为每个任务安排一个唯一的优先级 别,当同时有多个任务就绪时,优先运行优先级较高的任务。同时,任务的 优先级也作为任务的唯一标识号。代码中都是对标识号来完成对任务的操 作的。 所谓“抢占式调度”是指:一旦就绪状态中出现优先权更高的任务,便 立即剥夺当前任务的运行权,把 CPU 分配给更高优先级的任务。这样 CPU 总是执行处于就绪条件下优先级最高的任务。 5、多任务系统的时间管理 与人一样,多任务系统也需要一个“心跳”来维持其正常运行,这个心 跳叫做时钟节拍,通常由定时器产生一个固定周期的中断来充当。 OSTimeDly 函数就是以时钟节拍为基准来延时的(在时钟的中断服务 函数中,依次对各个延时任务的延时节拍数减 1。若发现某个任务的延时节 拍数

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档