对uc/OS中的任务-----学习



uc/OS中的任务就是个函数,而从任务的存储结构上看,它由三部分组成:任务程序代码,任务

堆栈和任务控制块。其中任务控制块是关联任务代码的程序控制块,它记录了任务的各个属性,任务堆栈用来保存任务的工作环境。

用来指向代码的指针这里是CPU程序计数器pc的副本(程序计数器总是指向待执行的指令地址)。

线程与进程:具有私有运行空间叫进程,而具有公共运行空间的叫线程,线程是进程的的一部分,线程不拥有系统资源,而进程拥有系统资源,为了降低CPU的消耗,所以引用的线程,线程是切换时不需要调用资源,系统消耗比较进程要小。

uc/OS中的任务有两种任务:用户任务和系统任务。由应用程序设计者编写的任务叫做用户任务,由系统提供的任务叫做系统任务。

系统任务:

空闲任务和统计任务,其中,空闲任务是每个应用程序必须使用的,而统计任务是应用程序可以根据实际需要来选择使用。

l  空闲任务:

所谓的空闲任务就是在空闲的时候(没有用户任务)让它又事可做,这个任务几乎什么都不做,只是在计数。

扫描二维码关注公众号,回复: 2762396 查看本文章

l  统计任务:

该任务是统计CPU的利用率,以便告知其他应用程序,让他们合理分配任务。

 

任务的状态:

1、  睡眠:任务只以代码的形式存在,没交给操作系统管理,即没有分配任务控制块和任务         堆栈

 

2、  就绪:任务全副武装,并在就绪表中登了记

 

3、  运行:获得了cup的使用权

 

4、  等待(挂起):正在运行的任务,需要等待一个事件的发生在运行,cpu使用权被剥夺,自己处于等待状态

 

5、  中断服务:正在运行的任务一旦响应中断申请就会终止运行而去执行中断服务子程序(ISR),这时处于中断服务状态

 

 

任务的优先权及优先级别

 

 

l  为解决当多任务需要运行而CPU只有一个时,运行那个任务就成了一个问题,嵌入式系统采用的是优先级抢占式原则。由于uc/os创建最多为64个任务,所以任务优先级别最多为64级,数字越小,级别越高。最高的优先级别为0.

 

 

 

 

任务堆栈

为了满足任务的切换和响应中断时保存cpu寄存器中的内容及任务调用其他函数时的需要,每个任务都需要配备自己的堆栈。所有的任务控制块都含一个指向堆栈的指针。

 

l  任务堆栈的创建

 

创建任务函数原型:

INT8U OSTaskCreate(

            void (*task)(void*pd),    //指向任务的指针

             void*pdata,           //传递给任务的参数

             OS_STK *ptos,        //任务堆栈栈顶的指针

             INT8U prio           //指定任务优先级别的参数

);

堆栈的增长方式会随着系统所使用的处理器不同而不同。

l  任务堆栈的初始化

当启动一个任务时,CPU的各个寄存器总是需要一些初始数据,如指向任务的指针,psw等。由于它们都是任务的私有数据,所以放在任务堆栈。应用程序启动时先把CPU需要的初始数据从事先存放在堆栈中数据复制到CPU的各寄存器。

把任务初始数据存放到任务堆栈的工作叫做任务堆栈的初始化。该函数的原型为:

 

OS_STK  *OSTaskStkInit(

            void (*task)(void*pd),  

             void*pdata,          

             OS_STK *ptos,       

             INT16U opt         

);

 该函数由任务创建函数调用。

 

猜你喜欢

转载自blog.csdn.net/SHRDLU/article/details/49739055