- 8
- 0
- 约1.58万字
- 约 26页
- 2018-06-28 发布于福建
- 举报
2016新编简单协作式多任务操作系统的设计
简单协作式多任务操作系统设计
引言
根据老师的要求,在这次的课程设计实验中,我们需要设计出满足老师要求的简单协作多任务操作系统。
本次实验中,我们需要设计的是简单协作式多任务操作系统,uC/OS-II是规模最小的系统之一,它的实质是一个微型内核,它是基于优先级的可剥夺型内核,系统中的所有的任务都是一个唯一的优先级别,它适合应用在实时性要求强的场合。根据我们自身的能力和实际情况,我们发现,我们可以采用C语言来编写我们所需要的程序。
uC/OS-II的一个特点是它区分用户空间和系统空间,所以,它适合应用在比较简单的处理器上,所以,我们能够在自己的电脑上进行程序编写。
在uC/OS-II里,每个任务都有一个任务控制块,这是一个比较复杂的数据结构;任务控制块(即TCB)在uC/OS-II里是用来记录任务堆栈指针、任务的当前状态、任务的优先级别等一些与任务管理有关的属性的表。而在uC/OS-II中,会用两条链表来管理TCB:一条是空任务块链表(没有分配任务),一条是任务块链表(其中所有任务控制块已经分配给任务)。
同时,每个任务都有一个自身的堆栈,它们是独立属于任务本身的,即为自用堆栈。堆栈的作用这里也简单的说明一下,即保护现场,传递函数,设置局部变量,保存任务上下文等。通过指针的指向来控制堆栈的使用,先指向控制块,从栈中提取上下文,送入到CPU中运行,运行完毕后指针指向控制块提取下一个任务,依次循环执行。
任务上下文的切换实质是断点数据的切换,也就是处理器(CPU)的堆栈指针的切换,被中止的运行任务堆栈指针要保护到该任务的TCB中,待运行任务的任务堆栈指针要由该任务控制块转存到处理器的SP中。
uC/OS-II也提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等,由于我们这一次的实验要求比较低,所以,其中的函数调用我们是用不到的,具体使用的函数,我们会在下面的程序设计中进行说明。
实验要求
多任务、任务创建、任务堆栈、任务控制块、任务上下文切换、协作式、不要求中断
主要函数与数据结构(参考)
函数:TaskCreate、TaskSwitch
数据结构:TaskStack、TaskCtrolBlock
程序设计
根据这次的设计要求我们首先要创建出主体的函数,根据已知的知识,通过uC/OS-II的任务创建,用函数OSTaskCreate()创建任务,在其中定义了各个任务的变量参数以及调度函数等,调用后会从任务控制块空闲列表中申请一个空TCB指针,然后根据参数将任务堆栈,任务控制块初始化,最后返回。
与此同时,我们还需要定义一些值,像局部变量和全局变量,这些是用于主函数的运行,除此之外,还需要对任务的优先级别进行设置,任务的优先级别是64级,即0到63级,0级为最高优先级。
实验中,我们需要通过调用函数OSTaskCreate()来创建任务,在创建之中,需要对任务堆栈,和任务控制块进行初始化。
任务堆栈初始化时,要把传递进来的任务代码指针task及任务的其他环境数据存入到任务堆栈中,并返回到新的栈顶指针psp;
TCB初始化时,先自空任务控制块链表摘取一个控制块分配给任务,并加入系统任务控制块链表,之后,把栈顶指针psp传给任务控制块的指针OSTCBStkPtr,将任务的优先级别prio传入任务控制块的成员变量OSTCBPrio。最后在就绪任务表中给本任务进行登记。
根据老师的要求,我们需要创建至少3个任务,而我们对于实际的操作不是特别清楚的情况下,我们决定根据实验三中的任务创建方式,建立了三个任务即为Task1、Task2、Task3三个任务。同时将三个任务的优先级别进行设置,在此之后,我们则需要进行编写主程序,以及申请CPU的堆栈空间使用,Task1、Task2、Task3依次执行后挂起等待就绪运行,每个任务都需要用了while循环语句来执行,保证三个任务不停的运行,由于不需要中断,所以,这里我们不需要考虑异常的问题,以及中断处理的问题。在编写函数时,使用的函数有:TaskCreate、TaskSwitch等,用来调用参数和开始堆栈,而在堆栈中我们主要用到的数据结构包括:TaskStack、TaskCtrolBlock。
按照我们的想法,程序完成之后,应当是在观察窗口之中,出现123三个任务不停调用的情况。
实际编写程序完后,我们需要把所有用到的函数等进行编译调试,经过debug后查找错误,知道正确之后才可以运行,而也最后的结果也符合我们一开始的想法,在观察窗口之中出现123的数字。
下面稍微介绍一下任务的切换要求。
在运行之后,所有的任务都处于就绪状态之中,其中一个任务处于运行状态,按照优先级别的高低进行调用,开始调用的是Task1,当Task1运行结束之后,则会进行任务的调度,而在进行任
原创力文档

文档评论(0)