嵌入式系统复习题讲解.docx

上传人:b****5 文档编号:8294268 上传时间:2023-01-30 格式:DOCX 页数:22 大小:39.34KB
下载 相关 举报
嵌入式系统复习题讲解.docx_第1页
第1页 / 共22页
嵌入式系统复习题讲解.docx_第2页
第2页 / 共22页
嵌入式系统复习题讲解.docx_第3页
第3页 / 共22页
嵌入式系统复习题讲解.docx_第4页
第4页 / 共22页
嵌入式系统复习题讲解.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

嵌入式系统复习题讲解.docx

《嵌入式系统复习题讲解.docx》由会员分享,可在线阅读,更多相关《嵌入式系统复习题讲解.docx(22页珍藏版)》请在冰豆网上搜索。

嵌入式系统复习题讲解.docx

嵌入式系统复习题讲解

嵌入式系统复习题

填空题(20’)选择题(20=10*2’)是非题(16’=8*2’)简答题(24=4*6’)综合题(20=2*10’)

1、什么是计算机操作系统(概念)P1~2

2、操作系统的功能P3

3、嵌入式系统的概念、三个基本要素P4

4、两个阶段(MCU、SOC)、两种模式(创新模式与那个打不出来的模式~)P5倒数第三段第二行

1、嵌入式操作系统的主要特点P7倒数一行~P8

5、实时系统的两个基本要求P8

2、实时操作系统应满足的三个条件P9

3、-ml(large模式)P18

9、编译(上课时有修改的:

把”-I.\”去掉)P20

10、Tlink怎么写P21

11、命令集的命令行以tab开头、然后又说了一下make加标号不知道是什么鬼,我没听清楚~@#¥&~P23然后分了一下神就不知道她说了什么就到了第三章了~~

12、进程、线程、uC/OS-II的两种任务、最多64个任务P51

13、任务的五种状态P52

14、P53只听到“临界段”三个字

15、P56听坐在隔壁的测控班的说老师说可能会出例3-3

16、向上堆栈、向下堆栈P58

17、表3-2P63

18、例3-5以及其逆向P65

19、就绪表的三种操作P66

20、最高优先级就绪任务的查找P66~67

21、标题“调度器的主要工作”的第二段

22、调度器进行任务切换图3-12P71

23、调用启动任务函数之前必须至少创建一个任务P75

24、挂起任务、恢复任务的函数名P82

25、启动函数OSStart()这里只听到这个,还是问隔壁的~~P97

26、P101中断的定义以及倒数最后一段

27、P102只听到OSIntNesting还有一个not什么鬼的不知是啥~~

28、宏定义的三种方式P106

29、P108的程序代码

30、钩子函数存放在OS_cpu.c中

31、各任务之间的制约关系P124

32、信号量、消息邮箱、队列我只听到她讲这三个P125~126、P133P136

33、信号量的创建、请求信号量、发送信号量P143~145

34、优先反转的本质P154第三段

35、先进后出、先进先出P169

36、例5-9P172

37、创建信号量集P184

38、请求、发送信号量集P186

39、例6-1P187

40、例6-3P192

41、内存分区与内存块的定义P197

42、P200第二段

简答题:

第七章出一道、做过的实验中出一道

综合题:

1、编程题:

①用信号量使Mytest、youtest轮流实现Fun()②第五章消息队列先进先出、后进先出、函数名、参数、堆栈的创建以及初始化③两个任务分别发送,第三个任务才能运行(6-1)④例6-3P192

2、解释题:

①P73、②P107③P143④P184

 

第一章

1、只由硬件构成的计算机叫做裸机。

2、操作系统是方便用户管理和控制计算机软硬件资源的系统软件(或程序集合)。

操作系统的功能:

处理器的管理、存储的管理、设备的管理、文件的管理、网络和通信的管理、提供用户接口。

3、嵌入式系统的定义:

嵌入式系统是对对象进行自动控制而使其具有智能化并可嵌入对象体系中的专用计算机系统。

嵌入式、专用性与计算机系统是嵌入式系统的三个基本要素。

4、在探索单片机的发展道路时,有过两种模式:

Σ模式和创新模式。

5、单片机形态的嵌入式系统硬件自20世纪70年代以来,大体上可分为MCU,SoC两个阶段。

6、嵌入式操作系统与普通操作系统相比,具有以下特点:

微型化、可裁剪性、实时性、可靠性高、易移植性。

7、对实时系统有两个基本要求:

第一,实时系统的计算必须产生正确的结果,称为逻辑或功能正确;

第二,实时系统的计算必须在预定的时间内完成,称为时间正确。

8、实时操作系统应满足以下三个条件:

·实时操作系统必须是多任务系统。

·任务的切换时间应与系统中的任务数无关。

·中断延迟的时间可预知并尽可能短。

 

第二章

1、内存模式-ml是large模式。

2、编译:

>bcc–c–ml–Ic:

\bc\include–Lc:

\bc\libpa.c

2、命令集中的所有命令行必须以TAB键开头。

3、make执行了makefile中的第一个段落,即标号为target1的那个段,而其余两个段均未被执行,make+标号,即执行该标号段落。

4、makefile文件的命名,make–f文件名。

 

第三章

1、根据任务是否具有自己的私有运行空间,人们把任务也分别叫做了“进程”和“线程”。

2、uC/OS-Ⅱ的任务有两种:

用户任务和系统任务。

3、目前,在在uC/OS-Ⅱ中,最多可以含有64个任务(包括用户任务和系统任务。

4、uC/OS-Ⅱ任务的5种状态:

睡眠状态、就绪状态、运行状态、等待状态、中断服务状态。

删除任务

 

等待事件中断

等待时间到时间挂起

创建任务抢占其他任务

删除任务被抢占中断返回

删除任务

5、处于两个宏之间的代码是不会被中断的,uC/OS-Ⅱ把这种受保护的代码段叫做临界段,所以OS_ENTER_CRITICAL()叫做进入临界段宏,而OS_EXIT_CRITICAL()叫做推出临界段宏。

6、当OS_STK_GROWTH==0时,堆栈增长方向向上;当OS_STK_GROWTH==1时,堆栈增长方向向下。

7、系统对于就绪表主要有三个操作:

登记、注销和从就绪表的就绪任务中得知具有最高优先级任务的标识(优先级prio)。

8、uC/OS-Ⅱ有两个调度器:

一种是任务级的调度器;另一种是中断级的调度器。

9、uC/OS-Ⅱ有两个用来创建任务的函数;OSTaskCreate()和OSTaskCreateExt()。

10、uC/OS-Ⅱ有一个规定:

在调用启动任务函数OSStart()之前,必须已经创建了至少一个任务。

11、uC/OS-Ⅱ不允许在中断服务程序中创建任务。

12、挂起任务函数OSTaskSuspend()的原型:

INT8UOSTaskSuspend(INT8Uprio);

恢复任务函数OSTaskResume()的原型:

INT8UOSTaskResume(INT8Uprio)。

13、变量OSRunning的值FALSE,类型为BOOLEAN,uC/OS-Ⅱ核是否正在运行的标志。

第四章

1、uC/OS-Ⅱ系统响应中断的过程是:

系统接收到中断请求后,如果这时CPU处于中断允许状态(即中断是开放的),系统就会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统就会根据情况返回到被中止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务。

2、宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的实现方法:

(1)第一种方法最简单,即直接使用处理器的开中断和关中断指令来实现宏,这时需要令常数OS_CRITICAL_METHOD=1。

(2)第二种方法稍微复杂一些,但可使CPU中断标志的状态在临界段前和临界段后不发生改变,这时需要令常数OS_CRITICAL_METHOD=2。

(3)第三种方法的前提条件是,用户使用的C编译器具有扩展功能。

用户可以获得程序状态字的值,这样就可把该值保存在C变量中,而不必压到堆栈中,这时需要令常数OS_CRITICAL_METHOD=3。

3、钩子函数放在OS_CPU.C中。

4、延时函数:

OSTimeDly()和OSTimeDlyHMSM()。

第五章

1、两个制约关系:

直接制约关系和间接制约关系。

2、uC/OS-Ⅱ使用信号量、消息邮箱和消息队列这些中间环节来实现任务之间的通信。

3、使一个任务进入等待状态的函数:

OS_EventTaskWait();

使一个正在等待的任务进入就绪状态的函数:

OS_EventTaskRdy();

使一个等待超时的任务进入就绪状态的函数:

OS_EventTO()。

4、任务通过调用函数OSSemPend()请求信号量。

voidOSSemPend(OS_EVENT*pevent,//信号量的指针

INT16Utimeout,//等待时限

INT8U*err//错误信息

参数pevent是被请求信号量的指针。

5、使用信号量的任务是否能够运行是受任务的优先级别以及是否占用信号量两个条件约束的,而信号量的约束高于优先级别的约束。

6、当事件控制块成员OSEventType值OS_EVENT_TYPE_Q时,该事件控制块代表一个消息队列。

事件控制块成员OSEventPtr指向一个叫做队列控制块(OS_Q)的结构,该结构管理这一个数组MsgTb1[],该数组的元素都是指向消息的指针。

7、优先级反转的本质:

是因为一个优先级别较低的任务在获得了信号量使用共享资源期间,被具有较高优先级别的任务所打断而不能释放信号量,从而使正在等待这个信号量的更高级别的任务因得不到信号量而被迫处于等待状态,在这个等待期间,就让优先级别低于它而高于占据信号量的任务的任务运行了。

显然,如果这种优先级别介于使用信号量的两个任务优先级别中间的中等优先级别任务较多,则会极大恶化高优先级别任务的运行环境,是实时系统所无法容忍的。

8、两种方式指针数组插入消息:

先进先出(FIFO)方式和后进先出(LIFO)方式。

第六章和第七章

1、uC/OS-Ⅱ信号量集可以对信号量进行“与(AND或ALL)”和“或(OR或ANY)”两种逻辑运算。

2、请求信号量集,调用函数OSFlagPend();

向信号量集发生信号,调用函数OSFlagPost()。

3、nblks>1,因为分区内存块至少有两块;

Bkksize>=sizeof(*void),因为每个内存快的空间至少能存放一个指针,因为要在内存块中建立一个用于把分区的内存块链接为一个链表的指针。

1.操作系统用硬件定时器提供的一个周期性的信号源叫ucos-II的系统时钟;

2.最小的时钟单位是两次中断之间间隔的时间,这个最小时钟单位叫时钟节拍;

3.用来记录任务堆栈指针、任务的当前状态、任务的优先级别等一些与任务管理相关的属性的表叫任务控制块链表;

4.在uC/OS-II中,使用信号量、消息邮箱和消息队列等这些被称作事件的中间环节来实现任务之间的通信。

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

答:

OS_ENTER_CRITICAL():

关中断;

OS_EXIT_CRITICAL():

开中断。

在OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏之间的代码是不会响应中断的,这种受保护的代码段叫做临界段。

作用:

使临界段中的代码不能被中断,以保护一些不能被中断的用户代码(要求不受干扰地连续运行),保证系统的正常工作。

2.简述一下任务优先级发转的原因?

为了避免此类事件的发生,uC/OS-II采用什么办法来解决该问题?

答:

在可剥夺型内核中,当任务以独占方式使用资源时,会出现低优先级任务先于高优先级任务而被执行的现象,这种现象叫做任务优先级反转。

是因为一个优先级别较低的任务在获得了信号量使用共享资源期间,被具有较高优先级别的任务所打断而不能释放信号量,从而使正在等待这个信号量的更高级别的任务因得不到信号量而被迫处于等待状态,在这个等待期间,就让优先级别低于它而高于占据信号量的任务的任务运行了。

显然,如果这种优先级别介于使用信号量的两个任务优先级别中间的中等优先级别任务较多,则会极大恶化高优先级别任务的运行环境,是实时系统所无法容忍的。

解决办法:

使获得信号量任务的优先级别在使用共享资源期间暂时提升到所有任务最高优先级的高一个级别上,以使该任务不被其他任务所打断,从而能尽快地使用完共享资源并释放信号量;然后再释放信号量之后,再恢复该任务原来的优先级别

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

对信号量有哪些操作?

答:

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

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

(2)标志某事件的发生;

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

一般来说对信号量可以实施如下操作:

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

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

(3)给信号或发信号(POST);

(4)删除信号量(DEL);

(5)查询信号状态(QUERY)

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

答:

函数原型:

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

其调用者:

任务或者是初始化代码。

作用是建立一个新任务,任务的建立可以在多个任务环境启动之前,也可以在正在运行的任务中建立,但中断处理程序中不能建立任务,一个任务必须为无限循环结构,且不能有返回点。

无论用户程序中是否产生中断,在初始化任务堆栈时,堆栈的结构必须与处理器中断后寄存器入栈的顺序结构相同。

该函数返回一个8位的整形数,调用该函数需要四个参数:

第一个参数:

task是一个指向任务代码的指针,也就是用户代码的首地址,平常使用中我们把自己创建的任务的名字作为这个参数即可。

第二个参数:

pdata指向一个数据结构,该结构用来在建立任务时向任务传递参数。

第三个参数:

ptos是指向任务堆栈栈顶的指针,一般把创建的任务的堆栈数组首地址赋给它。

第四个参数:

prio是任务的优先级

5.简述一下μC/OS-Ⅱ控制下的任务状态类型?

描述任务状态转换过程图?

答:

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

睡眠状态:

任务在没有被配备任务控制块或被剥夺了任务控制块的时的状态。

就绪状态:

为任务配备了控制块且在任务就绪表中进行了就绪登记

运行状态:

经调度器获得了cpu的使用权

等待状态:

正在运行的任务需要等待一段时间或需要等待一个事件发生时,该任务会把cpu的使用权交给其他任务而进入等待状态。

中断服务状态:

一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序。

6.uC/OS主要有哪几类任务同步方法,请每类至少举出一个系统函数名。

答:

信号量:

OS_EVENT*OSSemCreate(INT16Ucnt);OS_EVENT_TYPE_SEM创建一个类型的事件块;OSSemDel()删除一个信号量。

互斥性信号量:

OS_EVENT*OSMutexCreate(INT8Uprio,INT8U*err);OSMutexDel()。

消息邮箱:

OSMboxCreate创建邮箱;OSMboxPend请求邮箱;OSMboxDel删除邮箱

综合题:

1、编译题:

(1)用信号量使Mytest、yourtest轮流实现Fun()

(2)第五章消息队列先进先出、后进后出、函数名、参数、堆栈的创建以及初始化

(3)两个任务分别发送,第三个任务才能运行(6-1)

(4)例6-3P192

例6-1

#include"includes.h"

#defineTASK_STK_SIZE512//任务堆栈长度

OS_STKStartTaskStk[TASK_STK_SIZE];//定义任务堆栈区

OS_STKMyTaskStk[TASK_STK_SIZE];

OS_STKYouTaskStk[TASK_STK_SIZE];

OS_STKHerTaskStk[TASK_STK_SIZE];

INT16Skey;//用于退出uCOS_II的键

char*s1="MyTaskisrunning";

char*s2="YouTaskisrunning";

char*s3="HerTaskisrunning";

INT8Uerr;

INT8Ux=0,y=0;//字符显示位置

OS_FLAG_GRP*WFlag;/*事件标志组指针*/

voidStartTask(void*data);

voidMyTask(void*data);

voidYouTask(void*data);

voidHerTask(void*data);

voidQuitkey(void);

/************************主函数*********************************************/

voidmain(void)

{

OSInit();//初始化uCOS_II

PC_DOSSaveReturn();//保存Dos环境

PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断

WFlag=OSFlagCreate(0,&err);/*创建事件标志组*/

if(err==OS_NO_ERR)/*检测是否创建成功*/

PC_DispStr(0,23,"Noerror",DISP_BGND_BLACK+DISP_FGND_WHITE);

OSTaskCreate(StartTask,0,&StartTaskStk[TASK_STK_SIZE-1],5);

OSStart();

}

//*****************************StartTask********************************************

voidStartTask(void*pdata)

{

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0x08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

//OSStatInit();

 

OSTaskCreate(MyTask,0,&MyTaskStk[TASK_STK_SIZE-1],6);

OSTaskCreate(YouTask,0,&YouTaskStk[TASK_STK_SIZE-1],7);

OSTaskCreate(HerTask,0,&HerTaskStk[TASK_STK_SIZE-1],8);

OSTaskSuspend(OS_PRIO_SELF);

}

//*****************************MyTask********************************************

voidMyTask(void*pdata)

{

pdata=pdata;

for(;;)

{

OSFlagPend(WFlag,(OS_FLAGS)3,OS_FLAG_WAIT_SET_ALL,0,&err);

PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);

Quitkey();

OSTimeDlyHMSM(0,0,2,0);

}

}

//*****************************YouTask********************************************

voidYouTask(void*pdata)

{

pdata=pdata;

for(;;)

{

PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_WHITE);

OSTimeDlyHMSM(0,0,8,0);

OSFlagPost(WFlag,(OS_FLAGS)2,OS_FLAG_SET,&err);

Quitkey();

OSTimeDlyHMSM(0,0,2,0);

}

}

//*****************************HerTask********************************************

voidHerTask(void*pdata)

{

pdata=pdata;

for(;;)

{

PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_WHITE);

OSFlagPost(WFlag,(OS_FLAGS)1,OS_FLAG_SET,&err);

Quitkey();

OSTimeDlyHMSM(0,0,1,0);

}

}

//*****************************Quitkey()********************************************

voidQuitkey(void)

{

if(PC_GetKey(&key)==TRUE)

{

if(key==0x1B)

{PC_DOSReturn();}

}

}

例6-3

#include"includes.h"

#defineTASK_STK_SIZE512//任务堆栈长度

OS_STKStartTaskStk[TASK_STK_SIZE];//定义任务堆栈区

OS_STKMyTaskStk[TASK_STK_SIZE];……1

OS_STKYouTaskStk[TASK_STK_SIZE];

OS_STKHerTaskStk[TASK_STK_SIZE];

INT16Skey;//用于退出uCOS_II的键

char*s1="MyTaskisrunning";

char*s2="YouTaskisrunning";

char*s3="HerTaskisrunning";

INT8Uerr;

INT8Ux=0,y=0;//字符显示位置

OS_FLAG_GRP*WFlag;……2

OS_FLAGSFlags;

voidStartTask(void*data);

voidMyTask(void*data);

voidYouTask(void*data);

voidHerTask(void*data);

voidQuitkey(void);

voidDispCtrl(void);

/************************主函数*********************************************/

voidmain(void)

{

OSInit();//初始化uCOS_II

PC_DOSSaveReturn();//保存Dos环境

PC_VectSet(uCOS,OSCt

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

当前位置:首页 > 总结汇报 > 学习总结

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

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