嵌入式实时操作系统ucosii课后答案
- 格式:doc
- 大小:44.00 KB
- 文档页数:5
第1章嵌入式系统概述1,什么是嵌入式系统嵌入式系统的特点是什么嵌入式系统概念:(1) IEEE对嵌入式系统的定义:用于控制,监视或者辅助操作机器和设备的装置.(2)一般定义:以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统.嵌入式系统的特点:(1) 专用的计算机系统(2) 必须满足环境要求(3) 必须能满足对象系统的控制要求(4) 是集成计算机技术与各行业应用的集成系统(5) 具有较长的生命周期(6) 软件固化在非易失性存储器中(7) 必须能满足实时性要求(8) 需要专用开发环境和开发工具2,简单分析几种嵌入式操作系统的主要特点,包括嵌入式Linux,Windows CE,uCOS II 及VxWorks.(1)嵌入式Linux:有多个主流版本,根据应用需求,性能略有差别.μCLinux是Linux小型化后,适合于没有MMU的微处理器芯片而裁剪成的操作系统,μCLinux保持了传统Linux操作系统的主要特性,包括稳定,强大的网络和文件系统的支持,μCLinux裁剪了大量的Linux内核以缩小尺寸,适合像512KB RAM,1MB Flash这样小容量,低成本的嵌入式系统.RT_Linux即能兼容通常的Linux,又能保证强实时性.(2)Windows CE:开发平台主要为WinCE Platform Builder,有时也用EVC环境开发一些较上层的应用.WinCE开发难度远低于嵌入式Linux,实时性略低,常用于手机,PDA等手持设备中.(3)uCOS II:结构小巧,抢先式的实时嵌入式操作系统,具有执行效率高,占用空间小,可移植性强,实时性能好和可扩展性能等优点.主要用于小型嵌入式系统.(4) VxWorks: 集成开发环境为Tornado,Vxworks因出现稍早,实时性很强,并且内核可极微(最小8K),可靠性较高等.通常应用在通信设备等实时性要求较高的系统中.第2章嵌入式处理器体系结构1,具体说明ARM7TDMI的含义,其中的T,D,M,I分别代表什么ARM7TDMI是ARM7处理器系列成员之一,采用V4T版本指令.T表示Thumb,该内核可从16位指令集切换到32位ARM指令集;D表示Debug,该内核中放置了用于调试的结构,支持片内Debug调试;M表示Multiplier,支持位乘法;I表示Embedded ICE ,内含嵌入式ICE宏单元,支持片上断点和观察点.2,ARMV4及以上版本的CPSR的哪一位反映了处理器的状态若CPSR=0x000000090,分析系统状态.CPSR=0x000000090表示当前处理器工作于ARM状态,系统处于用户模式下. CPSR的BIT5(T)反映当前处理器工作于ARM状态或Thumb状态.3,ARM有哪几个异常类型,为什么FIQ的服务程序地址要位于0x1C 在复位后,ARM处理器处于何种模式,何种状态ARM的7种异常类型:复位RESET异常,未定义的指令UND异常,软件中断SWI异常,指令预取中止PABT异常,数据访问中止DABT异常,外部中断请求IRQ异常,快速中断请求FIQ 异常.在有快速中断发生时,CPU从0x1C处取出指令执行.ARM复位后处于管理模式,工作于ARM状态.4,为什么要使用Thumb模式,与ARM代码相比较,Thumb代码的两大优势是什么为了兼容数据总线宽度为16位的应用系统,使用了ARM指令系统的一个子集Thumb指令系统.与等价的32位代码相比,Thumb指令集在保留32位代码优势时,大大节省了系统的存储空间.5,说明AMBA,AHB,ASB以及APB的英文全称及其含义.AMBA(Advanced Microcontroller Bus Architecture)即先进的微控制器总线体系结构,是ARM 公司公布的总线标准,这一标准定义了AHB,ASB,APB及AMBA共4种高性能的系统总线规范.AHB(Advanced High_performance Bus)先进的高性能总线,用于连接高性能系统组件或高宽带组件.它支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟.ASB(Advanced System Bus)即先进的系统总线,用于连接高性能的系统模块.它支持突发数据传输.APB(Advacned Peripheral Bus)即先进的外围接口总线,是一个简单的接口.它支持低性能的外围接口,APB是用来连接系统的周边组件.6,简述MMU从虚拟地址到物理地址的转换过程和方法.虚拟地址到物理地址的转换过程:当ARM要访问存储器时,MMU先查找TLB中的虚拟地址表,如果ARM的结构支持分开的地址TLB和指令TLB,那么它在取指令时使用指令TLB,其它的所有访问类别使用数据TLB;如果TLB中没有虚拟地址的入口,则是转换表遍历硬件从存储在主存储器中的转换表中获取访问权限,一旦取到,这些信息放在转换TLB中,它会放在1个没有使用的入口处或覆盖1个已有的入口.虚拟地址到物理地址的转换方法:(1)确定1级页表的基地址.(2)合成转换表的1级描述符.(3)根据不同的1级描述符获取第2级描述符地址并找出第2级描述符.(4)将第2级页描述符指示的页基地址,与虚拟地址指示的页内偏移地址相加,得到相应页的物理地址,完成虚拟地址到物理地址的转换.第三章典型嵌入式处理器1,简述LPC2000系列微控制器的内部有哪些重要的外设组件向量中断控制器,外部存储控制器,I2C中行总线控制器,SPI同步接口控制器,UART串口控制器,定时器,AD转换器,CAN总线控制器,看门狗定时器等.2,S3C44B0X如何组织8,16,32位的存储器,地址线如何连接S3C44B0X不同宽度的存储器地址线连接方法.存储器地址引脚8位总线16位总线32位总线A0A0A1A2A1A1A2A3A2A2A3A4A3A3A4A5…………Am-1Am-1Am-2Am-33,说明I2C的数据有效性和起停条件.数据有效性:当SCL信号为高电平时,SDA上的数据传输有效,传输时高位在前,低位在后,每个字节长度限制为位,而每次传送的字节总数没有限制.满足启动条件后的第一个字节应为地址域.每一个字节有一个应答位.起停条件:启动条件,在SCL信号保持高电平时SDA信号由高电平变为低电平;停止条件,要求在SCL信号保持高电平时SDA信号由低电平变为高电平.4,简述A T91FR40162处理器的特点.AR91FR40162采用ARM7TDMI处理器核,内部集成了256KB的片内SRAM和1024K字的16位Flash存储器,完全可编程的外部总线接口, 8个优先级且可以独立屏蔽的向量中断控制器,32个可编程的I/O接口线,3通道16位定时/计数器,2个同步/异步收发器及可编程的看门狗定时器,能完成全静态操作,具有先进的省电特性.第四章嵌入式处理器指令系统1,填空题(1)在源操作数为立即数时,应在前加#作为前缀,在#后加0x或&表示十六进制数,在#后加%表示二进制数,#后加0d或默认表示十进制数.(2)根据堆栈指针指向的数据位置不同,堆栈可分为满堆栈和空堆栈.(3)用一条指令完成人条件加法运算,并更新CPSR中的条件码,R1+R2->R3 ADDS R3,R1,R2.(4)在程序执行过程中,是通过寄存器R15控制程序的运行的.(5)转移指令的跳转范围是-32MB-32MB.2,选择题(2)堆栈随着存储器地址的增大而向上增长,基址寄存指向存贮有效数据的最高地址或者说指向第一个要读出的数据位置,是(A)堆栈.A,满递增B,空递增C,满递减D,空递减(3)在指令LDR R0,[R1,#4]!执行后,R1中的值为(C).A,R1不变B,R1=R1+1 C,R1=R1+4 D,R1=43,说明下列指令完成的功能(1)ADD R0,R1,R3,LSL #2 ;R0=R1+4R2(2)ANDNES R0,R1,#0x0F ;if (CPSR寄存器中Z=0) R1的高28位清零后送寄存器R0并更新CPSR寄存器,else 执行下一条指令.(3)LDRB R0,[R1,R2,LSR#2] ;把存储器地址为(R1+R2>>2)的字节数据加载到R0,R0的高24位清零.(4)ADCHI R1,R2,R3; if(CPSR寄存器中Z=0并且C=1) 执行R1=R2+R3加法操作,else执行下一条指令.(5)EOR R0,R0,R3,ROR R4; R3寄存器中的内容根据R4寄存器中的内容循环右移后与R0寄存器进行逻辑异或操作后,其结果存在R0寄存器内.(7)MLA R0,R1,R2,R3; R0=R1×R2+R3 MLA是32位乘加指令,运算结果的高32位自动丢掉.(8)LDR R1,[R0,-R5,LSL #4] ;将存储器地址为R0-16R5的字数据加载到寄存器R1中.4,用汇编语言实现下列功能的程序段,令R1=a,R2=b.(1)if(a!=b)&a-b>5)) a=a+bCMP R1,R2BEQ NextADD R3,R2,#5CMP R1,R3BLS NextADD R1,R1,R2Next B Next(2) while(a!=0){b=b+b*2;a--;}AREA TestWhile,CODE,READONL Ya equ 5b equ 1ENTRYMOV R1,#aMOV R2,#bLOOPCTL CMP R1,#0ADDNE R2,R2,R2,LSL#1SUBNES R1,R1,#1BNE LOOPCTLEND(3)从a所指向的地址,拷贝20个32位数据到b所指向的地址AREA DataCopy,CODE,READONL YENTRYLDR R0,=SrcDataLDR R1,=DstDataMOV R2,#20LOOPCTL LDR R3,[R0],#4STR R3,[R1],#4SUBS R2,R2,#1BNE LOOPCTLWait B WaitAREA DataDef, DATA,READWRITESrcData DCD 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20DstData SPACE 4*10END6,试比较TST与ANDS,CMP与SUBS,MOV与MVN指令的区别.(1)TST指令把两个操作数进行按位的与操作,并根据运算结果更新CPSR中的条件标志位的值.该指令通常用来检测是否设置了特定的位,一般操作数1是要测试的数据,而操作数2是一个位掩码.ANDS指令用于在两个操作数上进行逻辑与运算,并把结果放到目的寄存器中,操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或是1个立即数.该指令常用于设置操作数1的某些位.TST和ANDS两条指令都影响CPSR寄存器;TST指令不改变参与运算的数据,而ANDS指令对目的寄存器进行更新.(2)CMP指令用于把2个操作数进行比较,同时更新CPSR中条件标志位的值.该指令进行一次减法运算,但不保存运算结果,只更改条件标志位.标志位表示的是操作数1和操作数2 的关系(大,小,相等).SUBS 指令用于把操作数1送去操作数2,并将结果存放到目的寄存器中.操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或是一个立即数.指令影响CPSR值. CMP和SUBS指令都影响CPSR寄存器;CMP指令不保存运算结果,而SUBS指令可以保存运算结果,并且减数和被减数的值也不发生变化.(3)MOV指令将一个寄存器,被移位的寄存器或一个立即数的值装入目的寄存器内,可以指定相同的寄存器实现NOP的效果,还可以移位一个寄存器.MVN指令与MOV指令的不同之处是在传送数据之前先按位取反,即把一个被取反的值传送到目的寄存器中.8,写一段ARM汇编程序:循环累加队列中的所有数据,直到碰到零值位置,结果放在R4.源程序末尾队列如下:Array:DCD 0x11DCD 0x22DCD 0x33DCD 0R0指向队列头,ADR R0,ARRAY.使用命令LDR R1,[R0],#4来装载,累加至R4,循环直到R1为0,用死循环来停止.程序:AREA Cond_Sum,CODE,READONL YENTRYLDR R0,=ArrayMOV R4,#0LooPCtl LDR R1,[R0],#4CMP R1,#0ADDNE R4,R4,R1BNE LooPCtlWait B WaitAREA SrcData,CODE,READONL YArray DCD 0x11DCD 0x22DCD 0x33DCD 0END9,写一个汇编程序,求一个含64个带符号的16位数组组成的队列的平方和.程序:AREA SquareSum,CODE,READONL YENTRYLDR R0,=ArrayMOV R3,#4MOV R4,#0LooPCtl LDRH R1,[R0],#2MLA R4,R1,R1,R4SUBS R3,R3,#1BNE LooPCtlNOPAREA SrcData,CODE,READONL YArray DCD 0x00010002DCD 0x00030004END第五章嵌入式系统程序设计基础4,简要说明EXPORT和IMPORT的使用方法.答:EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其它的文件中引用.EXPORT可用GLOBAL代替.标号在程序中区分大小写.[WEAK]选项声明其它的同名标号优先于该标号被引用.IMPORT伪指令用于通知编译器要使用的标号在其它的源文件中定义,但要在当前源文件中引用,而且无论当前源文件中是否引用该标号,该标号均会被加入到当前源文件的符号表中. 5,分析说明下段程序完成什么功能AREA ChangeState,CODE,READONL YCODE32LDR R0,=Start+1BX R0CODE16Start MOV R1,#1END解:程序功能实现程序的跳转并从ARM状态切换到Thumb状态.6,设计一段程序完成数据块的复制,数据从源数据区snum复制到目标数据区dnum.复制时,以8个字为单位进行.对于最后所剩不足8个字的数据,以字为单位进行复制.程序:AREA BlockDataCopy,CODE,READONL Ynum EQU 20ENTRYStart LDR R0,=snumLDR R1,=dnumMOV R2,#numMOV R13,#400BlockCopy MOVS R3,R2,LSR#3BEQ CopyWordsSTMFD R13!,{R4-R11}OctCopy LDMIA R0!,{R4-R11}STMIA R1!,{R4-R11}SUBS R3,R3,#1BNE OctCopyLDMFD R13!,{R4-R11}CopyWords ANDS R2,R2,#7BEQ StopWordsCopy LDR R3,[R0],#4STR R3,[R0],#4SUBS R2,R2,#1BNE WordsCopyStop B StopAREA BlockData, DATA,READWRITEsnum DCD 1,2,3,4,5,6,7,8,9,10,11DCD 12,13,14,15,16,17,18,19,20dnum SPACE 20*4END7,利用跳转表的思想编写一个汇编程序,实现当R0分别为0,1,2时完成跳转到3个不同的子程序.程序:AREA JumpTable,CODE,READONL Ynum EQU 3ENTRYStart MOV R0,#1MOV R1,#3MOV R2,#2BL JumpTblCtlStop B StopJumpTblCtl CMP R0,#numMOVHS PC,LRADR R3,JumpTblEntryLDR PC,[R3,R0,LSL#2]JumpTblEntry DCD Subroutine1DCD Subroutine2DCD Subroutine3Subroutine1 MOV R3,#0x55MOV PC,LRSubroutine2 MOV R4,#0xAAMOV PC,LRSubroutine3 MOV R5,#0x5AMOV PC,LREND第六章嵌入式操作系统1,简述μCLinux的特点,说明其主要应用的环境.答:μCLinux主要是为控制领域定做的LINUX版本,其设计思想就是对标准LINUX内核进行裁剪,去除虚拟管理部分代码,并且对内存分配进行优化,以达到提高系统运行效率的目的.特点:(1)包含通用LINUX API函数.(2)内核体积小于512KB(3)内核及文件系统体积小于900KB(4)具有完整的TCP/IP协议栈(5)支持多种文件系统.2,简述μCLinux的移植过程.答:(1)配置内核(2)编译内核(3)下载,运行,调试内核第七章嵌入式系统的BootLoader1,简述Boot Loader与嵌入式系统的关系.Boot Loader 是在操作系统内核或用户应用程序运行之前运行的一段小程序.其作用为:初始化硬件设备,建立内存空间的映射图,将系统的软件件环境带到一个合适的状态,为最终调用操作系统内核或用户应用程序准备好正确的环境.2,Boot Loader的主要功能有哪些答:初始化硬件设备,检测系统内存映射,将内核映像和根文件系统从Flash传到RAM空间,并为内核设置启动参数,最后调用内核.3,Boot Loader分为几个阶段,各阶段主要完成什么功能答:Boot Loader通常分为2个阶段.阶段1完成基本硬件的初始化,加载阶段2的RAM空间,复制阶段2到RAM,设置堆栈指针,跳转到阶段2的C程序入口点.在阶段2初始化阶段2要使用的硬件设备,检测系统内存映射,加载内核映像和根文件系统映像,调用内核.第八章嵌入式系统设计1,简述嵌入式系统设计的一般步骤.答:⑴需求分析; ⑵体系结构设计; ⑶硬件,软件,执行机构设计; ⑷系统集成⑸系统测试2,简述软,硬件协同设计的过程.⑴需求分析; ⑵软,硬件协同设计; ⑶软,硬件实现; ⑷软,硬件协同测试和验证。
第一章1.什么是操作系统?它应具备什么功能?操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。
功能:1.计算机硬件的封装和扩充;2.计算机资源的管理,包括处理器管理、存储器存储空间管理、外部输入输出(I/O)设备管理、文件管理、网络和通信管理、提供用户接口。
2.简述嵌入式操作系统与普通操作系统的区别。
嵌入到对象体系中,为实现对象体系智能化控制的计算机系统,简称嵌入式系统。
嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。
3.什么是实时系统?对实时系统有什么要求?如果一个系统能及时响应外部事件的请求,并能在规定的时间内完成对事件的处理,这种系统称为实时系统。
对实时系统的两个基本要求:1.实时系统的计算必须产生正确的结果,称为逻辑或功能正确。
2.实时系统的计算必须在预定的时间内完成,称为时间正确。
4.什么是可剥夺内核?当一个进程正在被处理器所运行时,其他就绪进程可以按照事先规定的规定的规则,强行剥夺正在运行进程的处理器使用权,而使自己获得处理器使用权并得以运行。
5.计算:RM 等三种算法;实时进程的可调度性。
一个事件发生周期为T =200ms ,一般需要运行50ms 才完毕。
试按RM 算法确定该进程的优先级别prio 。
答:如果取k=1,根据T=200ms=0.2S ,则T k prio1=结果:prio=5。
假如有三个同时发生的周期型进程:进程1,进程2,进程3,周期分别为P1=70ms ,P2=80ms ,P3=30ms ,它们完成任务的时间分别为:C1=20ms ,C2=15ms ,C3=10ms 。
第一章:范例在这一章里将提供三个范例来说明如何使用 µC/OS-II。
笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 µC/OS-II。
在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。
这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。
这些代码实际上是在Intel Pentium II PC (300MHz)上运行和测试过,Intel Pentium II PC可以看成是特别快的80186。
笔者选择PC做为目标系统是由于以下几个原因:首先也是最为重要的,以PC做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写EPROM,不断地向EPROM仿真器中下载程序等等。
用户只需要简单地编译、链接和执行。
其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。
1.00 安装 µC/OS-II本书附带一张软盘包括了所有我们讨论的源代码。
是假定读者在80x86,Pentium,或者Pentium-II处理器上运行DOS或Windows95。
至少需要5Mb硬盘空间来安装uC/OS-II。
请按照以下步骤安装:1.进入到DOS(或在Windows 95下打开DOS窗口)并且指定C:为默认驱动器。
2.将磁盘插入到A:驱动器。
3.键入 A:INSTALL 【drive】注意『drive』是读者想要将µC/OS-II安装的目标磁盘的盘符。
INSTALL.BAT 是一个DOS的批处理文件,位于磁盘的根目录下。
它会自动在读者指定的目标驱动器中建立\SOFTWARE目录并且将uCOS-II.EXE文件从A:驱动器复制到\SOFTWARE并且运行。
µC/OS-II将在\SOFTWARE目录下添加所有的目录和文件。
.OSTCBOpt 存放有关任务的附加信息。
当用户将OS_TASK_CREATE_EXT_EN设为1 时,这个变量才有效。
通过设置该选项,可起用任务栈检查功能。
例如:作为参数传给OSTaskCreateExt()。
μC/OS-Ⅱ目前只支持 3 个选择项:OS_TASK_OTP_STK_CHK, OS_TASK_OPT_STK_CLR 和OS_TASK_OPT_SAVE_FP 。
OS_TASK_OTP_STK_CHK 用于告知TaskCreateExt(),在任务建立的时候任务栈检验功能得到了允许。
S_TASK_OPT_STK_CLR 表示任务建立的时候任务栈要清零,只有在用户需要有栈检验功能时,才需要将栈清零。
如果不定义OS_TASK_OPT_STK_CLR,而后又建立、删除了任务,栈检验功能报告的栈使用情况将是错误的。
假如任务一旦建立就决不会被删除,且用户初始化时,已将RAM 清过零,就不需要再定义OS_TASK_OPT_STK_CLR,这样可以节约程序执行时间。
传递了OS_TASK_OPT_STK_CLR 将增加TaskCreateExt()函数的执行时间,因为要将栈空间清零。
栈容量越大,清零花的时间越长。
最后一个选择项OS_TASK_OPT_SAVE_FP 通知TaskCreateExt(),任务要做浮点运算。
如果微处理器有硬件的浮点协处理器,则所建立的任务在做任务调度切换时,会保存浮点寄存器的内容。
.OSTCBId 用于存储任务的识别码。
该变量现在没有使用,留给将来扩展用。
.OSTCBNext 和.OSTCBPrev 用于任务控制块OS_TCBs 的双向使用表链接,该链表在时钟节拍函数OSTimeTick()中使用,用于刷新各个任务的任务延迟变量.OSTCBDly。
OSTCBNext、OSTCBPrev:用于将任务控制块OS_TCB插入到空闲链表;或在任务建立的时候链接到双向使用链表中;或在任务删除的时候从链表中被删除。
第一章思考与练习1、举出3个书本中未提到的嵌入式系统的例子。
答:红绿灯控制,数字空调,机顶盒2、什么叫嵌入式系统嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3、什么叫嵌入式处理器?嵌入式处理器分为哪几类?嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。
嵌入式微处理器(Embedded Microprocessor Unit, EMPU)嵌入式微控制器(Microcontroller Unit, MCU)嵌入式DSP 处理器(Embedded Digital Signal Processor, EDSP)嵌入式片上系统(System On Chip)4、什么是嵌入式操作系统?为何要使用嵌入式操作系统?是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。
其次,提高了开发效率,缩短了开发周期。
再次,嵌入式实时操作系统充分发挥了32 位CPU 的多任务潜力。
第二章1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务是什么?项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4 个阶段。
识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。
提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。
执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展,分析项目偏差,采取必要措施以实现目标。
结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系统交接给维护人员;结清各种款项。
2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险?在一个项目中,有许多的因素会影响到项目进行,因此在项目进行的初期,在客户和开发团队都还未投入大量资源之前,风险的评估可以用来预估项目进行可能会遭遇的难题。
需求风险;时间风险;资金风险;项目管理风险3、何谓系统规范?制定系统规范的目的是什么?规格制定阶段的目的在于将客户的需求,由模糊的描述,转换成有意义的量化数据。
嵌入式实时操作系统题库一、填空题1. uC/OS-II是一个简洁、易用的基于优先级的嵌入式(抢占式)多任务实时内核。
2.任务是一个无返回的无穷循环。
uc/os-ii总是运行进入就绪状态的(最高优先级)的任务。
3.因为uc/os-ii总是运行进入就绪状态的最高优先级的任务。
所以,确定哪个任务优先级最高,下面该哪个任务运行,这个工作就是由(调度器(scheduler))来完成的。
4.(任务级)的调度是由函数OSSched()完成的,而(中断级)的调度是由函数OSIntExt() 完成。
对于OSSched(),它内部调用的是(OS_TASK_SW())完成实际的调度;OSIntExt()内部调用的是(OSCtxSw())实现调度。
5.任务切换其实很简单,由如下2步完成:(1)将被挂起任务的处理器寄存器推入自己的(任务堆栈)。
(2)然后将进入就绪状态的最高优先级的任务的寄存器值从堆栈中恢复到(寄存器)中。
6.任务的5种状态。
(睡眠态(task dormat)):任务驻留于程序空间(rom或ram)中,暂时没交给ucos-ii处理。
(就绪态(task ready)):任务一旦建立,这个任务就进入了就绪态。
(运行态(task running)):调用OSStart()可以启动多任务。
OSStart()函数只能调用一次,一旦调用,系统将运行进入就绪态并且优先级最高的任务。
(等待状态(task waiting)):正在运行的任务,通过延迟函数或pend(挂起)相关函数后,将进入等待状态。
(中断状态(ISR running)):正在运行的任务是可以被中断的,除非该任务将中断关闭或者ucos-ii将中断关闭。
7.(不可剥夺型)内核要求每个任务自我放弃CPU的所有权。
不可剥夺型调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。
8.当系统响应时间很重要时,要使用(可剥夺型)内核。
最高优先级的任务一旦就绪,总能得到CPU的控制权。
第一章1.什么是操作系统?它应具备什么功能?操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。
功能:1.计算机硬件的封装和扩充;2.计算机资源的管理,包括处理器管理、存储器存储空间管理、外部输入输出(I/O)设备管理、文件管理、网络和通信管理、提供用户接口。
2.简述嵌入式操作系统与普通操作系统的区别。
嵌入到对象体系中,为实现对象体系智能化控制的计算机系统,简称嵌入式系统。
嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。
3.什么是实时系统?对实时系统有什么要求?如果一个系统能及时响应外部事件的请求,并能在规定的时间内完成对事件的处理,这种系统称为实时系统。
对实时系统的两个基本要求:1.实时系统的计算必须产生正确的结果,称为逻辑或功能正确。
2.实时系统的计算必须在预定的时间内完成,称为时间正确。
4.什么是可剥夺内核?当一个进程正在被处理器所运行时,其他就绪进程可以按照事先规定的规定的规则,强行剥夺正在运行进程的处理器使用权,而使自己获得处理器使用权并得以运行。
5.计算:RM 等三种算法;实时进程的可调度性。
一个事件发生周期为T =200ms ,一般需要运行50ms 才完毕。
试按RM 算法确定该进程的优先级别prio 。
答:如果取k=1,根据T=200ms=0.2S ,则T k prio1=结果:prio=5。
假如有三个同时发生的周期型进程:进程1,进程2,进程3,周期分别为P1=70ms ,P2=80ms ,P3=30ms ,它们完成任务的时间分别为:C1=20ms ,C2=15ms ,C3=10ms 。
试判断该进程是否为可调度的。
答:807.0301080157020=++=ρ777.0)12(3)12(3=-=-n n不满足公式(RM 算法)要求,所以三个进程是不可调度的。
满足公式(截止期优先算法或最小裕度算法)要求,所以三个进程是可调度的。
第二章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 的使用权让给其他任务。
中断服务状态:正在运行的任务一旦响应中断申请,就会中止运行而去执行中断服务程序。
5.任务控制块记录了任务的那些信息?*OSTCBStkPtr指向任务堆栈栈顶的指针; *OSTCBExtPtr指向任务控制快扩展的指针; *OSTCBStkBottom 指向任务堆栈栈底的指针; OSTCBStkSize任务堆栈的长度; OSTCBOpt创建任务时的选择项; OSTCBId 任务 ID ;*OSTCBNext指向后一个任务控制快的指针; *OSTCBPrev 指向后一个任务控制快的指针;*OSTCBEventPtr 指向事件控制快的指针;)12(1-≤=∑=n ni i i n P C ρ11≤=∑=ni i i P C ρ*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=0001100000011000+0000010=00011010B=26第三章1.简述UC/OS-II的中断响应过程。
中断响应过程:系统接收到中断请求后,如果这是CPU处于中断允许状态,系统会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统会根据情况返回到被中止的任务,或转向更高优先级的任务。
2.全局变量OSIntNesting的作用是什么?全局变量OSIntNesting记录中断嵌套的层数。
3.什么叫作操作系统的时钟?任何操作系统都要提供一个周期性的信号源,以供系统处理诸如延时,超时等与时间有关的事件,这个周期性的信号源叫做时钟。
4.在UC/OS-II中,时钟节拍服务做了什么工作?uC/OS-II需要提供周期性信号源,用于实现时间时间延时和确认超市。
节拍率应为10-100次/秒,或者说10-100Hz。
时钟节拍率越高,系统的额外符合就越重。
5.说明延时函数OSTimeDly()与OSTimeDlyHMSM()的区别。
所有用户任务必须在任务中合适的位置调用函数OSTimeDly(),或通过调用函数OSTimeDlyHMSM()调用OSTimeDly()。
OSTimeDly()的参数ticks为以时钟节拍数为单位的延时时间的,而OSTimeDlyHMSM()的参数分别是时,分,秒。
第四章1.使用信号量可在应用程序中完成哪些工作?1.创建信号量;2.请求信号量;3.发送(释放)信号量;4.删除信号量;5.查询信号量的状态。
2.什么叫优先级反转?这种现象什么情况下发生?有什么危害?在可剥夺型内核中,当任务以独占方式使用共享资源时,会出现低优先级任务先于高优先级任务而被运行的情况,优为先级反转。
产生优先级反转现象的原因:这是因为一个低优先级任务在获得信号量使用共享资源期间,被高优先级任务所打断而不能释放信号量,从而使正在等待该信号量的高优先级任务因得不到信号量而被迫处于等待状态。
在等待期间,就让占据该信号量的低优先级任务先运行。
后果:如果这种情况发生较多,则会极大地恶化优先级任务地运行环境。
3.互斥型信号量是如何防止优先级反转的?任务可以用互斥型信号量实现对共享资源的独占式处理,为了降解优先级反转,内核可以将低优先级提升到高于那个高优先级的任务,直到低优先级的任务用完占用的共享资源。
4.能否使用全局变量来实现任务间的通信?它有什么缺点?全局变量只能传递信息,但不能同步任务。
因此只能用于两种情况:1.不需要行为同步,想用时就用这个全局变量。
2.同步要求不实时,可以让另一个任务定期去查询该全局变量是否被“生产”。
第五章1.uC/OS-II为什么要定义信号量集?在实际运用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用得结果来决定任务得运行方式。
信号量集(事件标志组) 就是实现这种功能的数据结构。
2.信号量集所管理的是什么信号?信号量集所管理的信号量都是二值信号。
它实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算(“与”运算(AND),“或”运算(OR))的组合逻辑。
3.使用信号量集可以在程序中完成哪些工作?1.创建信号量集;2.请求信号量集;3.向信号量集发信号;4.查询信号量集的状态;5.删除信号量集。
第六章1.什么叫内存分区?什么叫内存块?内存分区与内存块之间有什么关系?uC/OS-II能够解决内存碎片问题及执行时间固定,对内存进行两级管理。
将大片连续内存分成若干个分区,每个分区又分成若干大小相等的内存块来进行管理。