计算机类专业技术中级资格嵌入式系统设计师应用技术
2008年下半年嵌入式系统设计师下午试卷(B)
5 题含答案应用技术
1案例分析题1 / 5
试题一(共20分)
下面是关于某测试设备的叙述,仔细阅读并分析,回答问题1至问题4,将答案填入答题纸的对应栏内。
【说明】
某测试设备是一个嵌入式系统,是为了测试一个专用设备而研制的,如图1-1所示。测试设备用于测试被测设备的各项软、硬件功能,包括2路RS232串口、2路模拟量、电源以及专用设备的其它内部部件。在被测专用设备内部有专门的自检测程序,来测试内部各部件。测试设备的串口与被测设备相连接,加电后,通过按测试设备的周边键与被测设备握手同步,再向被测设备发送检测消息,被测设备测试自己的某项功能后,通过串口将测试结果发回给测试设备,显示在测试设备的LCD屏上。
测试设备的硬件由处理器模块、IO模块和电源模块组成,处理器模块上有CPU、存储器、2路串口、键盘控制器;IO模块上有D/A、A/D转换器,用作为模拟量输入和采集电源的电压值,以测试被测设备的模拟量和电源;电源模块提供测试设备的电源;测试设备模块间采用ISA总线。
测试设备的2路串口与被测设备相连,同时测试设备的D/A、A/D转换控制器的输入线路与被测设备的模拟量和电源线相连,可直接测试被测设备的2路RS232串口、2路模拟量、电源。
测试设备的软件由底层驱动(串口驱动、D/A、A/D驱动和自定义键盘驱动)、嵌入式操作系统和测试软件组成。
图1-1 某测试设备结构示意图
【问题1】(4分)
设存储器容量为4兆字,字长32位,模块数为4,分别用顺序方式和交叉方式进行组织,存储周期为200ns,数据线宽度32位,总线传送周期为50ns,请计算顺序存储器和交叉存储器的平均存取时间(单位:ns)和带宽(单位:位/秒)。
【问题2】(6分)
测试设备的软件工作过程为:测试设备和被测设备同时加电,测试设备的操作系统启动后自动执行测试程序。测试程序首先采集被测设备的电源是否正常,并在屏幕显示测试信息。如果被测设备正常,则向被测设备发送握手消息,与被测设备同步;如果同步不上,则报“不能与设备同步”,测试结束。接下来,测试程序接收周边键命令,按要求测试。如果测试2路模拟量,则由测试设备通过D/A转换,向被测设备发送模拟信号,被测设备得到模拟信号,判断正确性后,通过串口将结果返回给测试设备。另外,被测设备还有4个功能项是通过串口发送测试命令给被测设备的,由被测设备内的自测试程序测试后,将结果再通过串口传回给测试设备。
请完成图1-2所示的流程图,按编号将正确答案填写在答题纸的对应栏中。
图1-2 测试设备的测试软件流程图
【问题3】(6分)
请把下面列出的6个空位的答案填入答题纸上相应的位置。
1.ISA总线为 (1) 位总线;
2.由模拟信号到数字信号的转换过程称为 (2) ;
3.将数字信号变成模拟信号的过程称为 (3) ;
4.D/A转换器的主要性能指标有 (4) 、 (5) 、 (6) 。(回答其中的三个主要性能指标即可)
【问题4】(4分)
在本测试设备的异步串行传输中,数据格式为:数据位8位、奇校验位1位、停止位1位。当波特率为9600b/s时,每秒钟传送的有效数据是多少字节?为保证数据收发正确,试分析发送方和接收方时钟允许的误差范围,并以百分比形式给出最大误差。
查看答案
2主观题2 / 5
试题二(共15分)
阅读以下关于输入输出接口设计的说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
图2-1为采用查询方式工作的输入接口,地址译码器中A15~A1直接接或门输入。
图2-1 输入接口的电路原理图
【问题1】(5分)
输入设备在向接口传送 8位数据的同时,还传送负脉冲STB,该信号的作用是什么?
【问题2】(3分)
D触发器的作用是什么?
【问题3】(7分)
用查询方式将输入设备的一个数据读入CPU的BL中,程序段如下所示,请完成该段8086汇编程序,将(1)~(5)的内容填入答题纸上相应的位置。
START: MOV DX, (1)
NEXT1: IN AL,DX
NEXT2: AND AL, (2)
JZ (3)
MOV DX, (4)
IN AL,DX
NEXT3: MOV (5) ,AL
RET
查看答案
3主观题3 / 5
试题三(共15分)
阅读以下有关软件工程开发的叙述,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
V模型是在快速应用开发模型基础上演变而来的,由于将开发过程构造成一个V字型而得名,V模型强调软件开发的协作和速度,将软件实现和验证有机结合起来,在保证较高的软件质量情况下缩短开发周期,图3-1为V模型的完整诠释。
图3-1 V模型示意图
【问题1】(4分)
图3-1所示的V模型中,与开发阶段中概要设计对应测试阶段称为 (1) 。在系统或配置项测试阶段处应采用(2)方法。请将(1)和(2)处的内容填入答题纸上相应位置。
【问题2】(4分)
请完成下面叙述,在(3)、(4)处填入恰当的内容,将解答填写在答题纸的对应栏中。
从图3-1中水平对应关系看,左边是软件设计过程,右边是软件测试过程。在软件设计过程中,SQA应按(3)进行检查活动。在软件测试过程中,系统测试是基于(4)的测试。
【问题3】(7分)
完成下面对V模型优点的论述,将答案填写在答题纸的对应栏中。
1. 客户需求分析对应验收测试。在进行需求分析、功能设计的同时,测试人员就可以阅读、审查分析结果,从而 (5) 。
2. 系统设计人员做系统设计时,测试人员可了解实现的过程,可 (6) 。
3. 设计人员做详细设计时,测试人员可参与设计,对设计 (7) ,同时 (8) ,并基于用例开发测试脚本。
4. 编码的同时进行单元测试,可尽快找出程序中的缺陷,提高 (9) 。
5. 避免了瀑布模型所带来的误区,即软件测试是在 (10) 之后进行。
查看答案
4材料分析题4 / 5
试题四(共10分)
阅读以下有关80X86汇编语言的叙述,回答问题1和问题2,将解答填入答题纸的对应栏内。
【说明】
本题由两部分组成,第一部分为计算AX寄存器的值,第二部分为判错题。
【问题1】(5分)
已知DS=2000H,BX=0100H,SI=0002H,存储单元[20100H]到[20103H]依次存放12H、34H、56H、78H,[21200H]到[21203H]依次存放 2AH、4CH、B7H、65H,说明下列每一条指令执行后AX寄存器的内容。
(1) MOV AX,[1200H]
(2) MOV AX,[BX]
(3) MOV AX,[BX+1100H]
(4) MOV AX,[BX+SI]
(5) MOV AX,[BX][SI+1100H]
【问题2】(5分)
下列MOV指令都是错误的,请指出错误原因。
(1) MOV ES,1234H
(2) MOV AL,300
(3) MOV [SP],AX
(4) MOV AX,BX+DI
(5) MOV 20H,AH
查看答案
5主观题5 / 5
试题五(共15分)
阅读以下说明和C语言代码,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
在嵌入式操作系统设备管理的实现上,常使用到C语言的函数指针变量,由统一的管理函数调用不同的设备驱动程序。下面的一段 C 语言代码是驱动管理程序manage_device调用4个不同设备驱动程序,但没有用到函数指针变量。
【C语言代码】
/* 变量与类型说明*/
#include "stdio.h"
#include "stdlib.h"
extern int sys_status;
extern int Dev_drv1(int arg1, int arg2);
extern int Dev_drv2(int arg1, int arg2);
extern int Dev_drv3(int arg1, int arg2);
extern int Dev_drv4(int arg1, int arg2);
#define NOERROR 0
type struct {
int _fd;
} TYP_DEV_TAB;
TYP_DEV_TAB dev_tab[50]= {101,99, 80, 120,};
/* 程序代码 */
void manage_device(int devid, int arg1, int arg2)
{ int place ;
int ret;
for(place=0 ; place<50 ; place++)
if dev_tab [place]._fd == devid) break;
if(place>=50)
printf(" NO DEVICE fd = %d\n ",devid);
switch(dev_tab [place]._fd) {
case 80:
ret = Dev_drv3(int arg1,int arg2);
break;
case 99:
ret = Dev_drv2(int arg1,int arg2);
break;
case 101:
ret = Dev_drv1(int arg1,int arg2);
break;
case 120:
ret = Dev_drv4(int arg1,int arg2 );
break;
}
if(ret!=NOERROR)
printf(" DEVICE %d error!\n ", devid);
}
int Dev_drv1(int arg1,int arg2 )
{
/* 局部变量声明,略 */
/* 驱动程序代码,略*/
}
int Dev_drv2(int arg1,int arg2 )
{
/* 局部变量声明,略 */
/* 驱动程序代码,略*/
}
int Dev_drv3(int arg1,int arg2)
{
/* 局部变量声明,略 */
/* 驱动程序代码,略*/
}
int Dev_drv4(int arg1,int arg2)
{
/* 局部变量声明,略 */
/* 驱动程序代码,略*/
}
【问题1】(8分)
请用C语言的函数指针变量,对manage_device函数进行改造,完成下面C语言代码中的(1)、(2)、(3)和(4)处的变量说明或语句,将解答填入答题纸的对应栏内。
【C语言代码】
/* 变量与类型说明*/
#include "stdio.h"
#include "stdlib.h"
extern int sys_status;
extern int Dev_drv1(int arg1, int arg2);
extern int Dev_drv2(int arg1, int arg2);
extern int Dev_drv3(int arg1, int arg2);
extern int Dev_drv4(int arg1, int arg2);
#define NOERROR 0
typedef struct {
int _fd;
(1)函数指针变量说明;/* 变量名用process */
} TYP_DEV_TAB;
TYP_DEV_TAB dev_tab[50]= {{101, Dev_drv1},{99, Dev_drv2},
{80, Dev_drv3},{120, Dev_drv4},};
/* 程序 */
void manage_device(int devid, int arg1, int arg2)
{ int place ;
int ret;
(2)函数指针变量说明;/*局部变量,变量名用ProcAction */
for(place=0 ; place<50 ; place++) {
if(dev_tab [place]._fd == devid) {
(3)语句1;/* 变量名用ProcAction,得到具体函数的入口地址 */
break;
}
}
if(place>=50)
printf("NO DEVICE fd = %d\n",devid);
(4)语句2;
if(ret!=NOERROR)
printf("DEVICE %d error!", devid);
}
【问题2】(3分)
在C语言程序中,常在某些变量的说明前加extern,如本题在变量说明中的第一条加extern int sys_status;请说明加extern与不加extern的区别,在进行编译时会有什么样的不同处理?
【问题3】(2分)
函数的参数存放在什么地址空间中?说明其作用范围。将答案填入答题纸的对应栏内。
【问题4】(2分)
在设备驱动程序(函数)Dev_drv1中,对指针ptr的说明如下:
【C语言代码】
int Dev_drv1(int arg1,int arg2 )
{
struct node {
int ID;
char name [20];
int range;
} ;
struct node *ptr;
/* 其它局部变量声明,略 */
ptr = (struct node *)malloc(sizeof(struct node)*100);
/* 其它程序代码,略*/
}
设int 为32位整数,char占8位。当对指针ptr赋完值后的值为0x3751C0,若再执行一条“ptr++;”语句,此时ptr的值为多少?(用十六进制表示)。
查看答案