嵌入式助理工程师硬件试题

嵌入式硬件助理工程师认证考试试题题库

一、 选择题

1、以下说法不正确的是(B )。

A、任务可以有类型说明 B、任务可以返回一个数值 C、任务可以有形参变量 D、任务是一个无限循环

2、用图形点阵的方式显示一个16*16点阵汉字需要(B )字节。 A、8 B、32 C、16 D、64

3、下列描述不属于RISC计算机的特点的是(C)。 A.流水线每周期前进一步。 B.更多通用寄存器。

C.指令长度不固定,执行需要多个周期。

D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。

4、存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为( D)。 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。 6、RS232-C串口通信中,表示逻辑1的电平是(D )。 A、0v B、3.3v

C、+5v~+15v D、-5v~-15v

7、 ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是(A)。 A. R0 = R2 + (R3

D. (R3

8、IRQ中断的入口地址是( C)。

A、0x00000000 B、0x00000008 C、0x00000018 D、0x00000014 9、 S3C2420X I/O口常用的控制器是(D)。 (1)端口控制寄存器(GPACON-GPHCON)。

(2)端口数据寄存器(GPADAT-GPHDAT)。

(3)外部中断控制寄存器(EXTINTN)。 (4)以上都是。

10、实时操作系统中,两个任务并发执行,一个任务要等待其合作伙伴发来信息,或建立某个条件后再向前执行,这种制约性合作关系被成为(A)。 A. 同步 B. 互斥 C. 调度 D. 执行

11、和PC系统机相比嵌入式系统不具备以下哪个特点( C)。 A、系统内核小 C、可执行多任务

B、专用性强 D、系统精简

12、ADD R0,R1,#3属于(A)寻址方式。 A. 立即寻址

B. 多寄存器寻址 D. 相对寻址

C. 寄存器直接寻址

13、GET伪指令的含义是( A) A. 包含一个外部文件 C. 定义一个宏

B. 定义程序的入口

D. 声明一个变量

14、存储一个32位数0x876165到2000H~2003H四个字节单元中,若以小端模式存 储,则2000H存储单元的内容为( C)。 A、0x00 C、0x65

B、0x87 D、0x61

15、μCOS-II操作系统不属于( C)。 A、RTOS

B、占先式实时操作系统 D、嵌入式实时操作系统

C、非占先式实时操作系统

16、若R1=2000H,(2000H)=0x86,(2008H)=0x39,则执行指令LDR R0,[R1,#8]!后R0

的值为(D )。 A. 0x2000 C. 0x2008

B. 0x86 D. 0x39

17、寄存器R13除了可以做通用寄存器外,还可以做(C )。 A、程序计数器 C、栈指针寄存器

B、链接寄存器

D、基址寄存器

18、FIQ中断的入口地址是( A)。 A、0x0000001C C、0x00000018

B、0x00000008 D、0x00000014

19、ARM指令集和Thumb指令集分别是(D )位的。

A. 8位,16位 C. 16位,16位

B. 16位,32位 D. 32位,16位

20、ARM寄存器组有(D )个寄存器。 A、7 C、6

B、32 D、37

21、若R1=2000H,(2000H)=0x28,(2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0

的值为(D )。 A. 0x2000 C. 0x2008

B. 0x28

D. 0x87

22、寄存器R15除了可以做通用寄存器外,还可以做( A) A. 程序计数器

B. 链接寄存器

C. 堆栈指针寄存器 D. 基址寄存器

23、嵌入式系统有硬件和软件部分构成,以下(C)不属于嵌入式系统软件。 A. 系统软件 B. 驱动 C. FPGA编程软件 D. 嵌入式中间件 24、μCOS-II操作系统属于(B) A、顺序执行系统

B、占先式实时操作系统 D、分时操作系统

C、非占先式实时操作系统

25、ARM指令集是( B)位的。 A. 16 C. 8

B. 32 D. 24

26、假设R1=0x31,R2=0x2 则执行指令ADD R0,R1,R2 LSL #3 后,R0的值是( C) A. 0x33 C. 0x39

B. 0x34 D. 0x38

27、寄存器R13除了可以做通用寄存器外,还可以做( C) A、程序计数器 C、栈指针寄存器

B、链接寄存器

D、基址寄存器

28、ARM寄存器组有(C )个状态寄存器 A、7 C、6

B、32 D、37

29、和PC机系统相比下列哪个不是嵌入式系统独具的特点(C) A、系统内核小 C、可执行多任务

B、专用性强

D、系统精简

30、Unicode编码与(A)编码方式兼容。 A、ASCII码

B、GBK

C、GB2312 D、区位码

31、嵌入式系统有硬件和软件部分构成,以下(C)不属于嵌入式系统软件。 A. 系统软件 B. 驱动 C. FPGA编程软件 D. 嵌入式中间件

32、 Cache用于存放主存数据的部分拷贝,主存单元地址与Cache单元地址之间的转换用(A)完成。

A.硬件 B. 软件 C. 用户 D. 程序员

33、 在μC/OS-II系统中,OSTimeTick()函数只被以下(A)函数或过程所调用。 A. OSTickISR B. OSShed C. OSCtxSw D. OSIntCtxSw

34、 每种嵌入式操作系统都有自身的特点以吸引相关用户,下列说法错误的是(D)。 A. 嵌入式Linux提供了完善的网络技术支持;

B. CLinux是专门为没有MMU的ARM芯片开发的; C. C/OS-Ⅱ操作系统是一种实时操作系统(RTOS); D. WinCE提供完全开放的源代码。

35、下列关于存储管理单元(MMU)说法错误的是(B)。

A. MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。

B. 在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。

C. MMU提供了一些资源以允许使用虚拟存储器。

D. MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。

36、 下列CPSR寄存器标志位的作用说法错误的是(D)。 A. N:负数 B. Z: 零 C. C: 进位 D. V: 借位 37、 S3C2410X处理器为用户进行应用设计提供了支持多主总线的IIC接口。处理器提供符合IIC协议的设备连接的串行连接线为(C)。 A. SCL和RTX B. RTX和RCX C. SCL和SDA D. SDA和RCX 38、栈和队列的共同特点是 (C)。

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)。 A. 函数调用可以作为独立的语句存在 B. 函数调用可以作为一个函数的实参 C. 函数调用可以出现在表达式中 D. 函数调用可以作为一个函数的形参 41、 以下说法正确的是 (C)。

A. C语言程序总是从第一个的函数开始执行

B. 在C语言程序中,要调用函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行

D. C语言程序中的main()函数必须放在程序的开始部分 42、 寄存器R15用作( B )。 A. 栈指针寄存器 B. 程序计数器 C. 当前程序状态寄存器 D. 基地址寄存器 43、 IRQ中断的优先级别是( D )。 A. 1 B. 2 C. 3 D. 4

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、 在ARM处理器的各种模式中,大多数应用程序运行在(用户)模式,当一个高优先级

中断产生时会进入(快速中断)模式,在复位或软件软中断时进入(特权)模式。 9、 一个嵌入式系统结构有典型的四层组成,包括:硬件层、中间层、软件层 和功能层 。 10、 一个FAT文件系统卷有四部分组成,包括:保留区 、 FAT区 、 根目录 和 数

据区 。

11、 事件控制块ECB中OSEventType表示 事件类型 ,OSEventCnt表示 信号量计数器

(和信号量的值) 。

12、 串行通信方式有三中 单工 通信、 双工 通信和 半双工 通信。

13、 OSTaskSuspend (self)可把正在运行的任务 挂起(或等待) ,参数self指 任务

自身的优先级。用此函数挂起的任务可通过 OSTaskResume(self) 函数唤醒。 14、 如果信号量是用于表示打印机不忙,那么该信号量的初始值应设为 1 。 15、 若一个优先级为48的任务就绪,则在就绪表中,OSRdyTbl[]的 OSRdyTbl[6]的D0 置

位,变量OSRdyGrp的

D6 置位。

16、 Socket接口是TCP/IP网络的__ API ______,定义了许多函数或例程。常用的Socket

类型有两种为_流式(stream)__Socket和_数据报式(datagram)_Socket。其中_流式(stream)__Socket是面向连接的,_数据报式(datagram)_Socket是面向无连接的。 17、 调试程序时调入的文件最好为 Debug 版本下编译生成的.axf文件,该版本的文件包

含部分调试用到的信息。

18、 S3C44B0X使用 ARM7(或ARM7TDMI) 内核,工作频率为 66MHZ 。

19、 在图形操作系统中,字符通常有两种存储方式:一种是图形点阵(或点阵) 方式;一

种是 矢量图形(或矢量图) 方式。在嵌入式开发系统中使用的都是 图形点阵 方式。 20、 和信号量用数值表示不同,邮箱可以使一个任务向令一个任务发送一个 指针 型 21、 变量,该变量包含了特定消息的 数据结构 。

22、 S3C44B0提供_两个__个独立的异步串口,都可以运行于__中断 __模式或__ DMA ___

模式 。

23、 16、ARM处理器的两种工作状态为 ARM 状态和 Thmub 状态。

24、 17、USB家庭中有三位成员,即 主机(或host)、 设备(或device) 、集线器(或

Hub) 。

25、 ARM存储器有两种存储模式,即大端模式和小端模式。假设Y=0x46134存储在2000H~

2003H四个内存单元中,若以小端模式存储,则(2000H)=__0x34 __、(2001H)= 0x61 _、(2002H)=_0x04_、(2003H)=__0x00__。

26、 信号量有两种类型,分别为:二进制(或binary)型和记数器(或counter) 型。 27、 。

28、 某数码相机内置128MB的存储空间,拍摄分辨率设定为1600×1200像素,颜色为24

为,若不采用压缩技术,使用内部存储器最多可以存储(23)张照片,该相机最多支持(224)种色彩。

29、 对于8位二进制数,-7的反码和补码分别是(11111000)和(11111001)。 30、 在CPU的状态寄存器中,如果符号标志为“1”,表示运算结果为(负);如果进位标

识为“0”,表示(无进位或借位)。 三、 判断题

1、 程序运行过程中的资源可以是显示器、键盘,但不可以是一个数组或变量(X) 2、 21、在μCOS-II操作系统中,已知Task1的优先级为12,Task2的优先级为26。假如

在Task2运行过程中发生键盘中断,在执行中断服务程序时Task1进入就绪状态,则中断返回时Task1得到CPU的使用权。(√ )

3、 若定义任务task1的优先级为12,则不能再定义其他任务的优先级也为12(√ 4、 任务创建后即开始调度(X)

5、 液晶工作在文本模式下时,既可以显示英文字符也可以显示汉字(X)

6、 处于就绪状态的任务只能切换到运行状态(X)

7、 等待消息函数WaitMessage(0)中的“0”表示此函数的超时等待时间为0秒(X) 8、 若OSTaskSuspend (prio)函数把正在延时的任务挂起,则调用一次对应的唤醒函数即可

使该任务切换到就绪状态。(X)

9、 调试程序时,需要停止程序运行后才可查看变量内容(√ ) 10、 μCOS-II操作系统中移植成功后即可使用文件系统(X) 11、 将模拟信号转换成数字信号的电路是DA转换器。(×) 12、 IIC是同步串行数据总线,。(√)

13、 S3C2410的处理器对内存的访问只能通过Load/Store指令来实现。(√) 14、 Nand Flash比Nor Flash成本高,可靠性差。(×) 15、 C语言程序可以嵌套加入汇编程序模块。 ( √ )

16、 运算放大器的输出电压范围一般大于电源电压的范围。( × )

17、 由于CPU内部寄存器的访问速度较高,根据ATPC标准,应尽可能使函数的参数控制

在4个以下。( √ )

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分,共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空间做什么用?

答: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、什么是代码临界区,进、出代码临界应分别做什么?

答:代码的临界区也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。(2分)

为确保代码临界区的执行,在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断(在任务切换时,地址、指令、数据等寄存器堆栈保护)。(2分)

12、 简要叙述嵌入式系统开发流程。 参考答案及要点: 建立开发环境; 配置开发主机;

建立引导装载程序BOOTLOADER; 下载已经移植好的操作系统; 建立根文件系统; 开发应用程序。

13、 试简述常用的三极管放大电路和技术特点。

答:共射电路:具有较大的电压放大倍数和电流放大倍数,输入电阻和输出电阻适中。 共集电路:输入电阻大,输出电阻小,电压放大倍数小于1。 共基电路:输入电阻小,频率特性好。

14、 嵌入式系统的软件层次结构包括哪些部分?简单说明各部分的功能与作用。 答:驱动层程序、操作系统、应用程序接口和应用程序。 驱动层程序:为上层软件提供设备的操作接口。 操作系统:进程管理、进程间通信、内存管理等。

应用程序接口:复杂函数和数据结构的集合,简化应用程序的开发。 应用程序:实现用户功能。

五、 阅读程序题

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

(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

(0.5分

以原点为圆心,50为半径画圆

画笔移动到坐标(-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; ____ for(i=1;i

sum=sum+i; }

average=sum/10; _

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() ;//操作系统任务调度开始

5、ARM指令集的每一条指令都是4字节的,下面是一段中断入口程序,在空白处填上该中断的类型和中断向量。

ENTRY B B B B B

Startup

; ; ; ; ;

软中断,0x08

1分

UndefHandle SWIHandle

PAbtHandle DAbtHandle

数据中止,0x00000010

NOP; B B

; 系统保存未用,0x00000014 ; ;

IRQHandle FIQHandle

6、下面的程序描述了键盘消息的创建和使用过程,认真阅读并在划横线的地方添加适当的注释。

void Key_Scan_Task(void *Id)//按键扫描任务 {

U32 key; INT8U err; POSMSG pmsg; for (;;){

key=Zlg7289_ReadKey();

pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);

;//__

}

void Main_Task(void *Id) //接收键盘消息的任务 {

POSMSG pMsg=0;//创建消息结构 for(;;) {//死循环

pMsg=WaitMessage(0); //___发送消息 1分

switch(pMsg->Message){ //___判断消息的类型 1分

}

if(pmsg)

SendMessage(pmsg); //_创建消息

1分

case OSM_KEY://键盘消息

LCD_printf("To have key on !\n");//向液晶屏输出

}

}

break; }

7、三个任务代码如下,其中task1、task2、task3的优先级分别为:29、36,48。分析LCD上的显示结果。

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!

第二次:this is task2! 第三次:running task3! 第四次:running task3! 第五次:this is task2!

(1分) (1分) (1分) (1分) (1分)

第六次:task1 is running! (1分)

8、C语言程序

#include"..\ucos-ii\includes.h" /* uC/OS interface */ #include "..\ucos-ii\add\osaddition.h" #include "..\inc\drv.h" #include

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、 阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。 看门狗定时器控制寄存器(WTCON)

看门狗定时器数据寄存器(WTDAT)

#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)

// 第5行

rWTCNT = 7812; // 第6行 rWTCON |=(1

参考答案及要点:

第1-3 行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT和rWTCNT。(2分) 第4 行:设置看门狗的预装比例值为1000000,分频因素为1/128,并使能中断。(6分) 第5-6 行:对数据寄存器和计数寄存器赋值为7812。(2分) 第7 行:启动看门狗。(2分)

10、下面程序是多任务中信号量的典型应用,阅读程序,分别画出各个任务的程序流程图,并说明程序要实现的功能什么。

OS_EVENT *math_Sem;

int source,dest; math_Sem=OSSemCreate(0); void task1() {

for(;;){

source = 8;

} void task2()

{ U8 err;

for(;;){

OSSemPend(math_Sem,0,&err);

}

dest = source; source =0; }

OSSemPost(math_Sem);

}

答:功能:编写两个任务task1和task2实现要求的功能。设task2为较高的优先级,task1中给一个全局变量source赋值;task2中读取这个变量的值到另一个全局变量dest中,然后清零source变量。要求先赋值后读取。(3分)

流程图:(3分)

Task1的流程图 task2 的流程图

六、 应用实践题

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

void led_off(void) {

int i,nOut; nOut=0;

rGPFDAT = 0;

for(i=0;i

void led_on_off(void)

{

int i;

rGPFDAT=0;

for(i=0;i

rGPFDAT=0xF0;

for(i=0;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

16

答: 根据UBRDIVn = (int)(PCLK / (bps x 16) ) –1

寄存器UBRDIV0= (int)(40000000/2400*16)-1=1040=[1**********](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一定时间。

嵌入式硬件助理工程师认证考试试题题库

一、 选择题

1、以下说法不正确的是(B )。

A、任务可以有类型说明 B、任务可以返回一个数值 C、任务可以有形参变量 D、任务是一个无限循环

2、用图形点阵的方式显示一个16*16点阵汉字需要(B )字节。 A、8 B、32 C、16 D、64

3、下列描述不属于RISC计算机的特点的是(C)。 A.流水线每周期前进一步。 B.更多通用寄存器。

C.指令长度不固定,执行需要多个周期。

D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。

4、存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为( D)。 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。 6、RS232-C串口通信中,表示逻辑1的电平是(D )。 A、0v B、3.3v

C、+5v~+15v D、-5v~-15v

7、 ARM汇编语句“ADD R0, R2, R3, LSL#1”的作用是(A)。 A. R0 = R2 + (R3

D. (R3

8、IRQ中断的入口地址是( C)。

A、0x00000000 B、0x00000008 C、0x00000018 D、0x00000014 9、 S3C2420X I/O口常用的控制器是(D)。 (1)端口控制寄存器(GPACON-GPHCON)。

(2)端口数据寄存器(GPADAT-GPHDAT)。

(3)外部中断控制寄存器(EXTINTN)。 (4)以上都是。

10、实时操作系统中,两个任务并发执行,一个任务要等待其合作伙伴发来信息,或建立某个条件后再向前执行,这种制约性合作关系被成为(A)。 A. 同步 B. 互斥 C. 调度 D. 执行

11、和PC系统机相比嵌入式系统不具备以下哪个特点( C)。 A、系统内核小 C、可执行多任务

B、专用性强 D、系统精简

12、ADD R0,R1,#3属于(A)寻址方式。 A. 立即寻址

B. 多寄存器寻址 D. 相对寻址

C. 寄存器直接寻址

13、GET伪指令的含义是( A) A. 包含一个外部文件 C. 定义一个宏

B. 定义程序的入口

D. 声明一个变量

14、存储一个32位数0x876165到2000H~2003H四个字节单元中,若以小端模式存 储,则2000H存储单元的内容为( C)。 A、0x00 C、0x65

B、0x87 D、0x61

15、μCOS-II操作系统不属于( C)。 A、RTOS

B、占先式实时操作系统 D、嵌入式实时操作系统

C、非占先式实时操作系统

16、若R1=2000H,(2000H)=0x86,(2008H)=0x39,则执行指令LDR R0,[R1,#8]!后R0

的值为(D )。 A. 0x2000 C. 0x2008

B. 0x86 D. 0x39

17、寄存器R13除了可以做通用寄存器外,还可以做(C )。 A、程序计数器 C、栈指针寄存器

B、链接寄存器

D、基址寄存器

18、FIQ中断的入口地址是( A)。 A、0x0000001C C、0x00000018

B、0x00000008 D、0x00000014

19、ARM指令集和Thumb指令集分别是(D )位的。

A. 8位,16位 C. 16位,16位

B. 16位,32位 D. 32位,16位

20、ARM寄存器组有(D )个寄存器。 A、7 C、6

B、32 D、37

21、若R1=2000H,(2000H)=0x28,(2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0

的值为(D )。 A. 0x2000 C. 0x2008

B. 0x28

D. 0x87

22、寄存器R15除了可以做通用寄存器外,还可以做( A) A. 程序计数器

B. 链接寄存器

C. 堆栈指针寄存器 D. 基址寄存器

23、嵌入式系统有硬件和软件部分构成,以下(C)不属于嵌入式系统软件。 A. 系统软件 B. 驱动 C. FPGA编程软件 D. 嵌入式中间件 24、μCOS-II操作系统属于(B) A、顺序执行系统

B、占先式实时操作系统 D、分时操作系统

C、非占先式实时操作系统

25、ARM指令集是( B)位的。 A. 16 C. 8

B. 32 D. 24

26、假设R1=0x31,R2=0x2 则执行指令ADD R0,R1,R2 LSL #3 后,R0的值是( C) A. 0x33 C. 0x39

B. 0x34 D. 0x38

27、寄存器R13除了可以做通用寄存器外,还可以做( C) A、程序计数器 C、栈指针寄存器

B、链接寄存器

D、基址寄存器

28、ARM寄存器组有(C )个状态寄存器 A、7 C、6

B、32 D、37

29、和PC机系统相比下列哪个不是嵌入式系统独具的特点(C) A、系统内核小 C、可执行多任务

B、专用性强

D、系统精简

30、Unicode编码与(A)编码方式兼容。 A、ASCII码

B、GBK

C、GB2312 D、区位码

31、嵌入式系统有硬件和软件部分构成,以下(C)不属于嵌入式系统软件。 A. 系统软件 B. 驱动 C. FPGA编程软件 D. 嵌入式中间件

32、 Cache用于存放主存数据的部分拷贝,主存单元地址与Cache单元地址之间的转换用(A)完成。

A.硬件 B. 软件 C. 用户 D. 程序员

33、 在μC/OS-II系统中,OSTimeTick()函数只被以下(A)函数或过程所调用。 A. OSTickISR B. OSShed C. OSCtxSw D. OSIntCtxSw

34、 每种嵌入式操作系统都有自身的特点以吸引相关用户,下列说法错误的是(D)。 A. 嵌入式Linux提供了完善的网络技术支持;

B. CLinux是专门为没有MMU的ARM芯片开发的; C. C/OS-Ⅱ操作系统是一种实时操作系统(RTOS); D. WinCE提供完全开放的源代码。

35、下列关于存储管理单元(MMU)说法错误的是(B)。

A. MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。

B. 在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。

C. MMU提供了一些资源以允许使用虚拟存储器。

D. MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。

36、 下列CPSR寄存器标志位的作用说法错误的是(D)。 A. N:负数 B. Z: 零 C. C: 进位 D. V: 借位 37、 S3C2410X处理器为用户进行应用设计提供了支持多主总线的IIC接口。处理器提供符合IIC协议的设备连接的串行连接线为(C)。 A. SCL和RTX B. RTX和RCX C. SCL和SDA D. SDA和RCX 38、栈和队列的共同特点是 (C)。

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)。 A. 函数调用可以作为独立的语句存在 B. 函数调用可以作为一个函数的实参 C. 函数调用可以出现在表达式中 D. 函数调用可以作为一个函数的形参 41、 以下说法正确的是 (C)。

A. C语言程序总是从第一个的函数开始执行

B. 在C语言程序中,要调用函数必须在main()函数中定义 C. C语言程序总是从main()函数开始执行

D. C语言程序中的main()函数必须放在程序的开始部分 42、 寄存器R15用作( B )。 A. 栈指针寄存器 B. 程序计数器 C. 当前程序状态寄存器 D. 基地址寄存器 43、 IRQ中断的优先级别是( D )。 A. 1 B. 2 C. 3 D. 4

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、 在ARM处理器的各种模式中,大多数应用程序运行在(用户)模式,当一个高优先级

中断产生时会进入(快速中断)模式,在复位或软件软中断时进入(特权)模式。 9、 一个嵌入式系统结构有典型的四层组成,包括:硬件层、中间层、软件层 和功能层 。 10、 一个FAT文件系统卷有四部分组成,包括:保留区 、 FAT区 、 根目录 和 数

据区 。

11、 事件控制块ECB中OSEventType表示 事件类型 ,OSEventCnt表示 信号量计数器

(和信号量的值) 。

12、 串行通信方式有三中 单工 通信、 双工 通信和 半双工 通信。

13、 OSTaskSuspend (self)可把正在运行的任务 挂起(或等待) ,参数self指 任务

自身的优先级。用此函数挂起的任务可通过 OSTaskResume(self) 函数唤醒。 14、 如果信号量是用于表示打印机不忙,那么该信号量的初始值应设为 1 。 15、 若一个优先级为48的任务就绪,则在就绪表中,OSRdyTbl[]的 OSRdyTbl[6]的D0 置

位,变量OSRdyGrp的

D6 置位。

16、 Socket接口是TCP/IP网络的__ API ______,定义了许多函数或例程。常用的Socket

类型有两种为_流式(stream)__Socket和_数据报式(datagram)_Socket。其中_流式(stream)__Socket是面向连接的,_数据报式(datagram)_Socket是面向无连接的。 17、 调试程序时调入的文件最好为 Debug 版本下编译生成的.axf文件,该版本的文件包

含部分调试用到的信息。

18、 S3C44B0X使用 ARM7(或ARM7TDMI) 内核,工作频率为 66MHZ 。

19、 在图形操作系统中,字符通常有两种存储方式:一种是图形点阵(或点阵) 方式;一

种是 矢量图形(或矢量图) 方式。在嵌入式开发系统中使用的都是 图形点阵 方式。 20、 和信号量用数值表示不同,邮箱可以使一个任务向令一个任务发送一个 指针 型 21、 变量,该变量包含了特定消息的 数据结构 。

22、 S3C44B0提供_两个__个独立的异步串口,都可以运行于__中断 __模式或__ DMA ___

模式 。

23、 16、ARM处理器的两种工作状态为 ARM 状态和 Thmub 状态。

24、 17、USB家庭中有三位成员,即 主机(或host)、 设备(或device) 、集线器(或

Hub) 。

25、 ARM存储器有两种存储模式,即大端模式和小端模式。假设Y=0x46134存储在2000H~

2003H四个内存单元中,若以小端模式存储,则(2000H)=__0x34 __、(2001H)= 0x61 _、(2002H)=_0x04_、(2003H)=__0x00__。

26、 信号量有两种类型,分别为:二进制(或binary)型和记数器(或counter) 型。 27、 。

28、 某数码相机内置128MB的存储空间,拍摄分辨率设定为1600×1200像素,颜色为24

为,若不采用压缩技术,使用内部存储器最多可以存储(23)张照片,该相机最多支持(224)种色彩。

29、 对于8位二进制数,-7的反码和补码分别是(11111000)和(11111001)。 30、 在CPU的状态寄存器中,如果符号标志为“1”,表示运算结果为(负);如果进位标

识为“0”,表示(无进位或借位)。 三、 判断题

1、 程序运行过程中的资源可以是显示器、键盘,但不可以是一个数组或变量(X) 2、 21、在μCOS-II操作系统中,已知Task1的优先级为12,Task2的优先级为26。假如

在Task2运行过程中发生键盘中断,在执行中断服务程序时Task1进入就绪状态,则中断返回时Task1得到CPU的使用权。(√ )

3、 若定义任务task1的优先级为12,则不能再定义其他任务的优先级也为12(√ 4、 任务创建后即开始调度(X)

5、 液晶工作在文本模式下时,既可以显示英文字符也可以显示汉字(X)

6、 处于就绪状态的任务只能切换到运行状态(X)

7、 等待消息函数WaitMessage(0)中的“0”表示此函数的超时等待时间为0秒(X) 8、 若OSTaskSuspend (prio)函数把正在延时的任务挂起,则调用一次对应的唤醒函数即可

使该任务切换到就绪状态。(X)

9、 调试程序时,需要停止程序运行后才可查看变量内容(√ ) 10、 μCOS-II操作系统中移植成功后即可使用文件系统(X) 11、 将模拟信号转换成数字信号的电路是DA转换器。(×) 12、 IIC是同步串行数据总线,。(√)

13、 S3C2410的处理器对内存的访问只能通过Load/Store指令来实现。(√) 14、 Nand Flash比Nor Flash成本高,可靠性差。(×) 15、 C语言程序可以嵌套加入汇编程序模块。 ( √ )

16、 运算放大器的输出电压范围一般大于电源电压的范围。( × )

17、 由于CPU内部寄存器的访问速度较高,根据ATPC标准,应尽可能使函数的参数控制

在4个以下。( √ )

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分,共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空间做什么用?

答: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、什么是代码临界区,进、出代码临界应分别做什么?

答:代码的临界区也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。(2分)

为确保代码临界区的执行,在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断(在任务切换时,地址、指令、数据等寄存器堆栈保护)。(2分)

12、 简要叙述嵌入式系统开发流程。 参考答案及要点: 建立开发环境; 配置开发主机;

建立引导装载程序BOOTLOADER; 下载已经移植好的操作系统; 建立根文件系统; 开发应用程序。

13、 试简述常用的三极管放大电路和技术特点。

答:共射电路:具有较大的电压放大倍数和电流放大倍数,输入电阻和输出电阻适中。 共集电路:输入电阻大,输出电阻小,电压放大倍数小于1。 共基电路:输入电阻小,频率特性好。

14、 嵌入式系统的软件层次结构包括哪些部分?简单说明各部分的功能与作用。 答:驱动层程序、操作系统、应用程序接口和应用程序。 驱动层程序:为上层软件提供设备的操作接口。 操作系统:进程管理、进程间通信、内存管理等。

应用程序接口:复杂函数和数据结构的集合,简化应用程序的开发。 应用程序:实现用户功能。

五、 阅读程序题

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

(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

(0.5分

以原点为圆心,50为半径画圆

画笔移动到坐标(-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; ____ for(i=1;i

sum=sum+i; }

average=sum/10; _

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() ;//操作系统任务调度开始

5、ARM指令集的每一条指令都是4字节的,下面是一段中断入口程序,在空白处填上该中断的类型和中断向量。

ENTRY B B B B B

Startup

; ; ; ; ;

软中断,0x08

1分

UndefHandle SWIHandle

PAbtHandle DAbtHandle

数据中止,0x00000010

NOP; B B

; 系统保存未用,0x00000014 ; ;

IRQHandle FIQHandle

6、下面的程序描述了键盘消息的创建和使用过程,认真阅读并在划横线的地方添加适当的注释。

void Key_Scan_Task(void *Id)//按键扫描任务 {

U32 key; INT8U err; POSMSG pmsg; for (;;){

key=Zlg7289_ReadKey();

pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);

;//__

}

void Main_Task(void *Id) //接收键盘消息的任务 {

POSMSG pMsg=0;//创建消息结构 for(;;) {//死循环

pMsg=WaitMessage(0); //___发送消息 1分

switch(pMsg->Message){ //___判断消息的类型 1分

}

if(pmsg)

SendMessage(pmsg); //_创建消息

1分

case OSM_KEY://键盘消息

LCD_printf("To have key on !\n");//向液晶屏输出

}

}

break; }

7、三个任务代码如下,其中task1、task2、task3的优先级分别为:29、36,48。分析LCD上的显示结果。

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!

第二次:this is task2! 第三次:running task3! 第四次:running task3! 第五次:this is task2!

(1分) (1分) (1分) (1分) (1分)

第六次:task1 is running! (1分)

8、C语言程序

#include"..\ucos-ii\includes.h" /* uC/OS interface */ #include "..\ucos-ii\add\osaddition.h" #include "..\inc\drv.h" #include

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、 阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。 看门狗定时器控制寄存器(WTCON)

看门狗定时器数据寄存器(WTDAT)

#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)

// 第5行

rWTCNT = 7812; // 第6行 rWTCON |=(1

参考答案及要点:

第1-3 行:定义看门狗控制寄存器、数据寄存器和计数寄存器为rWTCON、rWTDAT和rWTCNT。(2分) 第4 行:设置看门狗的预装比例值为1000000,分频因素为1/128,并使能中断。(6分) 第5-6 行:对数据寄存器和计数寄存器赋值为7812。(2分) 第7 行:启动看门狗。(2分)

10、下面程序是多任务中信号量的典型应用,阅读程序,分别画出各个任务的程序流程图,并说明程序要实现的功能什么。

OS_EVENT *math_Sem;

int source,dest; math_Sem=OSSemCreate(0); void task1() {

for(;;){

source = 8;

} void task2()

{ U8 err;

for(;;){

OSSemPend(math_Sem,0,&err);

}

dest = source; source =0; }

OSSemPost(math_Sem);

}

答:功能:编写两个任务task1和task2实现要求的功能。设task2为较高的优先级,task1中给一个全局变量source赋值;task2中读取这个变量的值到另一个全局变量dest中,然后清零source变量。要求先赋值后读取。(3分)

流程图:(3分)

Task1的流程图 task2 的流程图

六、 应用实践题

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

void led_off(void) {

int i,nOut; nOut=0;

rGPFDAT = 0;

for(i=0;i

void led_on_off(void)

{

int i;

rGPFDAT=0;

for(i=0;i

rGPFDAT=0xF0;

for(i=0;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

16

答: 根据UBRDIVn = (int)(PCLK / (bps x 16) ) –1

寄存器UBRDIV0= (int)(40000000/2400*16)-1=1040=[1**********](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一定时间。


相关内容

  • 江苏省2015职业学校技能大赛信息技术类方案
  • 2015年江苏省职业学校技能大赛 信息技术类项目实施方案 一.竞赛项目及内容 (一)竞赛项目 本次竞赛设移动互联与物联网技术.网络搭建及应用.网络综合布线技术.电子商务技术.智能家居安装维护.动画片制作.计算机辅助设计(工业产品CAD).数字影音后期制作技术八个项目,分为中职学生组.高职学生组和教师 ...

  • 2016年计算机软件水平(软考)考试题答案
  • 2016年软考考试题答案抠 [3751,6206] bao.过 计算机软件水平考试(软考) 简介 计算机技术与软件专业技术资格(水平)考试(以下简称"软考")是原中国计算机软件专业技术资格和水平考试(简称"软件考试")的完善与发展.这是由国家人事和劳动保障部. ...

  • 企业职位分类大全
  • 企业职位分类大全 (2011-09-08 20:49:08) 市场营销类 销售总监 销售经理 区域销售经理 销售主管 销售工程师 销售代表 销售助理 医药销售代表 电话销售 渠道/分销管理 渠道/分销专员 经销商 客户经理/主管 客户代表 其他 市场/市场拓展/公关 市场总监/经理/主管市场营销经理 ...

  • 嵌入式试题及答案
  • <嵌入式开发>期中试卷 试卷适用范围:2011级计算机科学与技术(本)1.2班 一.填空题(每空1分,共46分) 习 题 1 1.填空题 (1)嵌入式系统是以应用为中心.以 计算机技术 为基础,软.硬件可裁剪,适应于应用系统对功能.可靠性.成本.体积.功耗等方面有特殊要求的专用计算机系统 ...

  • 计算机技术与软件专业技术资格(水平)考试
  • 计算机技术与软件专业技术资格(水平)考试 计算机技术与软件专业技术资格(水平)考试(以下简 称计算机软件考试)是原中国计算机软件专业技术资格 和水平考试(简称软件考试)的完善与发展.这是由国 家人事部(已改为:人力资源和社会保障部)和信息产业 部(已改为:工业和信息化部)领导下的国家级考试, 其目的 ...

  • 计算机软件水平考试相关知识报告
  • 1.计算机技术与软件专业技术资格(水平)考试什么时候开始报名?报名时需要办理哪些手续? 报名时间一般为考前2-3个月左右(分别是2月下旬和8月下旬),上半年考试时间为5月底(第三个周六.周日),下半年考试时间为11月中旬(第二个周六.周日). 在当地考试机构指定的报名点,按当地标准交纳报名考试费,带 ...

  • 就业需要具备的能力
  • 华为 上海雅绿霈贸易有限公司 职位描述: 岗位职责 1.电子产品的设计.调试.组装: 2.负责提供硬件技术支持: 3.电子元件的采购和管理,电路板的焊接: 4.协助系统工程师对各项目的试产后的测试验证.改善等工作. 5.与相关人员沟通配合,与团队中其他成员交流相关信息. 任职资格 1.计算机.电子通 ...

  • 华为硬件工程师面试题
  • DSP.嵌入式.软件等 1.请用方框图描述一个你熟悉的实用数字信号处理系统,并做简要的分析:如果没有,也可以自己设计一个简单的数字信号处理系统,并描述其功能及用途.(仕兰微面试题目) 2.数字滤波器的分类和结构特点.(仕兰微面试题目) 3.IIR,FIR滤波器的异同.(新太硬件面题) 4.拉氏变换与 ...

  • 人力资源管理常用英语词汇大全
  • 人力资源管理词汇大全 第一章 中英文职位对照 1.高层管理 Senior Management 首席执行官|总裁|总经理 Chief Executive Officer/President/GM 首席运营官 Chief Operation Officer 副总经理|副总裁 Vice General ...