代码改变世界

ucos-II的习题2

2016-08-09 20:01  威震天1606  阅读(966)  评论(0编辑  收藏  举报

1.一个应用程序为什么一定要使用空闲任务? 
在多任务系统运行时,系统经常会在某个时间内无用户任务运行而处于空闲状态,为了使CPU在此时有事可作,uC/OS—II提供了空闲任务OSTaskIdle。空闲任务是不能被软件删除的。  
2.统计任务是必须使用的吗?简述它的功能。 
每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便应用程序通过访问它来了解CPU的利用率。用户应用程序可根据实际需要来选择是否使用统计任务。  
3.什么是任务的优先权?UC/OS-II是用什么来描述任务的优先权的。 
uC/OS-II是按可剥夺型内核来设计的,为此,每一个任务都必须具有唯一的优先级别,用来表示该任务在抢夺处理器时所具有的优先权力,共有64个优先级别,用数字“0”-“63”表示,数字“0”所表示的优先级最高,通常将空闲任务和统计任务设为最低优先级别。 
对于任务数较少的应用,为节省内存,可通过OS_CFG.H中的OS_LOWEST_PRIO赋值来确定系统的最大(<=64)用户数。

4.在uC/OS-II中任务有哪5种状态?分别简述5个状态的特征。 
睡眠状态:任务只是以代码的形式驻留在内存,还没有交给操作系统管理。 
就绪状态:任务配备了任务控制块且在任务就绪表中登记,具备了任务运行的充分条件。 运行状态:处于就绪状态的任务获得了CPU的使用权,任何时候只有一个任务处于运行。 等待状态:正在运行的任务,把CPU的使用权让给其他任务。 
中断服务状态:正在运行的任务一旦响应中断申请,就会中止运行而去执行中断服务程序。

6.什么是空任务控制块链表?什么是任务控制块链表? 
空任务块链表,其中所有任务控制块还没有分配给任务。空任务块链表是在应用程序调用函数OSInit()对UC/OS-II系统初始化时建立的。链表的元素一共有OS_MAX_TASKS+OS_N_SYS_TASKS个元素。 
任务控制块链表,其中所有任务块已经分配给任务。任务控制块链表在应用程序调用函数OSTaskCreate()创建任务时建立的。  
7.数组OSTCBTbl[]有什么用途?  专门用来以任务的优先级别为顺序在各个数组元素里存放指向各个任务控制块的指针,这样系统在访问一个任务的任务控制块时,就不必遍历任务控制块链表,从而加快对任务控制块的访问速度。 
 
8.正在运行任务的任务控制块指针存放在哪个指针变量中?  OSTCBCur。

*OSTCBMsg  传递给任务消息的指针; OSTCBDelReq  请求删除任务时用到的标志; OSTCBStat  任务的当前状态标志; OSTCBDly 
 
任务等待的时限(节拍数); 
OSTCBPrio  任务的优先级别(0 == highest, 63 == lowest); OSTCBX   用于快速访问就绪表的数据; OSTCBY  
 
用于快速访问就绪表的数据; OSTCBBitX  用于快速访问就绪表的数据; OSTCBBitY  用于快速访问就绪表的数据; 
 
6.什么是空任务控制块链表?什么是任务控制块链表? 
空任务块链表,其中所有任务控制块还没有分配给任务。空任务块链表是在应用程序调用函数OSInit()对UC/OS-II系统初始化时建立的。链表的元素一共有OS_MAX_TASKS+OS_N_SYS_TASKS个元素。 
任务控制块链表,其中所有任务块已经分配给任务。任务控制块链表在应用程序调用函数OSTaskCreate()创建任务时建立的。  
7.数组OSTCBTbl[]有什么用途?  专门用来以任务的优先级别为顺序在各个数组元素里存放指向各个任务控制块的指针,这样系统在访问一个任务的任务控制块时,就不必遍历任务控制块链表,从而加快对任务控制块的访问速度。 
 
8.正在运行任务的任务控制块指针存放在哪个指针变量中?  OSTCBCur。 
 
9.变量OSRdyGrp有什么用? 
uC/OS-II定义了一个类型为INT8U的变量OSRdyGrp,使该变量的每一位都对应OSRdyTbl[ ]的一个任务组.如果某任务组中有任务就绪,则在变量OSRdyGrp里把该任务组所对应的位置为1,否则置为0 ,从而快速对任务就绪表OSRdyTbl[ ]查找。  
10.计算:由任务就绪表OSRdyGrp和OSRdyTbl[]的内容通过查找OSUnMapTal[]表和公式 y = OSUnMapTal[OSRdyGrp];  x = OSUnMapTal[OSRdyTbl[y]]; prio = (y<<3) + x; 
找出具有最高优先级别的就绪任务。 
设OSRdyGrp的值为01101000B,即0x68,则查表y=OSUnMapTal[0x68]=3,它相应于OSRdyGrp第3位bit3,另设OSRdyTbl[3]=11100100B,即0xE4,则查表x=OSUnMapTal[0xE4]=2 最后: 
Prio=(y<<3)+x=(3<<3)+2=26 即: 
00000011<<3=00011000 
00011000+0000010=00011010B=26