基本要素
- 嵌入 - 专用 - 计算机系统特点
- 专用性强 - 可裁剪性好 - 实时性与可靠性好 - 功耗低典型结构
实时系统的计算必须在预定的周期内完成,成为时间正确
硬实时操作系统 软实时操作系统需要满足三个条件
实时操作系统必须是多任务系统 任务的切换时间应与系统中的任务数无关 中断延迟的时间可预知并尽可能短 为了是应用程序的设计者可以计算出系统完成某一个任务的准确执行时间 要求作为进行任务切换的调度器的运行时间应该是固定的,即调度器进行任务切换的时间不能受应用程序中其他因素(如任务数目)的影响。体系结构:
任务就是一个线程,由C语言函数和相关的一些结构体构成的实体。ucosII就是一个对这些任务进行调度管理的多任务操作系统 任务存储角度来说:三个部分:
用户任务,实现某种功能
系统任务,为应用程序提供服务
任务链表:
带有临界段的无限循环,
OSTaskCreat()为操作系统提供的用来创建任务的,OSStart为操作系统提供的启动个任务的,之后就交给操作系统进行调度管理了。
空闲任务:系统没事可做的时候跑的。 统计任务:统计CPU的空占比
64 最后两个已经被占用 空闲任务和统计任务
每个任务有一个自己的堆栈,互不干扰。在存储器里面一段按照FIFO规则使用的空间。
创建任务时候,将任务栈顶指针传过去 OS_STK *pto 堆栈增长方向不同,创建栈的写法不一样 OSTaskCreate(MyTask, &MyTaskAgu,&MyTaskStk[0],20);
操作系统负责,CPU从堆栈中获得关键恢复数据(任务指针 任务堆栈指针 程序状态字)事先存放在任务的堆栈中,当任务获得CPU的使用权时候,就可以把对战中的初始数据赋值到CPU的各个寄存器中,任务顺利启动并运行。
OS_TCB是用来记录任务堆栈指针、任务当前状态、任务优先级别……与任务管理有关的属性。 控制链表吧系统所有任务的控制块链接为两条链表,并进行管理,控制任务快进行相关操作。
结构类型数据,创建函数时候赋值并留在RAM中 结构定义:
创建任务时候,任务控制块也会被赋值
调度就是通过一个算法来确定多个任务中的哪个任务来执行,调度器来做这个事情,要保证就绪状态的所有任务中优先级别最高的任务来执行,根据任务就绪表
有规矩的任务切换:
找就绪任务 任务切换获得就绪任务的TCB 被终止任务的任务控制块指针存放在全局变量OSTCBCur中,所以调度器这部分的工作主要是获得带运行任务的控制块指针。
任务切换
OSCtxSw() 完成任务切换功能,实现无缝切换挂起一个任务就是停止这个任务的运行