ucosii操作系统复习大纲Word下载.docx

上传人:b****6 文档编号:18670979 上传时间:2022-12-31 格式:DOCX 页数:16 大小:53.75KB
下载 相关 举报
ucosii操作系统复习大纲Word下载.docx_第1页
第1页 / 共16页
ucosii操作系统复习大纲Word下载.docx_第2页
第2页 / 共16页
ucosii操作系统复习大纲Word下载.docx_第3页
第3页 / 共16页
ucosii操作系统复习大纲Word下载.docx_第4页
第4页 / 共16页
ucosii操作系统复习大纲Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

ucosii操作系统复习大纲Word下载.docx

《ucosii操作系统复习大纲Word下载.docx》由会员分享,可在线阅读,更多相关《ucosii操作系统复习大纲Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

ucosii操作系统复习大纲Word下载.docx

16.删除任务,是说任务将返回并处于【休眠状态】,并不是说任务的代码被删除了,只是任务的代码不再被µ

C/OS-Ⅱ调用。

17.µ

C/OS-Ⅱ要求用户提供【定时中断】来实现延时与超时控制等功能。

18.定时中断也叫做【时钟节拍】,它应该每秒发生10至100次。

19.时钟节拍的实际频率是由用户的应用程序决定的。

时钟节拍的频率越高,系统的负荷就【越重】。

 

20.µ

C/OS-II中的信号量由两部分组成:

一个是信号量的【计数值】,它是一个16位的无符号整数(0到65,535之间);

另一个是由等待该信号量的任务组成的【等待任务表】。

用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成【1】,这样µ

C/OS-II才能支持信号量。

21.µ

C/OS-II中表示当前已经创建的任务数全局变量名为:

【OSTaskCtr】。

C/OS-II中表示当前内核运行的标记全局变量名为:

【OSRunning】。

22.在使用OSTaskCreate创建任务时,若需要TaskData作伪参数传递给任务Task,并从任务Task中获得传入的字符参数值,请在下面【】填上合适的代码。

charTaskData=’A’;

OSTaskCreate(Task,【(void*)&

TaskData】,&

TaskStk[0][TASK_STK_SIZE-1],1);

voidTask(void*pdata)

{

charvalue=【*(char*)pdata】;

for(;

;

){

OSSemPend(RandomSem,0,&

err);

y=(int)(*(char*)pdata-'

A'

);

OSSemPost(RandomSem);

PC_DispChar(10,25,value,DISP_FGND_WHITE+DISP_BGND_BLUE);

OSTimeDly

(1);

}

}

23.在µ

C/OS-II在任务Task1中使用邮箱函数OSMboxPost()发送字符;

而在Task2中接收OSMboxPost()字符,请在下面【】填上合适的代码。

voidTask1(void*data)

chartxmsg;

INT8Uerr;

txmsg='

OSMboxPost(TxMbox,【(void*)&

txmsg】);

/*SendmessagetoTask2*/

OSMboxPend(AckMbox,0,&

txmsg++;

if(txmsg=='

Z'

}

voidTask5(void*data)

char*rxmsg;

INT8Uerr;

data=data;

rxmsg=【(char*)】OSMboxPend(TxMbox,0,&

PC_DispChar(70,18,*rxmsg,DISP_FGND_YELLOW+DISP_BGND_BLUE);

OSMboxPost(AckMbox,(void*)1);

24.在Task1中使用消息队列OSQPend()函数接收消息“HelloWorld!

”,而在Task2中使用消息队列OSQPost()函数发送消息“HelloWorld!

”,请在下面【】填上合适的代码.

voidTask1(void*pdata)

char*msg;

pdata=pdata;

msg=【(char*)】OSQPend(MsgQueue,0,&

PC_DispStr(70,13,msg,DISP_FGND_YELLOW+DISP_BGND_BLUE);

OSTimeDlyHMSM(0,0,0,100);

voidTask2(void*pdata)

charmsg[20];

strcpy(&

msg[0],"

HelloWorld!

"

OSQPost(MsgQueue,【(void*)】&

msg[0]);

OSTimeDlyHMSM(0,0,0,500);

二.名词解释

1.代码的临界段

代码的临界段也称为临界区,指处理时不可分割的代码。

2.资源

任何为任务所占用的实体都可称为资源。

资源可以是输入输出设备;

资源也可以是一个变量,一个结构或一个数组等。

3.共享资源

可以被一个以上任务使用的资源叫做共享资源。

4.任务

一个任务,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全只属该程序自己。

典型地、每个任务都是一个无限的循环。

5.任务切换

指ContextSwitch,其含义是CPU寄存器内容切换。

当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态(Context),即CPU寄存器中的全部内容。

6.内核

多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。

内核提供的基本服务是任务切换。

7.调度(Scheduler)

内核的主要职责之一,就是要决定该轮到哪个任务运行了。

多数实时内核是基于优先级调度法的。

8.可剥夺型内核

最高优先级的任务一旦就绪,总能得到CPU的控制权。

当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。

如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。

三.简答题

1.举例说明µ

COS-II可移植型数据类型的定义方式

答:

因为不同的微处理器有不同的字长,µ

C/OS-II的移植文件包括很多类型定义以确保可移植性。

µ

COS-II不使用C语言中的short,int,long等数据类型的定义,因为它们与处理器类型有关,隐含着不可移植性。

C/OS-II代之以移植性强的整数数据类型,这样,既直观又可移植(该数据类型不依赖于编译),举例如下:

typedefunsignedcharBOOLEAN;

typedefunsignedcharINT8U;

typedefsignedcharINT8S;

typedefunsignedintINT16U;

typedefsignedintINT16S;

typedefunsignedlongINT32U;

typedefsignedlongINT32S;

2.µ

COS-II如何定义全局变量?

答:

众所周知,全局变量应该是得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。

因此,必须在.C和.H文件中定义。

这种重复的定义很容易导致错误。

COS-II采用的方法只需用在头文件中定义一次。

uC/OS_II.H头文件中包括以下定义全局宏定义:

#ifdefOS_GLOBALS

#defineOS_EXT

#else

#defineOS_EXTextern

#endif

OS_EXTINT32UOSIdleCtr;

同时,uCOS_II.H有中以下定义:

#defineOS_GLOBALS

#include“includes.h”

当编译器处理uCOS_II.C时,它使得头文件变成如下所示,因为OS_EXT被设置为空。

INT32UOSIdleCtr;

这样编译器就会将这些全局变量分配在内存中。

当编译器处理其他.C文件时,头文件变成了如下的样子,因为OS_GLOBAL没有定义,所以OS_EXT被定义为extern。

externINT32UOSIdleCtr;

在这种情况下,不产生内存分配,而任何.C文件都可以使用这些变量。

这样的就只需在.H文件中定义一次就可以了。

3.OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的含义及作用?

OS_ENTER_CRITICAL():

关中断;

OS_EXIT_CRITICAL():

开中断。

关中断和开中断是为了保护临界段代码。

用户的应用代码可以使用这两个宏来开中断和关中断。

很明显,关中断会影响中断延迟,所以要特别小心。

用户还可以用信号量来保护临界段代码。

4.基于PC的服务中如何测量PC_DisplayChar()的执行时间?

答:

测量PC_DisplayChar()的执行时间的代码如下:

INT16Utime;

//定义时间变量

PC_ElapsedInit();

//时钟初始化

PC_ElapsedStart();

//开始计时

PC_DispChar(40,24,‘A’,DISP_FGND_WHITE);

//执行代码

time=PC_ElapsedStop();

//结束计时

5.uC/OS-II的任务框架

voidtask_xxx(void*pData)

{/*该任务的初始化工作*/

……

/*进入该任务的死循环*/

while

(1)

{

每个用户的任务都必须符合事件驱动的编程模型,即uC/OS-II的应用程序都必须是“事件驱动的编程模型”。

一个任务首先等待一个事件的发生,事件可以是系统中断发出的,也可以是其它任务发出的,又可以是任务自身等待的时间片。

当一个事件发生了,任务再作相应处理,处理结束后又开始等待下一个事件的发生。

如此周而复始的任务处理模型就是“事件驱动的编程模型”。

事件驱动模型也涵盖了中断驱动模型,uC/OS-II事件归根结底来自三个方面:

(1)中断服务函数发送的事件

(2)系统延时时间到所引起的

(3)其它任务发送的事件。

6.与共享资源打交道时,使之满足互斥条件最一般的方法包括哪些?

包括:

关中断、使用测试并置位指令、禁止做任务切换、利用信号量等。

7.描述利用μC/OS_Ⅱ宏调用关中断和开中断处理共享数据的示意性代码程序。

OS_ENTER_CRITICAL();

/*在这里处理共享数据*/

OS_EXIT_CRITICAL();

8.信号量的典型应用包括哪些?

信号量(Semaphores)是一种约定机制,在多任务内核中的典型应用包括:

(1)控制共享资源的使用权(满足互斥条件);

(2)标志某事件的发生

(3)使两个任务的行为同步

9.对信号量只能实施哪三种操作?

一般地说,对信号量只能实施三种操作:

(1)初始化(INITIALIZE),也可称作建立(CREATE);

(2)等信号(WAIT)也可称作挂起(PEND);

(3)给信号(SIGNAL)或发信号(POST)。

10.给出μC/OS-Ⅱ中如何用信号量处理共享数据的示意代码?

通过获得信号量处理共享数据的示意代码如下:

OS_EVENT*SharedDataSem;

voidFunction(void)

{

INT8Uerr;

OSSemPend(SharedDataSem,0,&

/*共享数据的处理在此进行,(中断是开着的)*/

OSSemPost(SharedDataSem);

11.给出初始化和启动μC/OS-Ⅱ的示意代码。

voidmain(void)

OSInit();

/*初始化uC/OS-II*/

.

通过调用OSTaskCreate()或OSTaskCreateExt()创建至少一个任务;

OSStart();

/*开始多任务调度!

OSStart()永远不会返回*/

12.描述建立任务OSTaskCreate()的函数原型。

建立任务OSTaskCreate()的函数原型为:

INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio)

其中,

task:

任务代码的指针;

pdata:

当任务开始执行时传递给任务的参数的指针;

ptos:

分配给任务的堆栈的栈顶指针;

prio:

分配给任务的优先级。

13.任务可以是一个无限的循环,也可以是在一次执行完毕后被删除掉。

请给出示意代码结构。

C/OS-Ⅱ描述的任务示意代码必须是以下两种结构之一:

voidYourTask(void*pdata)

{

){

/*用户代码*/

调用µ

C/OS-Ⅱ的服务例程之一:

OSMboxPend();

OSQPend();

OSSemPend();

OSTaskDel(OS_PRIO_SELF);

OSTaskSuspend(OS_PRIO_SELF);

OSTimeDly();

OSTimeDlyHMSM();

/*用户代码*/

}

voidYourTask(void*pdata)

14.μC/OS-Ⅱ任务管理提供哪些服务?

μC/OS-Ⅱ任务管理提供的服务包括:

(1)建立任务:

OSTaskCreate()或OSTaskCreateExt();

(2)删除任务:

OSTaskDel();

(3)请求删除任务:

OSTaskDelReq();

(4)改变任务的优先级:

OSTaskChangePrio();

(5)挂起任务:

OSTaskSuspend();

(6)恢复任务:

OSTaskResume();

(7)获得有关任务的信息:

OSTaskQuery()。

15.μC/OS-Ⅱ时间任务管理提供哪些服务?

μC/OS-Ⅱ时间任务管理提供的服务包括:

(1)任务延时函数:

OSTimeDly()

(2)按时分秒延时函数:

OSTimeDlyHMSM()

(3)让处在延时期的任务结束延时:

OSTimeDlyResume()

(4)设置系统时间:

OSTimeGet()

(5)获得系统时间:

OSTimeSet()

16.μC/OS-Ⅱ提供的数据共享和任务通讯的方法包括哪些?

μC/OS-Ⅱ提供的数据共享和任务通讯的方法包括五种方法:

(1)利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断。

(2)利用函数OSSchedLock()和OSSchekUnlock()对µ

C/OS-II中的任务调度函数上锁和开锁。

(3)信号量。

(4)邮箱。

(5)消息队列。

17.对于事件控制块进行的一些通用包括哪些操作?

对于事件控制块进行的一些通用操作包括:

(1)初始化一个事件控制块:

OSEventWaitListInit();

(2)使一个任务进入就绪态:

OSEventTaskRdy();

(3)使一个任务进入等待该事件的状态:

OSEventTaskWait();

(4)因为等待超时而使一个任务进入就绪态:

OSEventTO()。

18.μC/OS-Ⅱ信号量提供哪些服务?

μC/OS-Ⅱ信号量提供的服务包括:

(1)建立一个信号量:

OSSemCreate();

(2)等待一个信号量:

OSSemPend();

(3)发送一个信号量:

OSSemPost();

(4)无等待地请求一个信号量:

OSSemAccept();

(5)查询一个信号量的当前状态:

OSSemQuery()。

19.μC/OS-Ⅱ邮箱提供哪些服务?

μC/OS-Ⅱ邮箱提供的服务包括:

(1)建立一个邮箱:

OSMboxCreate();

(2)等待一个邮箱中的消息:

OSMboxPend();

(3)发送一个消息到邮箱中:

OSMboxPost();

(4)无等待地从邮箱中得到一个消息:

OSMboxAccept();

(5)查询一个邮箱的状态:

OSMboxQuery()

20.μC/OS-Ⅱ消息队列提供哪些服务?

μC/OS-Ⅱ消息队列提供的服务包括:

(1)建立一个消息队列:

OSQCreate();

(2)等待一个消息队列中的消息:

OSQPend();

(3)向消息队列发送一个消息(FIFO):

OSQPost();

(4)向消息队列发送一个消息(LIFO):

OSQPostFront();

(5)无等待地从一个消息队列中取得消息:

OSQAccept();

(6)清空一个消息队列:

OSQFlush();

(7)查询一个消息队列的状态:

OSQQuery()。

21.μC/OS-Ⅱ内存管理提供哪些服务?

μC/OS-Ⅱ内存管理提供的服务包括:

(1)建立一个内存分区:

OSMemCreate();

(2)分配一个内存块:

OSMemGet();

(3)释放一个内存块:

OSMemPut();

(4)查询一个内存分区的状态:

OSMemQuery()。

22.移植µ

C/OS-Ⅱ时,要使µ

C/OS-Ⅱ正常运行,处理器必须满足哪些基本要求?

要使µ

C/OS-Ⅱ正常运行,处理器必须满足以下要求:

(1)处理器的C编译器能产生可重入代码。

(2)用C语言就可以打开和关闭中断。

(3)处理器支持中断,并且能产生定时中断(通常在10至100Hz之间)。

(4)处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。

(5)处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。

四.论述题

1.论述μC/OS-Ⅱ控制下的任务状态转换图

μC/OS-Ⅱ控制下的任务状态转换图如下图所示。

在任一给定的时刻,任务的状态一定是在这五种状态之一。

(1)睡眠态(DORMANT):

指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ管理。

一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。

(2)就绪态(READY):

当任务一旦建立,这个任务就进入就绪态准备运行。

把任务交给μC/OS-Ⅱ是通过调用下述两个函数之一:

OSTaskCreate()或OSTaskCreateExt()。

(3)运行态(RUN):

调用OSStart()可以启动多任务。

OSStart()函数运行进入就绪态的优先级最高的任务。

(4)等待状态(WAITING):

正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是OSTimeDly()或OSTimeDlyHMSM()。

这个任务于是进入等待状态,等待这段时间过去,下一个优先级最高的、并进入了就绪态的任务立刻被赋予了CPU的控制权。

正在运行的任务期待某一事件的发生时也要等待,手段是调用以下3个函数之一:

OSSemPend(),OSMboxPend(),或OSQPend()。

调用后任务进入了等待状态(WAITING)。

(5)中断状态(ISR):

正在运行的任务是可以被中断的,除非该任务将中断关了,或者μC/OS-Ⅱ将中断关了。

被中断了的任务就进入了中断服务态(ISR)。

2.论述μC/OS-Ⅱ的核心数据结构任务控制块(OS_TCBs)

任务控制块(OS_TCBs)是μC/OS-Ⅱ的核心数据结构,当任务的CPU使用权被剥夺时,μC/OS-Ⅱ用它来保存该任务的状态。

当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。

OS_TCBs全部驻留在RAM中。

一旦任务建立了,任务控制块OS_TCBs

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1