一 判断题
1. 在ARM处理器中,快速中断(FIQ)的优先级高于外部中断(IRQ)。 (√)
2. ROM能够永久或半永久地保存数据,ROM内的数据永远不会丢失。 (×)
3. VHDL的基本单元描述不包括库。 (×)
4. 嵌入式ARM架构的嵌入式处理器同时支持大端、小端(Big/Little-Endian)数据类型。(×)
5. ARM9TDMI中的T代表增强型乘法器。(×)
6. ARM-CPU由多家不同制造商生产,芯片外部提供的总线是不一致的。(√)
7. Linux 内核稳定、功能强大并且可以裁减,因为非常适合嵌入式应用。(√)
8. Linux遵循POSIX标准,意味着绝大多数UNIX应用程序不需要任何改动就可以在Linux系统
上编译且运行。(√)
9. 嵌入式系统由上到下主要分为3个层次:应用软件层,系统软件层,硬件层。(×)
10. 嵌入式系统的软硬件是独立设计的。(×)
11. 嵌入式系统设计需要建立交叉开发环境。(√)
12. 通用系统程序开发不需要建立和使用交叉编译环境。(√)
13. 嵌入式系统可以没有操作系统。(√)
14. JTAG测试允许多个器件通过JTAG接口串联在一起形成一个JTAG链,能实现对各个器件分别测试。(√)
15. ARM属于CISC体系架构。(×)
16. 除了用户模式外,ARM处理器的其它几种工作模式属于特权模式。(√)
17. 在任何模式下,ARM处理器都可以访问全部寄存器。(×)
18. 使用立即寻址时,目标寄存器可以为立即数。(×)
19. BLX指令可以将处理器切换到Thumb状态。(√)
20. 链接寄存器(LR)用于保存子程序的返回地址,它不能用作其他用途。(×)
21. 由于使用寄存器R0-R3来传递参数,所以调用子程序时,参数不能超过4个。(×)
22. 使用汇编编写ARM程序时,可直接为PC寄存器赋值。(√)
23. 状态寄存器的SF标志位是进位标志。 (×)
24. BIOS的唯一作用就是引导操作系统。 (×)
25. 当电脑的USB接口不够使用时,可以使用USB HUB来扩展USB接口。(√)
26. 根据电路是否具有存储功能,将逻辑电路划分为两种类型:组合逻辑电路和时序逻辑电路。(√)
27. 所谓时序逻辑电路,是指电路任一时刻的输出仅与该时刻的输入有关。(×)
28. 触发器按时钟控制方式来分,有电位触发、边沿触发、主从触发等方式。(√)
29. 总线数据通信方式按照传输定时的方法可分为同步式和异步式两类。(√)
30. 高速缓存(cache)相比内存容量更大,速度更快。 (×)
31. RS-232C是一种广泛应用于微机通信中的并行通信协议。(×)
32. 硬件描述语言(HDL)是一种用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式的计算机语言。 (√)
33. 传统的ASIC设计方案是自下而上的(down-up)。(√)
34. 嵌入式系统是用来控制、监视或辅助设备、机器和工程运行的装置。 (√)
35. 冯诺依曼结构与哈佛结构的不同之处在于前者将程序与数据存储在不同的存储空间,或者则相反。(×)
36. 指令集一般由数据传输指令,运算指令,逻辑指令和程序流控制指令组成。 (×)
37. 小端字节顺序存储法是把高字节数据存放到在低地址,低字节的数据存放到高地址处;而大端字节顺序存储法则相反。(×)
38. 嵌入式微处理与微控制器(MCU)相比,具有单片化,体积大大减少,功耗和成本低,可靠性好。(×)
39. DSP处理器由于本身的设计适合执行DSP算法,编译效率高,执行速度高,但是DSP的发展随着嵌入式系统智能化的发展,出现不适合运算量较大的情况。(×)
40. 嵌入式系统比较流行的操作系统有Linux, Windows CE, VxWorks等。 (√)
二 选择题
1.嵌入式处理器指令的执行周期包括(B)
A. 启动、运行、退出
B. 取指令、指令译码、执行指令、存储
C. 启动、运行、挂起、退出
D. 取指令、指令译码、执行指令
2.下列不属于嵌入设计处理器本身带有的基本接口是(C)
A.串口;B.并口;C. PCIE;D.AD/DA;
3. 以下几个步骤是DMA控制过程的主要节点,请选出正确的DMA控制流程(请求信号HRQ)为(A)
(1). CPU让出总线控制权(响应信号HLDA)
(2). DMA控制器向CPU请求总线使用权
(3). DMA控制器控制总线,发总线命令、传送数据
(4). DMA总线控制器归还总线控制权
(5). CPU重新获取总线控制权
A. (2),(1),(3),(4); B. (1),(2),(3),(4);
C. (3),(1),(4),(2); D. (3),(4),(1),(2);
4、一个嵌入式系统可以含有多个总线,以下不属于IO总线的为(C)
A. AGP; B. PCI; C. AHB; D. ISA
5.VHDL是(A)
A. 硬件描述语言 B. 软件描述语言 C. 构件描述语言 D. 软件开发工具
6.将系统启动代码读入内存是(C)的主要职责
A. 内存管理;B. VFS;C. Boot Loader;D. 虚拟内存
7.CAN总线是指(A)
A. 控制器局域网 B. 网络传输协议 C. 数据标准 D. 软硬件接口
8.属于LCD三种显示方式的是(C)
A. 投射型、反射型、透射型
B. 投射型、透反射型、透射型
C. 反射型、透射型、透反射型
D. 投射型、反射型、透反射型
9.操作系统内核是指(D)
A. 操作系统的调度部分 B. 操作系统的驱动 C. 操作系统的存储管理 D. 操作系统的核心部分
10. 下列选项中,不是实时操作系统必须满足的条件是(C)
A. 具有可抢占的内核 B. 中断可嵌套 C. 任务调度的公平性 D. 具有优先级翻转保护
11. BSP作为一种嵌入式软件,他的主要特点是(B)
A. 与硬件无关,与操作系统有关
B. 与硬件和操作系统都相关
C. 与硬件有关,与操作系统无关
D. 与操作系统和硬件都无关
12. JTAG的引脚TCK的主要功能是(A)
A. 测试时钟输入;
B. 测试数据输入,数据通过TDI输入JTAG口;
C. 测试数据输出,数据通过TDO从JTAG口输出;
D. 测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式。
13.下列属于虚拟设备的是(A)
A. 管道 B. 键盘 C.磁盘 D. 网卡
14.下列中断处理过程的步骤,最先执行的是(D)
A. 安装堆栈 B. 调用中断服务 C. 恢复堆栈 D. 保存寄存器
15.嵌入式系统的发展可大概分为四个阶段,其中第三个阶段是(B)
A. 单片机的嵌入式系统,结构和功能单一,用于工业控制领域。
B.实时操作系统的嵌入式系统的嵌入式系统阶段。
C. 简单的嵌入式阶段,有较高的可靠性,低功耗的嵌入式处理器和简单的操作系统。
D. 面向Internet的阶段。
16.下面不是CISC与RISC的架构的差异是(D)
A. 指令数量不同,前者多,或者较少,通常少于100.
B. 前者有些指令执行时间较长,后者则没有。
C. 前者有丰富的寻址模式,而后者有较少的寻址模式。
D. 前者有复杂的编译器设计,可优化编译技术,生成高效的目标代码程序,而后者则是简单的编译器设计,难以优化生成高效的目标代码程序。
17.下面不是嵌入式ARM架构的嵌入式处理器的特点是(C)
A. 具有大量的寄存器,指令执行速度快。
B. 绝大多数操作都在寄存器中进行,通过Load/Store的体系结构在内存和寄存器之间传递数据。
C. 同时支持大端、小端(Big/Little-Endian)数据类型。
D. 寻址方式简单,采用固定长度的指令格式。
18. VxWorks操作系统是WindRiver公司推出的一种32位嵌入式实时操作系统,下面不是它优点的是(A)
A. VxWorks源码开源,用户的开发成本低。
B. 简洁、紧凑、高效的内核。
C.支持多任务,实时性强。
D. 较好的兼容性和对多种硬件环境的支持。
19.下面不是流水线技术的特点是(A)
A. 指令流水将会终止,如果发生不能顺序执行时。
B. 流水线可分成若干相互联系的子过程。
C. 实现子过程的功能所需时间尽可能相等。
D. 形成流水处理需要一定的准备的时间。
20. 以下哪些部件不一定包括在SoC当中(C)
A. 微处理器 B. 模拟IP核 C. 存储器或片外存储控制接口 D. FPGA
21. 以下哪一个不属于IP核的分类(C)
A. 软核 B. 硬核 C. 模拟核 D. 固核
22. 下列哪一个不是布尔代数的操作符(D)
A. OR B. AND C. NOT D. YES
23. 早期的可编程逻辑器件不包括下列哪一种 (D)
A. PROM B. EPROM C. EEPROM D. FPGA
24. 下列哪个是计算机系统中存储速度最慢的存储设备 (D)
A. CPU内部寄存器 B. 高速缓存(Cache) C. 内存 D. 硬盘
25. 下列哪种存储设备在掉电情况下会丢失数据 (A)
A. 内存 B. Flash Memory C. CF卡 D. 硬盘
26.下列那个单位用来表示信息的传输速率 (C)
A. 刷新率 B. 分辨率 C. 比特率 D. 占有率
27. 下列哪一种不是计算机总线 (D)
A. USB B. PCI C. VME D. EDA
28. 下列哪一种不是硬件描述语言 (C)
A. AHDL B. VHDL C. C++ D. Verilog
29. 下列哪个段寄存器指示程序的代码段 (A)
A. CS B. DS C. S D. FS
30. 下列存储设备中,数据最不容易丢失的是( A )
A.EPROM B.DRAM C.内存 D.SDRAM
31.下列哪项不是ARM处理器的特点。(B)
A. 小体积、低功耗
B. 可以使用除加载/存储指令外的多种指令访问存储器
C. 大多数数据操作在寄存器中完成,执行速度快
D. 支持Thumb/ARM双指令集
32. 当加法指令产生进位时,下列哪个条件标志位会发生变化. (A)
A. C B. T C. I D. F
33.下列哪个不属于ARM处理器的寻址方式. (D)
A.立即寻址 B.寄存器寻址 C.寄存器间接寻址 D.链表寻址
34. 下列哪条指令是块操作指令. (C)
A. STMFD B. POP C. LDMIA D. PUSH
35.下列哪条指令把寄存器R1、R2的值相加后存到R0中. (C)
A. AND R0, R1, R2
B. SUB R0, R1, R2
C. ADD R0, R1, R2
D. AND R1, R2, R0
36. R0的中的值为0xFFF3,执行指令AND R0, R0, #3后,R0的值为. (A)
A. 0x0003 B. 0xFFFF C. 0xFFF0 D. 0xFFF3
37. CPSR寄存器中Z条件码为0,当前PC值为0xFF00,则执行BEQ 0xAAA0后,PC值为. (C)
A. 0xAAA0 B. 0xAAA4 C. 0xFF04 D. 0xFF00
38.下列哪条ARM汇编伪指令可用来定义符号. (A)
A. GBLA B. IF C. MAP D. WHILE
39. 阅读下列程序,回答问题:
LDR R0, 0x22
LDR R1, 0x11
SUB R0, R0, R1
CMP R0, R1
执行这段程序后,R0的值为. ( C )
A. 0x22 B. 0x33 C. 0x11 D. 0
40. 执行上述程序后,CPSR的下列哪个标志位将发生变化. ( Z )
A. C B. V C. Z D. 以上都不对
41. 交叉开发环境包括交叉编译环境和( )。
A交叉链接器 B交叉调试器 C交叉编辑器 D交叉生成器
42.( )不是JTAG接口的5条线之一
A. TCK B. TAP C. TDI D. TRST
43.( )不是嵌入式硬件调试中使用的主流工具
A.示波器 B. 逻辑分析仪 C.在线仿真器 D.逻辑仿真器
44. 嵌入式系统调试通常可以分为硬件级调试和( )。
A. 软件级调试 B. 源码级软件调试 C. 在线仿真器调试 D. 片上器调试
45. RS232-C串口通信中,表示逻辑1的电平是( )。
A. 0v B. 3.3v C. +5v~+15v D. -5v~-15v
46. 和PC系统机相比嵌入式系统不具备以下哪个特点.( )
A. 系统内核小 B. 专用性强 C. 可执行多任务 D. 系统精简
47. 存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为.( )
A. 0x21 B. 0x68 C. 0x65 D. 0x02
48. ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是.( )
A. R0 = R2 + (R3 << 1) B. R0 =( R2<< 1) + R3 C. R3= R0+ (R2 << 1) D. (R3 << 1)= R0+ R2
49. IRQ中断的入口地址是( )。FIQ的入口地址为0x0000001C.
A. 0x00000000 B. 0x00000008 C. 0x00000018 D. 0x00000014
50. 实时操作系统中,两个任务并发执行,一个任务要等待其合作伙伴发来信息,或建立某个条件后再向前执行,这种制约性合作关系称为. ( )
A. 同步 B. 互斥 C. 调度 D. 执行
51. LDR R2,[R3, #128] 的寻址方式是( )
A.寄存器寻址 B.寄存器移位 C.变址寻址 D.间接寻址
52. ARM处理器支持的数据类型中,字和半字的位数分别为( )
A. 32/8 B. 16/8 C. 32/16 D. 32/8
53. 下面哪种操作系统最方便移植到嵌入式设备中( )
A. DOS B. Unix C. Windows XP D. Linux
54. 通常所说的32位微处理器是指( )
A. 地址总线的宽度为32位 B.处理的数据长度只能是32位
C. CPU字长为32位 D.通用寄存器数目为32个
55. 寄存器R13除了可以做通用寄存器外,还可以做( )
A. 程序计数器 B. 链接寄存器 C. 栈指针寄存器 D. 基址寄存器
56. 下面哪个系统属于嵌入式系统。( D )
A.“天河一号”计算机系统 B. 联想T400笔记本计算机 C. 联想S10上网本 D.联想OPhone手机
57. 下面关于哈佛结构描述正确的是( A )
A. 程序存储空间与数据存储空间分离 B. 存储空间与IO空间分离
C. 程序存储空间与数据存储空间合并 D. 存储空间与IO空间合并
58. 下面哪一种工作模式不属于ARM特权模式( A )
A. 用户模式 B. 系统模式 C. 软中断模式 D. FIQ模式
59. ARM7TDMI的工作状态包括( D )
A. 测试状态和运行状态 B. 挂起状态和就绪状态
C. 就绪状态和运行状态 D. ARM状态和Thumb状态
60. 指令“LDMIA R0!, {R1, R2, R3, R4}”的寻址方式为( C )
A. 立即寻址 B. 寄存器间接寻址 C. 多寄存器寻址 D. 堆栈寻址
61. USB接口移动硬盘最合适的传输类型为( B )
A. 控制传输 B. 批量传输 C. 中断传输 D. 等时传输
62. 下面哪一种功能单元不属于I/O接口电路。( D )
A. USB控制器 B. UART控制器 C. 以太网控制器 D. LED
63. 下面哪个操作系统是嵌入式操作系统。( B )
A. Red-hat Linux B. µCLinux C. Ubuntu Linux D. SUSE Linux
三.简答题
1、简述冯诺依曼结构与哈佛结构,并指出日常生活中的Intel处理器属于哪种结构。
答:冯诺依曼结构是一种程序指令存储器和数据存储器合并在一起的存储器结构。
哈佛体系结构是一种将程序指令存储和数据存储分开的存储器结构。
Intel处理器采用冯诺依曼结构。
2、除了可靠性以外,请简述其他(至少四个)用于评价嵌入式系统性能的指标,并请指出MTBF的具体含义。
答:性能指标,包含吞吐率,实时性,资源利用率;可维护性;可用性;功耗;环境适应性;通用性;安全性;保密性;可扩展性;MTBF,全称为Mean Time Between Failures, 平均故障间隔时间。
3、嵌入式系统总体上可分为软件系统和硬件系统。在开发的过程中,两者往往是并行的关系。在软件的开发过程中,经常会采用交叉开发环境。请简述交叉开发环境包含的两个部分,并请简要叙述一下交叉开发的过程。
答:交叉编译环境和交叉连接器。在宿主机上的通用操作系统开发环境下书写程序代码后,使用针对目标系统体系结构的编译器进行编译,并采用交叉链接器对目标代码进行链接,生成的应用程序进过重定向,下载到目标机器。
4、你现在某从事嵌入式产品开发的公司工作,被要求开发一通用的数字电视接收控制器,即通常所说的“机顶盒”,对于机顶盒的开发,请你结合嵌入式系统的设计流程叙述一下将采取的设计开发流程。(整个流程需包括从产品定义到产品测试和发布)
答:嵌入式系统的设计流程:
1)产品定义;
2)硬件与软件部分划分;
3)迭代与实现;
4)详细的硬件与软件设计;硬件设计,软件设计;
5)硬件与软件的集成;
6)系统测试与开发;
5、请简述ARM处理器的堆栈寻址和块拷贝寻址模式,并比较它们的不同点。
答: 堆栈寻址: 按先入先出的方式工作。
块拷贝寻址: 一种多寄存器传送指令,用于将一块数据从存储器的某一块位置拷贝到多个寄存器
中或相反。
主要不同点:两者存放数据的顺序相反。
6、函数strncpy的作用是?
void strncpy(char *s, const char *d, int n)
{
int c;
__asm
{
loop:
CMP n, #0
BEQ out
LDRB c, [s], #1
STRB c, [d], #1
SUB n, n, #1
B loop
out:
}
}
答: 作用是将长度为n的数组s拷贝至d
7.简要说明处理器内核、处理器核、芯片这三个概念之间的区别与联系。
答: ARM公司是一个知识产权IP公司,本身是不做芯片的,它为ARM架构处理器芯片提供ARM处理器内核和ARM处理器核(在最基本的ARM处理器内核基础上,可增加CACHE、MMU、协处理器CP15、AMBA接口以及EMT宏单元等,这样就构成了ARM处理器核)。经常见到的ARM处理器,实际是半导体公司基于ARM的处理器核或处理器内核为核心,再开发的针对某一应用领域的芯片。
8. ARM核中什么寄存器用于存储PC, R13通常用来存储什么, R14通常用来存储什么。
答: R15用于程序计数寄存器PC,R13通常用来做堆栈指针寄存器,R14通常用来做链接寄存器,保存函数调用的返回地址。
9. 搭建嵌入式开发环境、连接目标板,一般使用什么通信接口连接?在windows主机上使用什么软件建立连接?在Linux主机上使用什么软件建立连接?
答: 搭建嵌入式开发环境、连接目标板,一般使用RS-232,以太网口、并口通信接口连接。在Windows主机上使用超级终端软件建立连接,在Linux主机上使用Minicom软件建立连接。
10. 根据嵌入式系统的特点,写出嵌入式系统的定义。
11. 在进行基于ARM核的嵌入式系统软件开发时,调用如下函数:
int do_something(int arg1,void *arg2,char arg3,int *arg4)
这四个参数通过什么方式从调用程序传入被调函数?
答: 根据ATPCS编程规范,调用函数和子程序通过R0-R3四个寄存器传递参数,超过四个参数使用堆栈传递。因此arg1通过R0传入, arg2通过R1传入,arg3通过R2传入,arg4通过R3传入。
12. Boot Loader在嵌入式系统中主要起什么作用?完成哪些主要的工作?
答: Boot Loader是在嵌入式系统复位启动时,操作系统内核运行前,执行的一段程序。通过Boot Loader,初始化硬件设备,建立内存和I/O空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。
13. 目前使用的嵌入式操作系统主要有哪些?请举出六种较常用的。
四 填空题
1. ARM微处理器有 种工作模式,它们分为两类 、 ,其中用户模式属于 。
2. ARM支持两个指令集, ARM核因运行的指令集不同,分别有两个态 、 ,状态寄存器CPSR的 位反映了处理器运行不同指令的当前状态。
3. ARM处理器有两种总线架构,数据和指令使用同一接口的是 ,数据和指令分开使用不同接口的是 。
4. ARM微处理器复位后,PC的地址通常是 ,初始的工作模式是 。
5. 编译链接代码时,有两种存储代码和数据的字节顺序,一种是 ,另一种是 。
6. 构建嵌入式系统开发环境的工具链有多种,其中开放源码的工具链是 ,ARM公司提供的工具链是 。
7. 计算机有CISC和RISC两种类型,以ARM微处理器为核心的计算机属于 类型,其指令长度是 。
8. S3C2410芯片采用的内核及核分别是___________、___________。
9. LDR指令用于从_______中将一个32位的字数据传送到________中。
10. 一般而言,嵌入式系统的构架可以分为4个部分:分别是_________、存储器、输入/输出和软件,一般软件亦分为操作系统和_________两个主要部分。
11. 根据嵌入式系统使用的微处理器,可以将嵌入式系统分为嵌入式微控制器,___________ ,______________ 以及片上系统。
12. 操作系统是联接硬件与应用程序的系统程序,其基本功能有___________、进程间通信、___________、I/O资源管理。
13. 从嵌入式操作系统特点可以将嵌入式操作系统分为_________和分时操作系统,其中实时系统亦可分为_________和软实时系统。
14. 编译链接代码时,有两种存储代码和数据的字节顺序,一种是_________,另一种是________ 。
15. ARM微处理器支持虚拟内存,它是通过系统控制协处理器______和MMU(存储管理部件)来进行虚拟内存的存储和管理。当系统发生 _________异常和_________异常时,异常处理程序透过嵌入式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页面,以保证程序正常执行。
16. 计算机有CISC和RISC两种类型,以ARM微处理器为核心的计算机属于___________类型,其指令长度是_________ 。
17. 嵌入式开发一般采用_________方式,其中宿主机一般是指_________。
五、程序分析
1、如下在ADS 中对工程的链接器(ARM Linker)进行了配置
并编写了如下的汇编程序:
问:现执行上述程序,请列出R0,R1,R2 的最终值,并告知整个程序的功能
2、阅读如下程序
test.s:
test.c:
请列出上述程序执行后R0,R1 的值,并说明上述程序的作用。
3、现有如下C 语言定义的函数mypro
int mypro(int a, int b)
{
a=a*b;
return (a);
}
请补充完成调用上述函数的汇编程序,实现11 与22 相乘,并要求将结果保存在地址为0x40001000
处
area test3, code, readonly
import mypro
entry
code32
start
(1)
(2)
(3)
(4)
(5)
END
一、 选择题
1、以下说法不正确的是(B )。
A、任务可以有类型说明 B、任务可以返回一个数值
C、任务可以有形参变量 D、任务是一个无限循环
2、用图形点阵的方式显示一个16*16点阵汉字需要(B )字节。
A、8 B、32
C、16 D、64
3、下列描述不属于RISC计算机的特点的是(C)。(2009.06.06)
A.流水线每周期前进一步。
B.更多通用寄存器。
C.指令长度不固定,执行需要多个周期。
D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。
4、存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为( D)。(2009.12.26)
A、0x21 B、0x68
C、0x65 D、0x02
5、μCOS-II中对关键代码段由于希望在执行的过程中不被中断干扰,通常采用关中断的方式,以下X86汇编代码正确而且不会改变关中断之前的中断开关状态的是(D)
A. 先CLI、执行关键代码、再STI
B. 先STI、执行关键代码、再CLI
C. 先POPF、CLI、执行关键代码、再PUSHF
D. 先PUSHF、CLI、执行关键代码、再POPF。
5、采用RS232-C串行通信至少需要三根线,其中不包括(A)
A、电源线 B、地线
C、发送数据线 D、接收数据线
6、RS232-C串口通信中,表示逻辑1的电平是(D )。
A、0v B、3.3v
C、+5v~+15v D、-5v~-15v
25、RS232-C串口通信中,表示逻辑0的电平是( C )
A、0v B、3.3v
C、+5v~+15v D、-5v~-15v
7、 ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是(A)。(2009.06.06)
A. R0 = R2 + (R3 << 1)
B. R0 =( R2<< 1) + R3
C. R3= R0+ (R2 << 1)
D. (R3 << 1)= R0+ R2
8、IRQ中断的入口地址是( C)。(2009.06.06)
A、0x00000000 B、0x00000008
C、0x00000018 D、0x00000014
9、 S3C2420X I/O口常用的控制器是(D)。
(1)端口控制寄存器(GPACON-GPHCON)。
(2)端口数据寄存器(GPADAT-GPHDAT)。
(3)外部中断控制寄存器(EXTINTN)。
(4)以上都是。
8、在c语言中以下不正确的说法是(B )
A、实参可以是常量、变量、或表达式
B、形参可以是常量、变量或表达式
C、实参可以为任意类型
D、形参应与其对应的实参类型一致
10、实时操作系统中,两个任务并发执行,一个任务要等待其合作伙伴发来信息,或建立某个条件后再向前执行,这种制约性合作关系被成为(A)。(2009.06.06)
A. 同步 B. 互斥 C. 调度 D. 执行
11、和PC系统机相比嵌入式系统不具备以下哪个特点( C)。
A、系统内核小 B、专用性强
C、可执行多任务 D、系统精简
12、ADD R0,R1,#3属于(A)寻址方式。
A. 立即寻址 B. 多寄存器寻址
C. 寄存器直接寻址 D. 相对寻址
2、MOV R1,#3属于(A )寻址方式。新
A、立即寻址 B、多寄存器寻址
C、寄存器直接寻址 D、相对寻址
13、GET伪指令的含义是( A)
A. 包含一个外部文件 B. 定义程序的入口
C. 定义一个宏 D. 声明一个变量
14、存储一个32位数0x876165到2000H~2003H四个字节单元中,若以小端模式存
储,则2000H存储单元的内容为( C)。
A、0x00 B、0x87
C、0x65 D、0x61
15、μCOS-II操作系统不属于( C)。
A、RTOS B、占先式实时操作系统
C、非占先式实时操作系统 D、嵌入式实时操作系统
16、若R1=2000H,(2000H)=0x86,(2008H)=0x39,则执行指令LDR R0,[R1,#8]!后R0的值为(D )。
A. 0x2000 B. 0x86
C. 0x2008 D. 0x39
17、寄存器R13除了可以做通用寄存器外,还可以做(C )。
A、程序计数器 B、链接寄存器
C、栈指针寄存器 D、基址寄存器
18、FIQ中断的入口地址是( A)。
A、0x0000001C B、0x00000008
C、0x00000018 D、0x00000014
19、ARM指令集和Thumb指令集分别是(D )位的。(2009.12.26)
A. 8位,16位 B. 16位,32位
C. 16位,16位 D. 32位,16位
20、ARM寄存器组有(D )个寄存器。
A、7 B、32
C、6 D、37
21、若R1=2000H,(2000H)=0x28,(2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0的值为(D )。
A. 0x2000 B. 0x28
C. 0x2008 D. 0x87
22、寄存器R15除了可以做通用寄存器外,还可以做( A)
A. 程序计数器 B. 链接寄存器
C. 堆栈指针寄存器 D. 基址寄存器
24、μCOS-II操作系统属于(B)
A、顺序执行系统 B、占先式实时操作系统
C、非占先式实时操作系统 D、分时操作系统
25、ARM指令集是( B)位的。
A. 16 B. 32
C. 8 D. 24
26、假设R1=0x31,R2=0x2 则执行指令ADD R0,R1,R2 LSL #3 后,R0的值是( C)
A. 0x33 B. 0x34
C. 0x39 D. 0x38
27、寄存器R13除了可以做通用寄存器外,还可以做( C)
A、程序计数器 B、链接寄存器
C、栈指针寄存器 D、基址寄存器
28、ARM寄存器组有(C )个状态寄存器
A、7 B、32
C、6 D、37
29、和PC机系统相比下列哪个不是嵌入式系统独具的特点(C)
A、系统内核小 B、专用性强
C、可执行多任务 D、系统精简
30、Unicode编码与(A)编码方式兼容。(2009.12.26)
A、ASCII码 B、GBK
C、GB2312 D、区位码
31、嵌入式系统有硬件和软件部分构成,以下(C)不属于嵌入式系统软件。
A. 系统软件 B. 驱动 C. FPGA编程软件 D. 嵌入式中间件
32、 Cache用于存放主存数据的部分拷贝,主存单元地址与Cache单元地址之间的转换用(A)完成。
A.硬件 B. 软件 C. 用户 D. 程序员
23、对于UC/OS-II操作系统,以下说法不正确的是( B )
A、任务可以有类型说明
B、任务可以返回一个数值
C、任务可以有形参变量
D、任务是一个无限循环
33、 在μC/OS-II系统中,OSTimeTick()函数只被以下(A)函数或过程所调用。
A. OSTickISR B. OSShed C. OSCtxSw D. OSIntCtxSw
34、 每种嵌入式操作系统都有自身的特点以吸引相关用户,下列说法错误的是(D)。(2009.12.26)
A. 嵌入式Linux提供了完善的网络技术支持;
B. mCLinux是专门为没有MMU的ARM芯片开发的;
C. mC/OS-Ⅱ操作系统是一种实时操作系统(RTOS);
D. WinCE提供完全开放的源代码。
35、下列关于存储管理单元(MMU)说法错误的是(B)。(2009.06.06)
A. MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。
B. 在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。
C. MMU提供了一些资源以允许使用虚拟存储器。
D. MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。
36、 下列CPSR寄存器标志位的作用说法错误的是(D)。
A. N:负数 B. Z: 零 C. C: 进位 D. V: 借位
37、 S3C2410X处理器为用户进行应用设计提供了支持多主总线的IIC接口。处理器提供符合IIC协议的设备连接的串行连接线为(C)。(2009.06.06)
A. SCL和RTX B. RTX和RCX
C. SCL和SDA D. SDA和RCX
38、栈和队列的共同特点是 (C)。(2009.12.26)
A. 都是先进先出B. B. 都是先进后出
C. 只允许在端点处插入和删除元素 D. 没有共同点
39、 有如下程序
main()
{
int x=1,a=0,b=0;
switch(x)
{
case 0: b++;
case 1: a++;
case 2: a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是 (A)。
A. a=2 ,b=1 B. a=1, b=1 C. a=1, b=0 D. a=2, b=2
40、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(D)。(2009.12.26)
A. 函数调用可以作为独立的语句存在
B. 函数调用可以作为一个函数的实参
C. 函数调用可以出现在表达式中
D. 函数调用可以作为一个函数的形参
41、 以下说法正确的是 (C)。(2009.06.06)
A. C语言程序总是从第一个的函数开始执行
B. 在C语言程序中,要调用函数必须在main()函数中定义
C. C语言程序总是从main()函数开始执行
D. C语言程序中的main()函数必须放在程序的开始部分
42、 寄存器R15用作( B )。(2009.06.06)
A. 栈指针寄存器 B. 程序计数器
C. 当前程序状态寄存器 D. 基地址寄存器
43、 IRQ中断的优先级别是( D )。
A. 1 B. 2
C. 3 D. 4
15、随机存取存储器具有( A )功能
A、读/写 B、无读/写
C、只读 D、只写
44、 LDR R2,[R3,#128] 的寻址方式是( C )。
A. 寄存器寻址 B. 寄存器移位
C. 变址寻址 D. 间接寻址
45、 S3C2410有( B )个USB接口。
A. 1 B. 2
C.3 D. 4
46、 ARM处理器的工作模式有( C )种。
A. 5 B.6
C. 7 D.8
二、 填空题:
1、串行通信方式有三中 单工 通信、 双工 通信和 半双工 通信。
2、填写μC/OS-II中任务创建函数OSTaskCreate()的四个参数的含义:
OSTaskCreate(
MyTask, //(任务的函数指针)
(void *)s, //(传给任务函数的参数)
&TaskStartStk[TASK_STK_SIZE - 1], //(任务的堆栈指针)
0 //(任务的优先级号)
);。
3、ARM7指令系统采用三级流水线指令,分别包括:取指、译码和执行。
4、 TCP/IP在多个层引入了安全机制,其中TLS协议位于(传输)层。
5、OSTaskSuspend (self)可把正在运行的任务挂起(或等待),参数self指任务自身的优先级。用此函数挂起的任务可通过 OSTaskResume(self)函数唤醒。
6、下列程序的输出结果是 (“Hello”) 。
maim ()
{ char b[]="Hello you";
b[5]=0;
printf ("%s\n",b); }
7、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为( 0 )。
8、若有int a[3]={10,12,30},则 *(a+2)= 30 。
9、在ARM处理器的各种模式中,大多数应用程序运行在(用户)模式,当一个高优先级中断产生时会进入(快速中断)模式,在复位或软件软中断时进入(特权)模式。
10、 一个嵌入式系统结构有典型的四层组成,包括:硬件层、中间层、软件层 和功能层 。
11、 一个FAT文件系统卷有四部分组成,包括:保留区 、 FAT区 、 根目录 和 数据区 。
12、 事件控制块ECB中OSEventType表示 事件类型 ,OSEventCnt表示 信号量计数器(和信号量的值) 。
13、 串行通信方式有三中 单工 通信、 双工 通信和 半双工 通信。
14、 OSTaskSuspend (self)可把正在运行的任务 挂起(或等待) ,参数self指 任务自身的优先级。用此函数挂起的任务可通过 OSTaskResume(self) 函数唤醒。
15、 如果信号量是用于表示打印机不忙,那么该信号量的初始值应设为 1 。
16、 一个1024×8位的ROM,其存储容量为 8K 。
17、 若一个优先级为48的任务就绪,则在就绪表中,OSRdyTbl[]的 OSRdyTbl[6]的D0 置位,变量OSRdyGrp的 D6 置位。
18、 Socket接口是TCP/IP网络的__ API ______,定义了许多函数或例程。常用的Socket类型有两种为_流式(stream)__Socket和_数据报式(datagram)_Socket。其中_流式(stream)__Socket是面向连接的,_数据报式(datagram)_Socket是面向无连接的。
19、 调试程序时调入的文件最好为 Debug 版本下编译生成的.axf文件,该版本的文件包含部分调试用到的信息。
20、 S3C44B0X使用 ARM7(或ARM7TDMI) 内核,工作频率为 66MHZ 。
21、 在图形操作系统中,字符通常有两种存储方式:一种是图形点阵(或点阵) 方式;一种是 矢量图形(或矢量图) 方式。在嵌入式开发系统中使用的都是 图形点阵 方式。
22、 和信号量用数值表示不同,邮箱可以使一个任务向令一个任务发送一个 指针 型
23、 变量,该变量包含了特定消息的 数据结构 。
24、 S3C44B0提供_两个__个独立的异步串口,都可以运行于__中断 __模式或__ DMA ___模式 。
25、 16、ARM处理器的两种工作状态为 ARM 状态和 Thmub 状态。
26、 17、USB家庭中有三位成员,即 主机(或host)、 设备(或device) 、集线器(或Hub) 。
27、 ARM存储器有两种存储模式,即大端模式和小端模式。假设Y=0x46134存储在2000H~2003H四个内存单元中,若以小端模式存储,则(2000H)=__0x34 __、(2001H)= 0x61 _、(2002H)=_0x04_、(2003H)=__0x00__。
28、 信号量有两种类型,分别为:二进制(或binary)型和记数器(或counter) 型。
29、 影响流水线性能的因素有(互锁)和(跳转指令)。
30、 某数码相机内置128MB的存储空间,拍摄分辨率设定为1600×1200像素,颜色为24为,若不采用压缩技术,使用内部存储器最多可以存储(23)张照片,该相机最多支持(224)种色彩。
31、 对于8位二进制数,-7的反码和补码分别是(11111000)和(11111001)。
32、 在CPU的状态寄存器中,如果符号标志为“1”,表示运算结果为(负);如果进位标识为“0”,表示(无进位或借位)。
三、 判断题
1、程序运行过程中的资源可以是显示器、键盘,但不可以是一个数组或变量(X)
2、21、在μCOS-II操作系统中,已知Task1的优先级为12,Task2的优先级为26。假如在Task2运行过程中发生键盘中断,在执行中断服务程序时Task1进入就绪状态,则中断返回时Task1得到CPU的使用权。(√ )(2009.12.26)
3、若定义任务task1的优先级为12,则不能再定义其他任务的优先级也为12(√ )
4、任务创建后即开始调度(X)
5、液晶工作在文本模式下时,既可以显示英文字符也可以显示汉字(X)
6、处于就绪状态的任务只能切换到运行状态(X)
7、等待消息函数WaitMessage(0)中的“0”表示此函数的超时等待时间为0秒(X)
8、 若OSTaskSuspend (prio)函数把正在延时的任务挂起,则调用一次对应的唤醒函数即可使该任务切换到就绪状态。(X)(2009.12.26)
9、 调试程序时,需要停止程序运行后才可查看变量内容(√ )
10、 μCOS-II操作系统中移植成功后即可使用文件系统(X)
11、 将模拟信号转换成数字信号的电路是DA转换器。(×)
12、 IIC是同步串行数据总线,。(√)
13、 S3C2410的处理器对内存的访问只能通过Load/Store指令来实现。(√)(2009.12.26)
14、 Nand Flash比Nor Flash成本高,可靠性差。(×)
15、 C语言程序可以嵌套加入汇编程序模块。 ( √ )(2009.06.06)
16、 运算放大器的输出电压范围一般大于电源电压的范围。( × )(2009.06.06)
17、 由于CPU内部寄存器的访问速度较高,根据ATPC标准,应尽可能使函数的参数控制在4个以下。( √ )(2009.06.06)
18、 ARM处理器结构体系中具有T变种处理器核可以工作在ARM状态和Thumb状态。( √ )
四、 简答题
1、ARM微处理器的编程模型是指ARM微处理器的基本工作原理和一些与程序设计相关的基本技术细节,ARM编程模型主要有哪五个方面?主要是指什么内容?
答案要点:
ARM微处理器的工作状态:ARM状态、Thumb状态
ARM体系结构的存储器格式:大端格式、小端格式
ARM微处理器的工作模式:7种运行模式
ARM体系结构的寄存器组织:37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器,哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。
ARM微处理器的异常状态:7种异常
2、 画图说明μCOS-II操作系统各状态之间是如何切换的,并举出至少一个相应的切换条件或函数。
答:
带箭头各任务间切换图正确,得1分;
切换条件每三个得1分,共3分,每种切换能举出一个正确条件或函数即可。
3、什么是μCOS-II操作系统的时钟节拍?
答:时钟节拍是特定的周期性中断。(1分)这个中断可以看作是系统心脏的脉动。中断间的时间间隔取决于不同的应用,一般在10ms~200ms之间。(1分)时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。(1分)时钟节拍率越快,系统的额外开销就越大。(1分)
4、ARM处理器有几种工作模式?并做说明每种工作模式的含义。
答:ARM处理器有7种工作模式:
用户模式(usr)- 正常程序执行的模式 0.5分
快速中断模式(fiq)- FIQ异常响应时进入此模式 0.5分
中断模式(irq)- IRQ异常响应时进入此模式 0.5分
管理员模式(svc)- 系统复位和软件中断响应时进入此模式 0.5分
中止模式(abt)- 用于虚拟存储及存储保护 0.5分
系统模式(sys)- 与用户类似,但有直接切换到其它模式等特权 0.5分
未定义模式(und)- 未定义指令异常响应时进入此模式 0.5分
除了用户模式外,其他模式均可视为特权模式 0.5分
5、什么是操作系统? 操作系统在“硬件、操作系统、应用程序、硬件驱动”四者中,处于哪两层之间??
答:操作系统是计算机中最基本的程序。操作系统负责计算机系统中全部软硬件资源的分配与回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统提供软件平台。(3分)
操作系统处于应用程序和硬件驱动之间。(1分)
6、什么是嵌入式系统?分别从狭义和广义两方面说明。
答:从广义上说,凡是与产品结合在一起具有嵌入式特点的控制系统都可以叫嵌入式系统如电子表、超声波测距仪等职能仪表,常见CPU为MCS51系列芯片。(2分)
从狭义上说,嵌入式系统是指而嵌入式系统一般指在开发时移植了操作系统,功能较复杂的便携式电子设备,如手机、掌上电脑、MP4等,常见CPU为ARM、DSP、SOC等。(2分)
7、简述任务切换的过程。
答:当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即CPU寄存器中的全部内容。(1分)这些内容保存在任务的当前状态保存区,也就是任务自己的堆栈中。(1分)入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的堆栈中重新装入CPU的寄存器,并开始下一个任务的运行。这个过程就称为任务切换。(1分)做任务切换所需要的时间取决于CPU有多少寄存器要入栈。(1分)
8、S3C44B0的存储系统中,0xc000000和0xc080000的含义是什么?它们之间的512kbyte空间做什么用?(2009.12.26)
答:0xC000000是 SDRAM的起始地址,系统的程序存储空间从0xC080000开始。(2分)512Kbyte的空间划分出来,作为系统的LCD显示缓冲区使用(更新其中的数据,就可以更新LCD的显示)。(2分)
9、简述你对嵌入式和嵌入式系统的理解?
答:凡是使用了CPU的便携式电子设备都可以叫嵌入式,(如电子表、超声波测距仪等职能仪表,常见CPU为MCS51系列芯片) (2分)。而嵌入式系统一般指在开发时移植了操作系统,功能较复杂的便携式电子设备,(如手机、掌上电脑、MP4等,常见CPU为ARM、DSP、SOC等)。(2分)
10、嵌入式设计流程?
答:1)系统需求分析
2)体系结构设计
3)硬件/软件协同设计
4)系统集成
5)系统测试 (每点约1分,酌情错2点,扣1分)
11、什么是代码临界区,进、出代码临界应分别做什么?(2009.12.26)
答:代码的临界区也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。(2分)
为确保代码临界区的执行,在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断(在任务切换时,地址、指令、数据等寄存器堆栈保护)。(2分)
12、 简要叙述嵌入式系统开发流程。
参考答案及要点:
建立开发环境;
配置开发主机;
建立引导装载程序BOOTLOADER;
下载已经移植好的操作系统;
建立根文件系统;
开发应用程序。
13、 试简述常用的三极管放大电路和技术特点。
答:共射电路:具有较大的电压放大倍数和电流放大倍数,输入电阻和输出电阻适中。
共集电路:输入电阻大,输出电阻小,电压放大倍数小于1。
共基电路:输入电阻小,频率特性好。
14、 嵌入式系统的软件层次结构包括哪些部分?简单说明各部分的功能与作用。(2009.06.06)
答:驱动层程序、操作系统、应用程序接口和应用程序。
驱动层程序:为上层软件提供设备的操作接口。
操作系统:进程管理、进程间通信、内存管理等。
应用程序接口:复杂函数和数据结构的集合,简化应用程序的开发。
应用程序:实现用户功能。
五、 阅读程序题
1、根据以下程序回答问题。
struct NODE
{int k;
struct NODE *link;
};
main()
{ struct NODE m[5],*p=m,*q=m+4;
int i=0;
while(p!=q)
{p->k=++i;p++;
q->k=i++;q--;
}
q->k=i;
for(i=0;i<5;i++)printf("%d",m[i].k);
printf("\n");
}
(1)i、p、struct NODE和m的分别占据多少字节的内存空间?(4分)
(2)p和q指针初始指向的地址相差多少字节?(4分)
(3)程序运行后的输出结果是什么?(4分)
参考答案及要点:
(1)i、p、struct NODE和m的分别占据4字节、4字节、8字节和40字节的内存空间。
(2)p和q指针初始指向的地址相差32字节
(3)程序运行后的输出结果13431。
2、在分辨率为320x240的LCD上,执行完下列程序后,画出在LCD上显示的图形并在划横线处添加注释。
void Main_Task(void *Id)
{ int oldx,oldy;
PDC pdc;
ClearScreen();
pdc=CreateDC();
SetDrawOrg(pdc, LCDWIDTH/2,LCDHEIGHT/2, &oldx, & oldy);
Circle(pdc,0, 0, 50); //_________________________
MoveTo(pdc, -50, -50);// _________________________
LineTo(pdc, 50, -50);// _________________________
ArcTo(pdc, 80, -20, TRUE, 30); //_________________________
LineTo(pdc, 80, 20);
ArcTo(pdc, 50, 50, TRUE, 30);
LineTo(pdc, -50, 50);
ArcTo(pdc, -80, 20, TRUE, 30);
LineTo(pdc, -80, -20);
ArcTo(pdc, -50, -50, TRUE, 30);
OSTimeDly(3000);
}
答:
320x240的LCD
以原点为圆心,50为半径画圆 (0.5分
画笔移动到坐标(-50,-50)处 (0.5分)
从坐标(-50, -50)到(50, -50)画直线 (0.5分)
从当前坐标开始以30为半径顺时针画圆弧到坐标(80, -20) (0.5分)
3、在划线处添加代码,完成下面的程序,实现在task1中计算1到10的平均值,完成后向task2发送信号量。Task2无限期等待信号量,等到后在LCD上显示收到平均值。
___ OS_EVENT *math_Sem;__;
Void Task1()
{ int i ,average=0,sum=0;
__ math_Sem=OSSemCreate(0);__
for(i=1;i<=10;i++)
{
sum=sum+i;
}
average=sum/10;
_ OSSemPost(math_Sem);__;
for(;;)
{ OSTimeDly(100);}
}
void task2()
{ __ U8 err; ___;
for(;;)
{ _ OSSemPend(math_Sem,0,&err);_ ;
LCD_printf("we get the average!\n");
____ OSTimeDly(100);__ ;
}
}
4、在划横线处添加代码,完成下面创建一个任务的过程,要求优先级为36,任务栈大小为256。
OS_STK task1_Stack [256]={0, };
void task1 (void *Id);
#define task1_Prio 36
OSInit() ; //操作系统初始化
OSTaskCreate (task1,(void *)0,(OS_STK *)&task1_Stack[256-1],task1_Prio);
OSStart() ;//操作系统任务调度开始
56、在划线处添加代码,完成下面的程序,实现按行顺序为一个5 X 5的数组a赋1到25的自然数,然后输出该数组的左下半三角。
main()
{ int a[5][5],i,j,n=1;
for(i=0;i<_(1)_;i++)
for(j=0;j<_(2)_;j++)
a[i][j]=n++;
printf(“the result is :\n”);
for(i=0;i<5;i++)
{ for(j=0;j<=_(3)_;j++)
printf(“M”,a[_(4)_][ _(5)_]);
printf(“\n”);
}
}
(1)5 (2)5 (3)i (4)i (5)j
5、ARM指令集的每一条指令都是4字节的,下面是一段中断入口程序,在空白处填上该中断的类型和中断向量。
ENTRY
B Startup ; 复位中断,0x00 1分
B UndefHandle ; 未定义指令中断,0x04 1分
B SWIHandle ; 软中断,0x08 1分
B PAbtHandle ; 预取中止,0x0C 1分
B DAbtHandle ; 数据中止,0x00000010
NOP; ; 系统保存未用,0x00000014
B IRQHandle ; IRQ中断,0x18 1分
B FIQHandle ; 快速中断,0x1C 1分
6、下面的程序描述了键盘消息的创建和使用过程,认真阅读并在划横线的地方添加适当的注释。
void Key_Scan_Task(void *Id)//按键扫描任务
{ U32 key;
INT8U err;
POSMSG pmsg;
for (;;){
OSMboxPend(Key_MailBox, 0, &err); //__请求键盘邮箱 1分
key=Zlg7289_ReadKey();
pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);
;//__请求到表示有键按下的邮箱 1分
if(pmsg)
SendMessage(pmsg); //_创建消息 1分
}
}
void Main_Task(void *Id) //接收键盘消息的任务
{ POSMSG pMsg=0;//创建消息结构
for(;;)
{//死循环
pMsg=WaitMessage(0); //___发送消息 1分
switch(pMsg->Message){ //___判断消息的类型 1分
case OSM_KEY://键盘消息
LCD_printf("To have key on !\n");//向液晶屏输出
break;
}
DeleteMessage(pMsg) ; //___删除消息 1分
}
}
7、三个任务代码如下,其中task1、task2、task3的优先级分别为:29、36,48。分析LCD上的显示结果。(2009.12.26)
Void task1()
{ ClearScreen();
LCD_Printf(“task1 is running!\n”);
OSTimeDly(500);
}
Void task2()
{ ClearScreen();
LCD_Printf(“this is task2!\n”);
OSTimeDly(350);
}
Void task3()
{ ClearScreen();
LCD_Printf(“running task3!\n”);
OSTimeDly(200);
}
在LCD上的显示结果为:
第一次:task1 is running! (1分)
第二次:this is task2! (1分)
第三次:running task3! (1分)
第四次:running task3! (1分)
第五次:this is task2! (1分)
第六次:task1 is running! (1分)
8、C语言程序
#include"..\ucos-ii\includes.h"
#include "..\ucos-ii\add\osaddition.h"
#include "..\inc\drv.h"
#include <string.h>
OS_STK Main_Stack[STACKSIZE*8]={0, }; //1) 定义并初始化堆栈(数组)
void Main_Task(void *Id);
#define Main_Task_Prio 12 // 2) 定义任务优先级
OS_EVENT *Nand_Rw_Sem; //3) 定义信号量
OS_EVENT *Uart_Rw_Sem;
int main(void)
{
ARMTargetInit(); //开发板初始化
OSInit(); //4) 操作系统初始化
uHALr_ResetMMU();//复位MMU
LCD_Init(); //初始化LCD模块
LCD_printf("LCD initialization is OK\n");//向液晶屏输出数据
LCD_printf("320 x 240 Text Mode\n");
initOSGUI();//初始化图形界面
LoadFont();//调Unicode字库
LoadConfigSys();//使用config.sys文件配置系统设置
LCD_printf("Create task on uCOS-II...\n");
OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio); //5) 创建系统任务
OSAddTask_Init();//创建系统附加任务
LCD_printf("Starting uCOS-II...\n");
LCD_printf("Entering graph mode...\n");
LCD_ChangeMode(DspGraMode);//变LCD显示模式为文本模式
InitRtc();//初始化系统时钟
Nand_Rw_Sem=OSSemCreate(1); // 6) 创建信号量,初值为1 ,满足互斥条件
OSStart(); //7) 操作系统任务调度开始
return 0;
}
9、 阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。(2009.06.06)
看门狗定时器控制寄存器(WTCON)
寄 存 器 |
地 址 |
读/写 |
描 述 |
初 始 值 |
WTCON |
0x53000000 |
读/写 |
看门狗定控制寄存器 |
0x8021 |
WTCON的标识位
WTCON |
Bit |
描 述 |
初 始 值 |
Prescaler Value |
[15:8] |
预装比例值,有效范围值为0~255 |
0x80 |
Reserved |
[7:6] |
保留 |
00 |
Watchdog Timer |
[5] |
使能和禁止看门狗定时器 0=禁止看门狗定时器 1=使能看门狗定时器 |
0 |
Clock Select |
[4:3] |
这两位决定时钟分频因素 00:1/16 01:1/32 10:1/64 11:1/128 |
00 |
Interrupt Generation |
[2] |
中断的禁止和使能 0=禁止中断产生 1=使能中断产生 |
0 |
Reserved |
[1] |
保留 |
0 |
Reset Enable/Disable |
[0] |
禁止很使能看门狗复位信号的输出 1=看门狗复位信号使能 0=看门狗复位信号禁止 |
1 |
看门狗定时器数据寄存器(WTDAT)
寄 存 器 |
地 址 |
读/写 |
描 述 |
初 始 值 |
WTDAT |
0x53000004 |
读/写 |
看门狗数据寄存器 |
0x8000 |
看门狗计数寄存器(WTCNT)
寄 存 器 |
地 址 |
读/写 |
描 述 |
初 始 值 |
WTCNT |
0x53000008 |
读/写 |
看门狗计数器当前值 |
0x8000 |
#define rWTCON (*(volatile unsigned *)0x53000000) // 第1行
#define rWTDAT (*(volatile unsigned *)0x53000004) // 第2行
#define rWTCNT (*(volatile unsigned *)0x53000008) // 第3行
void watchdog_test(void)
{
rWTCON = ((PCLK/1000000-1)<<8)|(3<<3)|(1<<2); // 第4行
rWTDAT = 7812; // 第5行
rWTCNT = 7812; // 第6行
rWTCON |=(1<<5); // 第7行
}
参考答案及要点:
第1-3 行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT和rWTCNT。(2分)
第4 行:设置看门狗的预装比例值为1000000,分频因素为1/128,并使能中断。(6分)
第5-6 行:对数据寄存器和计数寄存器赋值为7812。(2分)
第7 行:启动看门狗。(2分)
10、下面程序是多任务中信号量的典型应用,阅读程序,分别画出各个任务的程序流程图,并说明程序要实现的功能什么。(2009.12.26)
OS_EVENT *math_Sem;
int source,dest;
math_Sem=OSSemCreate(0);
void task1()
{
for(;;){
source = 8;
OSSemPost(math_Sem);
}
}
void task2()
{ U8 err;
for(;;){
OSSemPend(math_Sem,0,&err);
dest = source;
source =0;
}
}
答:功能:编写两个任务task1和task2实现要求的功能。设task2为较高的优先级,task1中给一个全局变量source赋值;task2中读取这个变量的值到另一个全局变量dest中,然后清零source变量。要求先赋值后读取。(3分)
流程图:(3分)
Task1的流程图 task2 的流程图
六、 应用实践题(2009.06.06)
1、利用串口1实现两个开发平台间的双机通信。要求1)画出双机通信的串口连接图。2)要实现开发平台A发送某个数,开发平台B接收到后加1再回送给开发平台A。应如何设计程序,给出编程思路或画出程序流程图。
1)(2分)
2)编程思路:
开发平台A编程思路:1)初始化串口1 2)给一个变量赋初值,并调发送函数通
过串口1发送 3)调接受函数,通过串口1接收(3分)
开发平台B编程思路:1)调接受函数,通过串口1接收 2)接收到得数据加1
3)调发送函数,发送加1后的数据(3分)
2、编写程序,实现利用ARM芯片的I/O端口控制LED显示。
控制如下硬件原理图中的四个发光二极管LED1、LED2、LED3、LED4,使它们有规律地点亮和熄灭,具体顺序如下:LED1亮→LED2亮→LED3亮→LED4亮→LED1灭→LED2灭→LED3灭→LED4灭→全亮→全灭,如此反复。
参考答案及要点:
#include "2410lib.h"
void led_on(void)
{
int i,nOut;
nOut=0xF0;
rGPFDAT=nOut & 0x70;
for(i=0;i<100000;i++);
rGPFDAT=nOut & 0x30;
for(i=0;i<100000;i++);
rGPFDAT=nOut & 0x10;
for(i=0;i<100000;i++);
rGPFDAT=nOut & 0x00;
for(i=0;i<100000;i++);
}
void led_off(void)
{
int i,nOut;
nOut=0;
rGPFDAT = 0;
for(i=0;i<100000;i++);
rGPFDAT = nOut | 0x80;
for(i=0;i<100000;i++);
rGPFDAT |= nOut | 0x40;
for(i=0;i<100000;i++);
rGPFDAT |= nOut | 0x20;
for(i=0;i<100000;i++);
rGPFDAT |= nOut | 0x10;
for(i=0;i<100000;i++);
}
void led_on_off(void)
{
int i;
rGPFDAT=0;
for(i=0;i<100000;i++);
rGPFDAT=0xF0;
for(i=0;i<100000;i++);
}
3、实现CAN总线通信需要哪两个芯片?画出S3C44B0利用CAN总线进行通信的硬件连接示意图。要实现两个开发平台间通过CAN总线双机通信,应如何设计程序(给出软件设计思路或程序流程图)。
答:1)MCP2510和TJA1050。(2分)
2)(3分)
3)能正确表示CAN总线的初始化和发送接收编程思路(3分)
开发平台A编程思路:
1)初始化MCP2510 2)启动can总线收发
3)通过can口发送一个字符
开发平台B编程思路:
1)初始化MCP2510 2)启动can总线收发
3)通过can口接收一个字符
4、给出S3C44B0通过驱动器控制步进电机的硬件连接示意图;已知步进电机正转时的控制顺序为A→AB→B→BC→C→CD→D→DA,以列表的形式给出各I/O控制口的值。可以通过哪个宏来设置I/O控制口的值。
答:1)
2)高四位I/O控制口的值
3)可以通过宏SETEXIOBITMASK(bit,mask)(EXIO.h)来设置扩展I/O 口。
5、TCP/IP协议可以分为哪几层?画出S3C44B0进行网络通信的硬件框图;要实现基于UDP的网络通信,应如何设计程序,给出编程思路或程序流程图。
1)分为: 物理层
数据链路层(IEEE802.3 Ethernet MAC)
网络层(IP、ARP、ICMP、IGMP)
传输层 (TCP、UDP)
应用层(BSD Sockets)
2)
3)能正确描述实现网络初始化、创建、绑定、发送和接收UPD包的过程。
编程思路:1)初始化以太网 2)创建socket套接字 3)绑定socket套接字和本机Ip 4)通过socket发送数据 或5)通过socket接收数据 最后两步顺序可换
6、独立式键盘和矩阵式键盘各有什么优缺点?画出矩阵式键盘连接示意图;若采用矩阵式键盘,怎样编程获得按下的键值,给出编程思路或流程图。
1)独立式键盘占有I/O口较多,但编程简单;矩阵式键盘占有I/O接口较少,编程相对复杂。
2)
3)识别矩阵键盘按键的方法分为两步:第一步,识别键盘有无键被按下;第二步,如果有键被按下,识别出具体的按键。
识别键盘有无键被按下的方法是:让所有行线均置为0电平,检查各列线电平是否有变化,如果有变化,则说明有键被按下,如果没有变化,则说明无键被按下。
识别具体按键的方法是(亦称扫描法):逐行置零电平,其余各行置为高电平,检查各列线电平的变化,如果某列电平有高电平变为零电平,则可确定此行此列交叉点处的按键被按下
7、阅读以下S3C2410部分用户手册.求:当PCLK 或 UCLK 为40 MHz时,串口0的波特率为2400 bps ,串口1的波特率为115200bps,相应的控制寄存器如何设置.(8分)
UART BAUD RATE DIVISOR REGISTER
There are three UART baud rate divisor registers(寄存器)including UBRDIV0, UBRDIV1 and UBRDIV2 in the UART block(模块). The value stored in the baud rate divisor register (UBRDIVn), is used to determine the serial Tx/Rx clock rate(baud rate) as follows:
UBRDIVn = (int)(PCLK / (bps x 16) ) –1
or
UBRDIVn = (int)(UCLK / (bps x 16) ) –1
Where, the divisor should be from 1 to (216-1) and UCLK should be smaller than PCLK.
Register |
Address |
R/W |
Description |
Reset Value |
UBRDIV0 |
0x50000028 |
R/W |
Baud rate divisor register 0 |
– |
UBRDIV1 |
0x50004028 |
R/W |
Baud rate divisor register 1 |
– |
UBRDIV2 |
0x50008028 |
R/W |
Baud rate divisor register 2 |
– |
UBRDIVn
|
Bit |
Description |
Initial State |
UBRDIV |
[15:0] |
Baud rate division value UBRDIVn >0 |
– |
答: 根据UBRDIVn = (int)(PCLK / (bps x 16) ) –1
寄存器UBRDIV0= (int)(40000000/2400*16)-1=1040=10000010000(B)
寄存器UBRDIV1=( int)(40000000/115200*16)-1=20=10100(B)
8、 试写出μC/OS-II多任务程序框架结构C程序示意代码,要求至少包含两个任务,并为每个任务设计和分配堆栈,同时要求每个任务都有机会获得处理器运行。另外回答以下问题
(1) 在操作系统多任务调度策略中,什么是基于优先级的抢占式调度策略?在μC/OS-II中是如何防止最高优先级任务独占CPU的?
(2) μC/OS-II中每个任务都是死循环,如果最高优先级任务的这个死循环中出现了这样一句代码:“ for(;;); ”,试问会出现什么现象?为什么?如何防止?
参考答案:
代码框架
int Stack1[1024]; //定义将用于任务堆栈的数组
int Stack2[1024]; //定义将用于任务堆栈的数组
void Task1 (void *pdata)
{
for (;;)
{ … …
OSTimeDlyHMSM(0, 0, 4, 0); //等待
}
}
void Task2 (void *pdata)
{
for (;;)
{ … …
OSTimeDlyHMSM(0, 0, 4, 0); //等待
}
}
void main (void)
{
char* s1="Q"; //定义要显示的字符
char* s2="A"; //定义要显示的字符
OSInit(); //初始化uCOS_II
OSTaskCreate(Task1, //创建任务MyTask
s1, //给任务传递参数
& Stack1 [TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针
0); //使任务MyTask的优先级别为0
OSTaskCreate(Task2, //创建任务MyTask
s2, //给任务传递参数
& Stack2 [TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针
1); //使任务MyTask的优先级别为0
OSStart(); //启动uCOS_II的多任务管理
}
最高优先级任务中出现了for ( ; ; ) ; ,将出现死机,因为其他任务都无法剥夺该任务的CPU,而该任务陷入不会主动放弃CPU的死循环,解决办法就是规定除了空闲任务,每个任务在进入下一轮循环之前,必须主动调用延时函数或多或少的放弃CPU一定时间。