1、嵌入式系统设计师-64 及答案解析(总分:36.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读以下关于某嵌入式处理器和 8255 的叙述。 说明 图 1 为使用某嵌入式处理器和 8255 对打印机进行控制的电路图,其中 8255 的中断请求 PC3 接到处理器的中断请求输入端 上,打印机的数据口接在 8255 的 PAOPA7 上,打印机的输出电平 接在8255 的 PC6 上。 为了使用嵌入式处理器对打印机进行控制,在程序设计时,需要将 8255 的 PA 口设置为工作方式 1:PB 口设置在工作方式 0,配置为输入;PC 口的 PCO、PC1、PC2、PC3 和
2、 PC4 定义为输出。 为了在打印机输出为低电平时通过 8255 的 PC3 产生有效的中断请求信号 INTRA,必须使得 A 口的中断请求使能 INTE-1,实际上就是通过 C 口的按位复位操作将 PC6 置 1,整个程序分为四部分:依次是 8255 的初始化,嵌入式处理器的中断初始化,嵌入式处理器的主程序和打印字符的中断处理程序。其中 8255 的端口配置功能如表 1 所示。嵌入式处理器的中断使能控制字含义如表 2 所示,该处理器的典型汇编指令如表 3 所示。 (分数:15.00)(1).根据图 1 所示,通过嵌入式处理器访问 8255 的 PA 口、PB 口和 PC 口对应的地址分别是什
3、么?(请用十六进制描述) 对应的地址: PA 口:_ PB 口:_ PC 口:_(分数:5.00)_(2).在嵌入式处理器的汇编语言中,最简单的指令寻址方式为立即寻址和直接寻址,请回答下面两个汇编语言语句所描述的含义,将答案填写在答题纸的对应栏中。 MOV A, #3AH:_ MOV R4, 3AH:_(分数:5.00)_(3).以下汇编程序用于打印机输出控制,请将下面汇编程序的空白处补充完整,并将解答填入对应栏中。 8255 的 A 口工作在方式 1 输出,初始化程序: INTI55:MOV DPTR, #8003H MOV A, 10100 010B MOVX DPTR,A ;配置 A 口
4、在工作方式 1、B 口在工作方式 0 MOV A, 00001101B MOVX DPTR,A ;将 PC6 口置位 嵌入式处理器的中断初始化程序: INT031: MOV IE,_:开总中断及所有五个中断源用十六进制表示 ANL TCON,#OFEH;规定 INTO 下降沿低电平产生中断请求 嵌入式处理器主程序: (打印存储单元 20H 开始向后的内容,中断处理程序中每次从 20H 中取到需要打印的存储单元地址,直到遇到存储单元里面内容不是 OAH 为止) ORG 0100H MOV RO,#20H ;取打印缓冲区地址 MOV DPTR, #8000H MOV A,_ ;取打印字符 INC
5、RO MOV 20H, RO MOVX DPTR,A ;输出打印 当字符打印结束会产生一次中断,中断服务程序如下: ORG 1300H PRINTER:PUSH PSW :压栈操作 PUSH Acc PUSH RO PUSH DPH PUSH DPL MOV RO,_ ;用十六进制表示 MOV DPTR, #8000H MOVX A,RO ;取打印字符 MOVX DPTR,A ;输出打印 INC RO MOV 20H,RO ;将需要取打印内容的地址放置到 20H 单元 CJNE A,#OAH, NEXT ANL IE,_ ;关 INTO 中断,用十六进制表示 NEXT:POP DPL POP
6、DPH POP _ POP Acc POP PSW RETI(分数:5.00)_二、试题二(总题数:1,分数:21.00)阅读以下关于 C 语言及 C 代码的叙述。 说明 在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下三部分程序,其中: C 代码 1 是李工为了在嵌入式平台上开发一段可变参数函数,在 X86 平台上实现的一个参数个数可变函数实例。 C 代码 2 是王工在编写软件时,自己编写的内存拷贝函数。 C 代码 3 是赵工编写的一段数据处理的程序,其中 fun0 的含义为从已创建的一个单向链表中查找倒数第 index 个结点。他的设计思路为:首先创建两个指针 ptr1,ptr2
7、,并且都指向链表头,然后 ptr1 向前走 index 步,这样 ptr1 和 ptr2 之间就间隔 index 个结点,然后 ptr1 和 ptr2 同时向前步进,当 ptr1 到达最后一个结点时,ptr2 就是倒数第 index 个结点了。ReverseList()为赵工编写的对已有单向链表进行逆序重排的函数。 C 代码 1 long sum (int i,) int*p,j; long s=0; p= for(j=0;ji;j+) s+=pj; return s; long Sum=sum(3,1,2,3); C 代码 2 static int pent; void*MyMemcpy(v
8、oid*dest, const void*src, int n) char*pDest=(char*)dest; char*pSrc=(char*)src; for(int i=0; in; i+) *(pDest +i)=*(pSrc+i); return dest; C 代码 3 node *fun(node*head, int index) node *ptr1,*ptr2; int i=0: ptr1=head; ptr2=head; if( head=NULL | head-next=NULL ) return ptr1; while (iindex) _; if (ptrl=NUL
9、L) return head; i+; while (ptr1-next !=NULL) ptr1=ptr1-next; _; return_; node* ReverseList (node *head) node *temp1=NULL; node *temp2=NULL; node *temp3=NULL; if (head-next=NULL) | (head=NULL) return head; temp1=head; temp3=temp1-next; temp1-next=NULL; while (temp3-next !=NULL) temp2=temp3; temp3=tem
10、p3-next; _; temp1=temp2; temp3-next=temp1; return_; (分数:21.00)(1).执行 C 代码 1 后,Sum 的值应为多少?请用十进制表示。(分数:7.00)_(2).请问 C 代码 2 中 static 的作用是什么?const 的作用是什么?王工自己编写的内存拷贝函数安全吗?如存在缺陷,请指出缺陷在哪里。(分数:7.00)_(3).仔细阅读并分析 C 代码 3,填补其中的空白处。(分数:7.00)_嵌入式系统设计师-64 答案解析(总分:36.00,做题时间:90 分钟)一、试题一(总题数:1,分数:15.00)阅读以下关于某嵌入式处理
11、器和 8255 的叙述。 说明 图 1 为使用某嵌入式处理器和 8255 对打印机进行控制的电路图,其中 8255 的中断请求 PC3 接到处理器的中断请求输入端 上,打印机的数据口接在 8255 的 PAOPA7 上,打印机的输出电平 接在8255 的 PC6 上。 为了使用嵌入式处理器对打印机进行控制,在程序设计时,需要将 8255 的 PA 口设置为工作方式 1:PB 口设置在工作方式 0,配置为输入;PC 口的 PCO、PC1、PC2、PC3 和 PC4 定义为输出。 为了在打印机输出为低电平时通过 8255 的 PC3 产生有效的中断请求信号 INTRA,必须使得 A 口的中断请求使
12、能 INTE-1,实际上就是通过 C 口的按位复位操作将 PC6 置 1,整个程序分为四部分:依次是 8255 的初始化,嵌入式处理器的中断初始化,嵌入式处理器的主程序和打印字符的中断处理程序。其中 8255 的端口配置功能如表 1 所示。嵌入式处理器的中断使能控制字含义如表 2 所示,该处理器的典型汇编指令如表 3 所示。 (分数:15.00)(1).根据图 1 所示,通过嵌入式处理器访问 8255 的 PA 口、PB 口和 PC 口对应的地址分别是什么?(请用十六进制描述) 对应的地址: PA 口:_ PB 口:_ PC 口:_(分数:5.00)_正确答案:()解析:8000H 8001H
13、 8002H 解析 本题考查嵌入式处理器硬件及汇编语言相关知识。 从题中给出的电路图中可以看出,8255 控制芯片的 CS 信号的有效电平为低电平。其对应的 CS 由嵌入式处理器地址线中的 A15A2 通过“或门”进行控制,从这里可以看出,要使得 8255 的片选信号 CS 有效,必须使得 A15 为 1,A14A2 都为 0。 由题中表 1 提供的端口访问控制表及电路图可知,如果要访问 8255 的 PA 口,必须使得 A1、AO 都为0,PB 口访问时 Al 为 0、A0 为 1,PC 口访问时 A1 为 1,A0 为 0。 因此,结合 8255 的片选信号 CS 控制,以及 A1、A0
14、对于端口访问的控制,即可得到使用嵌入式处理器进行 8255 的 PA、PB、PC 口访问时的地址。(2).在嵌入式处理器的汇编语言中,最简单的指令寻址方式为立即寻址和直接寻址,请回答下面两个汇编语言语句所描述的含义,将答案填写在答题纸的对应栏中。 MOV A, #3AH:_ MOV R4, 3AH:_(分数:5.00)_正确答案:()解析:将 3AH 立即数传送到 A 中 将 3AH 存储单元的内容传送到 R4 中解析 立即数的传送指令和直接寻址指令是两种最基本的汇编指令。其中立即数的表示是在进制数前加#号。(3).以下汇编程序用于打印机输出控制,请将下面汇编程序的空白处补充完整,并将解答填入
15、对应栏中。 8255 的 A 口工作在方式 1 输出,初始化程序: INTI55:MOV DPTR, #8003H MOV A, 10100 010B MOVX DPTR,A ;配置 A 口在工作方式 1、B 口在工作方式 0 MOV A, 00001101B MOVX DPTR,A ;将 PC6 口置位 嵌入式处理器的中断初始化程序: INT031: MOV IE,_:开总中断及所有五个中断源用十六进制表示 ANL TCON,#OFEH;规定 INTO 下降沿低电平产生中断请求 嵌入式处理器主程序: (打印存储单元 20H 开始向后的内容,中断处理程序中每次从 20H 中取到需要打印的存储单
16、元地址,直到遇到存储单元里面内容不是 OAH 为止) ORG 0100H MOV RO,#20H ;取打印缓冲区地址 MOV DPTR, #8000H MOV A,_ ;取打印字符 INC RO MOV 20H, RO MOVX DPTR,A ;输出打印 当字符打印结束会产生一次中断,中断服务程序如下: ORG 1300H PRINTER:PUSH PSW :压栈操作 PUSH Acc PUSH RO PUSH DPH PUSH DPL MOV RO,_ ;用十六进制表示 MOV DPTR, #8000H MOVX A,RO ;取打印字符 MOVX DPTR,A ;输出打印 INC RO MO
17、V 20H,RO ;将需要取打印内容的地址放置到 20H 单元 CJNE A,#OAH, NEXT ANL IE,_ ;关 INTO 中断,用十六进制表示 NEXT:POP DPL POP DPH POP _ POP Acc POP PSW RETI(分数:5.00)_正确答案:()解析:#09FH RO 20H #09EH RO 解析 由表 2 知道,对于中断使能控制的访问也就是设置该寄存器的对应位为 1 或者 0,为 1 表示开启对应的中断控制,为 0 表示关闭对应的中断控制,按照对应的各个位来进行立即数配置即可进行各个中断的控制。 程序中的第 2 空处是表示使用寄存器寻址方式获取数据。第
18、 3 空处于中断程序的服务程序中,需要重复从20H 中获取待打印的内容,使用直接寻址方式。第 4 空是指使用“与指令”关闭对应的中断位。第 5 空处为与入栈相对应的出栈操作。二、试题二(总题数:1,分数:21.00)阅读以下关于 C 语言及 C 代码的叙述。 说明 在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下三部分程序,其中: C 代码 1 是李工为了在嵌入式平台上开发一段可变参数函数,在 X86 平台上实现的一个参数个数可变函数实例。 C 代码 2 是王工在编写软件时,自己编写的内存拷贝函数。 C 代码 3 是赵工编写的一段数据处理的程序,其中 fun0 的含义为从已创建的一个
19、单向链表中查找倒数第 index 个结点。他的设计思路为:首先创建两个指针 ptr1,ptr2,并且都指向链表头,然后 ptr1 向前走 index 步,这样 ptr1 和 ptr2 之间就间隔 index 个结点,然后 ptr1 和 ptr2 同时向前步进,当 ptr1 到达最后一个结点时,ptr2 就是倒数第 index 个结点了。ReverseList()为赵工编写的对已有单向链表进行逆序重排的函数。 C 代码 1 long sum (int i,) int*p,j; long s=0; p= for(j=0;ji;j+) s+=pj; return s; long Sum=sum(3,
20、1,2,3); C 代码 2 static int pent; void*MyMemcpy(void*dest, const void*src, int n) char*pDest=(char*)dest; char*pSrc=(char*)src; for(int i=0; in; i+) *(pDest +i)=*(pSrc+i); return dest; C 代码 3 node *fun(node*head, int index) node *ptr1,*ptr2; int i=0: ptr1=head; ptr2=head; if( head=NULL | head-next=NUL
21、L ) return ptr1; while (iindex) _; if (ptrl=NULL) return head; i+; while (ptr1-next !=NULL) ptr1=ptr1-next; _; return_; node* ReverseList (node *head) node *temp1=NULL; node *temp2=NULL; node *temp3=NULL; if (head-next=NULL) | (head=NULL) return head; temp1=head; temp3=temp1-next; temp1-next=NULL; w
22、hile (temp3-next !=NULL) temp2=temp3; temp3=temp3-next; _; temp1=temp2; temp3-next=temp1; return_; (分数:21.00)(1).执行 C 代码 1 后,Sum 的值应为多少?请用十进制表示。(分数:7.00)_正确答案:()解析:Sum=6 解析 本题考查嵌入式 C 语言编程基础知识。 可变参数函数的应用在嵌入式 C 程序设计中应用非常广泛。在 X86 平台下,参数在堆栈中的存放是按照由底向上进行存储的。因此,在该程序中,sum 函数的第一个参数表示的是在该参数后面还包含有几个参数。在程序体中,使
23、用第一个参数进行参数访问控制,参数的获取方式按照数组方法进行获取。因此,C 代码1 执行后,Sum 的值为 6。(2).请问 C 代码 2 中 static 的作用是什么?const 的作用是什么?王工自己编写的内存拷贝函数安全吗?如存在缺陷,请指出缺陷在哪里。(分数:7.00)_正确答案:()解析:1) static 的作用:是将变量修饰成静态变量,静态变量的存储地址在整个程序的运行执行期间均保留,不会被别的变量占据。 2) const 的作用:是用于冻结一个变量,使其值在程序中不能被进一步改变。 3)不安全,有缺陷。 4)应对形参的有效性进行检查,应判形参 dest、src 指针是否为空,
24、形参 n 是否大于 0,还应保证 dest所指向的内存空间不越界。 解析 在程序设计中,static 变量和 const 变量的应用非常广泛。static变量表示将变量修饰为静态变量,其含义是指其对应的存储空间在整个程序的运行过程中都保持不变,不会像堆栈那样被重复使用。static 即可以用来修饰局部变量,也可以修饰全局变量。 一旦变量定义为是 const,则其对应的值不能再被修改。在程序运行中,此变量的值就一直维持在其初始化时候的值。 王工编写的这段程序不安全,存在严重的安全漏洞,具体的缺陷包括: (1)对于指针参数的有效性没有进行任何判断,如果指针为 NULL,这样访问存在严重的安全问题。
25、 (2)参数 n 的有效性也没有进行判断,如果参数 n 对应的空间超过 src 所包含的空间,则函数得到的结果和期待的结果会有所偏差。同样,如果 n 对应的空间超过 dest 所包含的地址空间,则会造成程序的混乱,会将内存冲掉,可能导致灾难性后果。(3).仔细阅读并分析 C 代码 3,填补其中的空白处。(分数:7.00)_正确答案:()解析:ptr1=ptr1-next ptr2=ptr2-next ptr2 temp2-next=temp1 temp3 解析 在单向链表中,对某元素的后继元素的访问只能通过结点中的 next 指针项来获取。按照题目要求,首先创建两个指针 ptr1,ptr2,并且都指向链表头,然后 ptr1 向前走 index 步,这样 ptr1 和ptr2 之间就间隔 index 个结点,然后 ptr1 和 ptr2 同时向前步进,当 ptr1 到达最后一个结点时,ptr2 就是倒数第 index 个结点了。因此,对于第 index 个结点的查找,只需要移动 ptr1 和 ptr2,最后 ptr2 返回的为倒数第 index 个结点。 在逆序排列中,将 temp3 移动到链表尾部,使用 temp2 作为临时变量进行链表翻转。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1