ucos-II的习题2

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

时间: 2024-10-16 17:15:42

ucos-II的习题2的相关文章

uCOS 在 NIOS II 上的移植

工具:Quartus II 器件:EP4CE15F17C8 1.File->New Project Wizard: 2.点击两个Next,进入Family&Device Settings,选择器件 3.Finish,建立工程完毕,点击Tools->SOPC Builder,输入名字后,OK 4.修改clk_0为100MHz 5.component library中搜索nios,双击Nios II Processer 6.Finish 7.搜索epcs,双击epcs Serial...F

uC/OS II 任务切换原理

今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引发一次中断,自动将CS.IP寄存器压入堆栈,再利用中断返回,将新任务的任务断点指针弹出到CPU的CS.IP寄存器中,实现任务切换.虽然明白个大概,但是其中的细节却有点模糊,为什么调用IRET中断返回指令后,弹入CPU的CS.IP寄存器的断点指针是新任务的断点指针,而不是当前任务的,UCOS II是如

怎么从零学习嵌入式(转)

怎么从零学习嵌入式linux开发,我在这里给我们一个切实可行的路途,并且相对简略下手,学习中会不断有收成. 把握单片机,嵌入式开发是每个硬件工程师必修课程.但嵌入式开发的把握却并不简略,需求按部就班的学,需求耐性的学. 关于一个零根底的人来说,学习嵌入式仍是有必定难度的. 关于一个大学电子或计算机专业的人员来说,学习单片机,嵌入式仍是要便利一些. 关于没有电路根底,没有编程根底的人来说,学习大概先根本把握电路和c言语编程. 1 准备工作 模仿电路,数字电路,c言语编程,汇编 模仿电路对比难学,学

单片机的非OS的事件驱动

单片机的非OS的事件驱动 Part 1 前言 很多单片机项目恐怕都是没有操作系统的前后台结构,就是main函数里用while无限循环各种任务,中断处理紧急任务.这种结构最简单,上手很容易,可是当项目比较大时,这种结构就不那么适合了,编写代码前你必须非常小心的设计各个模块和全局变量,否则最终会使整个代码结构杂乱无序,不利于维护,而且往往会因为修改了某部分代码而莫名其妙的影响到其他功能,而使调试陷入困境. 改变其中局面的最有效措施当然是引入嵌入式操作系统,但是大多数的操作系统都是付费的(特别是商业项

DSP-BIOS使用入门

从环境说到搭建第一个工程 请注意,此文默认读者已经对DSP及CCS V3.3环境有一定的了解了,知道cmd文件的配置,知道新建工程,编译并连接仿真器下载!如果你对这些还都不熟悉,请先熟悉这些!当然,最好要有操作系统的基本概念--任务.调度.中断! 第一个问题:DSP/BIOS(好吧,我们一般这样写)是什么? 是TI公司专门为DSP开发的嵌入式实时操作系统,既然是TI公司为自己的DSP开发的--官方的,当然性能是杠杠的了(当然,我还在入门,这点也是道听途说,没有实际体会).既然说到实时操作系统,那

智能家居系统-软件设计

1 智能家居远程控制系统的软件实现 1.1 基于uC/OS-II的中央控制器的软件设计 1.1.1 uC/OS-II系统移植 本设计使用uC/OS-II操作系统,uC/OS-II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,uC/OS-II的大部分源码是用标准ANSI C编写,并且编程规范,可读性很高,内核中只有少量的与硬件相关的代码使用汇编语言编写,总共200余行,移植非常方便[37].uC/OS-II软件体系结构如图5-1所示.移植工作主要包括以下几个方面的内容: 1)

嵌入式学习步骤及方法(精典)

嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破.只要我们用心去对待,冬雪终将化去,春风定会吹来.具体步骤如下: 1.<C语言>第二版 谭浩强 : <C程序设计语言>第二版 徐宝文译 机械工业出版社 你能区分开指针数组和数组指针吗?你知道函数指针吗? 你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗? 2.<数据结构>C语言版 黄国愉.叶乃青编 清华大学出版社 你能合上书本,用C语言实现书中的单链表.双链表数据结

OSMboxPend() 等待消息时遇到的问题

首先根据书中讲解的实例代码(标准实例来源于UCOS ii经典教程 邵贝贝) 1 OS_EVENT *CommMbox; 2 3 void CommTask(void *pdata) 4 { 5 INT8U err; 6 void *msg; 7 8 pdata = pdata; //防止编译器报错 9 10 for(;;) 11 { 12 msg = OSMboxPend(CommMbox, 10, &err) 13 14 if(OS_ERR_NONE == err) 15 { 16 /***正

lwip移植到stm32上-enc28j60,103mcu(2)

前面小玩了一下ucos和lwip,但是都还不是真正的网络多任务,真正的网络多任务应该是什么样子的呢?应该是有一个专门的任务负责网络的通讯,他负责将数据发送出去,将数据接收回来,而其他的需要用到网络的任务与这个任务通讯,这才是能够极大提升网络效率的办法,lwip支持这种办法,不过移植起来就比较磨人了 首先第一步是修改lwip的配置文件,如下 #define NO_SYS 0 //使用UCOS操作系统 改了这个之后会发现卧槽一下子缺了好多东西,实际上是这样,lwip使用一系列的宏和方法封装了一个操作

嵌入式学习(转)

嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一.嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器.存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等.特别是随着消费家电的智能化,嵌入式更显重要.像我们平常常见到的手机.PDA.电子字典.可视电话.VCD/DVD/MP3 Player.数字相机(DC).数字摄像机(DV).U-Disk.机顶盒(Set Top Box).高清电视(HDTV).游戏机.智能玩具.交换机.路由器.数控设备或仪表.汽车电子.家电控制