嵌入式程序设计复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统程序设计练习题;
6.任务级的调度是由函数OSSched()完成的,而【中断级】的调度是由函数OSIntExt() 完成。对于
7.任务切换其实很简单,由如下2步完成:
8.任务的5种状态。
度法,各个任务彼此合作共享一个CPU。
的控制权。
11.使用可剥夺型内核时,应用程序不应直接使用不可重入型函数。调用不可重入型函数时,要满足互斥
(可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。)
13.可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函
量予以【保护】。
14.每个任务都有其优先级。任务越重要,赋予的优先级应【越高】。
数据结构的初始化。
被μC/OS-Ⅱ调用。
22.μC/OS-II中的信号量由两部分组成:一个是信号量的【计数值】,它是一个16位的无符号整数(0 到
25.在使用OSTaskCreate创建任务时,若需要TaskData作伪参数传递给任务Task,并从任务Task中获得传入的字符参数值,请在下面【】填上合适的代码。
char TaskData=?A?;
void Task (void *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);
}
}
26. 在μC/OS-II在任务Task1中使用邮箱函数OSMboxPost()发送字符;而在Task2中接收OSMboxPost ()字符, 请在下面【】填上合适的代码。
void Task1 (void *data)
{
char txmsg;
INT8U err;
…
txmsg = 'A';
for (;;) {
OSMboxPend(AckMbox, 0, &err);
txmsg++;
if (txmsg == 'Z') {
txmsg = 'A';
}
}
}
void Task5 (void *data)
{
char *rxmsg;
INT8U err;
data = data;
for (;;) {
PC_DispChar(70, 18, *rxmsg, DISP_FGND_YELLOW +DISP_BGND_BLUE);
OSMboxPost(AckMbox, (void *)1);
}
}
27. 在Task1中使用消息队列OSQPend()函数接收消息“Hello World!”,而在Task2中使用消息队列OSQPost ()函数发送消息“Hello World!”, 请在下面【】填上合适的代码.
void Task1 (void *pdata)
{
char *msg;
INT8U err;
pdata = pdata;
for (;;) {
PC_DispStr(70, 13, msg, DISP_FGND_YELLOW +DISP_BGND_BLUE);
OSTimeDlyHMSM(0, 0, 0, 100);
}
}
void Task2 (void *pdata)
{
char msg[20];
pdata = pdata;
strcpy(&msg[0], " Hello World!");
for (;;) {
OSTimeDlyHMSM(0, 0, 0, 500);
}
}
28 μC/OS-II操作系统使用OSSchedLock()函数和OSSchedUnlock()函数进行锁定(不允许任务级调度)和
29.代码的临界段
代码的临界段也称为临界区,指处理时不可分割的代码。
30.资源
任何为任务所占用的实体都可称为资源。资源可以是输入输出设备;资源也可以是一个变量,一个结构或一个数组等。
31.共享资源
可以被一个以上任务使用的资源叫做共享资源。
32.任务
一个任务,也称作一个线程,是一个简单的程序,该程序可以认为CPU完全只属该程序自己。典型地、每个任务都是一个无限的循环。
33.任务切换
指Context Switch,其含义是CPU寄存器内容切换。当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态(Context),即CPU寄存器中的全部内容。
34.内核
多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。
35.调度(Scheduler)
内核的主要职责之一,就是要决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。36.可剥夺型内核
最高优先级的任务一旦就绪,总能得到CPU的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。
37. 任务基本信息内涵
(1) CPU中的PC寄存器:任务(程序)当前执行的位置;
(2) CPU中的通用寄存器:任务当前执行代码所涉及的临时数据;
(3) CPU中的状态寄存器:存储当前CPU的状态。
38. 任务切换
任务切换是指从一个任务直接切换到另一个任务,引起该次切换是由于某一个非中断引起的事件或主动放弃或调用节拍函数时,使一个更高优先级的任务处于就绪状态,暂停正在运行着的任务,转而切换去执行更高优先级任务;也可由中断后,中断退出时进行任务调度,重新去执行更高优先级任务。
39. 举例说明μCOS-II可移植型数据类型的定义方式
答:因为不同的微处理器有不同的字长,μC/OS-II的移植文件包括很多类型定义以确保可移植性。μCOS-II 不使用C语言中的short,int,long等数据类型的定义,因为它们与处理器类型有关,隐含着不可移植性。μC/OS-II代之以移植性强的整数数据类型,这样,既直观又可移植(该数据类型不依赖于编译),举例如下: