搜索
您的当前位置:首页正文

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

来源:哗拓教育
嵌入式硬件助理工程师认证考试试题题库

选择题

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

A、任务可以有类型说明 C任务可B、任务可以返回一个数值 以有形参变量

2、 用图形点阵的方式显示一个 A、 8 C、 16

D、任务是一个无限循环

16*16 点阵汉字需要( B )字节。

B、 32 D、 64

3、 列描述不属于 RISC 计算机的特点的是( C)。

A .流水线每周期前进一步 B •更多通用寄存器。

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

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

4、 存储一个32位数0x2168465到2000H〜2003H四个字节单元中,若以大端模式存储,则

2000H存储单元的内容为(D )。 A、 0x21 C、

B、 0x68 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

C、+ 5v〜+ 15v

7、 ARM 汇编语句 “ADD R0,

B、 3.3v

D、- 5v〜- 15v

R2, R3, LSL#1”的作用是(A )。

A. R0 = R2 + (R3 << 1) B. R0 =( R2<< 1) + R3 C. R3= R0+ (R2 << 1) D. (R3 << 1)= R0+ R2

8、IRQ中断的入口地址是( A、 0x00000000 C、 0x00000018

C)。

B、

0x00000008 D、

1)端口控制寄存器( GPACON-GPHCON )。

2)端口数据寄存器( GPADA T-GPHDAT )。 (3)外部中断控制寄存器( EXTINTN )。 (4)以上都是。

10、实时操作系统中, 两个任务并发执行,一个任务要等待其合作伙伴发来信息, 个条件后再向前执行,这种制约性合作关系被成为( A)。

A. 同步 B. 互斥 C. 调度 D. 执行

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

D、系统精简

12、 ADD R0 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 ,#

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

17、

寄存器R13除了可以做通用寄存器外,还可以做( C )。

A、程序计数器 B链接寄存器 C栈指针寄存器

D 、基址寄存器

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

B、 0x00000008

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

或建立某 8] !后 R0

A. 8 位, 16 位 B. 16 位, 32 位

C. 16 位, 16 位 D. 32 位, 16 位 20 、ARM寄存器组有(D )个寄存器。 A、 7 C、 6

B、 32 D、 37

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

( D )。 A. 0x2000

B. 0x28

A)

C. 0x2008 D. 0x87 22 、寄存器 R 1 5除了可以做通用寄存器外,还可以做( A. 程序计数器

B. 链接寄存器

C. 堆栈指针寄存器 D. 基址寄存器 23 、嵌入式系统有硬件和软件部分构成,以下( C)不属于嵌入式系统软件。 A. 系统软件 B. 驱动 C. FPGA 编程软件 24 、卩COS-II操作系统属于(B) A、顺序执行系统

C非占先式实时操作系统 25 、ARM指令集是(B)位的。 A. 16 C. 8

D. 嵌入式中间件

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

B. 32 D. 24

26、假设 R1=0x31, R2=0x2 贝U执行指令 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 C、 6

B、 32 D、 37

C)

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

D 、系统精简

30、Uni code编码与(A)编码方式兼容。 A、 ASCII 码 B 、 GBK

C GB2312 A.系统软件 (A)完成。 A .硬件

B.软件 B.驱动

D区位码

C. FPGA编程软件

D.嵌入式中间件

Cache单元地址之间的转换用

31、 嵌入式系统有硬件和软件部分构成,以下( C)不属于嵌入式系统软件。 32、 Cache用于存放主存数据的部分拷贝,主存单元地址与

C.用户

D.程序员

D. OSI ntCtxSw

D )。

33、 在卩C/OSI系统中,OSTimeTick ()函数只被以下(A)函数或过程所调用。 A. OSTickISR B. OSShed C. OSCtxSw

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

・CLinux是专门为没有 MMU的ARM芯片开发的; C. ・C/OS- H操作系统是一种实时操作系统( RTOS);

B.

D. WinCE提供完全开放的源代码。

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

A. MMU提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间 中运行。 B. 在带MMU的操作系统控制下,运行的任务必须知道其他与之无关的任务的存储需求情 况,这就简化了各个任务的设计。

C. MMU提供了一些资源以允许使用虚拟存储器。 D. MMU作为转换器,将程序和数据的虚拟地址 址,即在物理主存中的地址。

36、 下列CPSR寄存器标志位的作用说法错误的是( A. N :负数 B. Z:零 C. C:进位 D. V:借位

37、 S3C2410X处理器为用户进行应用设计提供了支持多主总线的 IIC接口。处理器提供符 合IIC协议的设备连接的串行连接线为( A. SCL 和 RTX C. SCL 和 SDA

38、 栈和队列的共同特点是 A.都是先进先出B.

C.只允许在端点处插入和删除元素 39、 有如下程序

main () {

int x=1,a=0,b=0; switch (x) {

C)。

B. RTX 和 RCX D. SDA 和 RCX (C)。

B.都是先进后出 D.没有共同点

D)。

(编译时的连接地址) 转换成实际的物理地

case 1: a++;

case 2: a++;b++;

printf (\"a=%d,b=%d \\n\)

}

该程序的输出结果是 (A )。

A.a=2 ,b=1 B.a=1,b=1

C.a=1,b=0

D.a=2,b=2

40、 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 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.间接寻址 45S3C2410 有( B )个 USB 接口。

、A. 1

B. 2

C.3 D. 4 46ARM处理器的工作模式有( C

)种。

、A. 5 B.6

C. 7 D.8

填空题:

1、 串行通信方式有二中

单工 通信、 双工 通信和半双工

2、 填写卩C/OSI中任务创建函数 OSTaskCreate()的四个参数的含义:OSTaskCreate(

D )。

通信。

MyTask, // (任务的函数指针) (void *)s, II (传给任务函数的参数) &TaskStartStk[TASK_STK_SIZE - 1], II 0 );°

3、 ARM7旨令系统采用三级流水线指令,分别包括:取指、译码和执行。 ___ 4、 TCPIIP在多个层引入了安全机制,其中

TLS协议位于(传输)层。

II (任务的优先级号) (任务的堆栈指针) 5、 OSTaskSuspend (self) 可把正在运行的任务挂起(或等待) ,参数self指任务自身的优

先级。用此函数挂起的任务可通过 6、 下列程序的输出结果是

maim ()

{ char b □ =\"Hello you\"; b :5] =0;

printf (\"%s、n\) ; }

7、 有数组定义 int a[2][2]={{1},{2,3}}; 则 a[0][1]的值为(_0_)°

OSTaskResume(self)函数唤醒。

(“ Hello)。

8、 在ARM处理器的各种模式中,大多数应用程序运行在(用户)空式,当一个高优先级

中断产生时会进入(快速中断)模式,在复位或软件软中断时进入(特权)模式。 9、 一个嵌入式系统结构有典型的四层组成,

包括:硬件层、中间层、软件层 和功能层 。

10、 一个FAT文件系统卷有四部分组成,包括:保留 _______ 、FAT区、根目录 和 数 据区。 11、 事件控制块ECB中OSEventType表示事件类型,OSEventCnt表示信号量计数器

(和信号量的值) 。 12、 串行通信方式有三中

单工通信、双工通信禾口

半双工通信。

,参数self 指 任务

13、 OSTaskSuspend (self) 可把正在运行的任务

自身的优先级。用此函数挂起的任务可通过

挂起(或等待) OSTaskResume(self) 函数唤醒。

_J ______ 。

14、 如果信号量是用于表示打印机不忙,那么该信号量的初始值应设为

15、 若一个优先级为 48的任务就绪,则在就绪表中,OSRdyTbl[]的OSRdyTbl[6]的D0置 位,变

量OSRdyGrp的 D6置位。

16、 Socket接口是TCPIIP网络的 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家庭中有三位成员,即

Hub) 。

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

2003H四个内存单元中, 若以小端模式存储,贝U ( 2000H) = __0x34__、(2001H) = 0x61 _、( 2002H)= _0x04_、(2003H)= __0x00__。 26、 信号量有两种类型,分别为:二进制(或 bi nary )型和记数器(或 cou nter ) 型。

1600 >1200像素,颜色为24 .23)张照片,该相机最多支持

主机(或 host)、 设备(或 device ) 、集线器(或

27、 影响流水线性能的因素有(互锁)和(跳转指令)

28、 某数码相机内置128MB的存储空间,拍摄分辨率设定为

为,若不采用压缩技术,使用内部存储器最多可以存储( ()种色彩。

29、 对于8位二进制数,—7的反码和补码分别是(11111000)和(11111001)。

30、 在CPU的状态寄存器中,如果符号标志为 “ 1”表示运算结果为(负);如果进位标

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

1、 程序运行过程中的资源可以是显示器、键盘,但不可以是一个数组或变量(

X)

2、 21、在卩COS-II操作系统中,已知 Task1的优先级为12, Task2的优先级为26。假如 在

Task2运行过程中发生键盘中断,在执行中断服务程序时 返回时Task1得到CPU的使用权。(V )

Task1进入就绪状态,则中 断

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

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

X)

12 (V )

7、等待消息函数 WaitMessage (0)中的“ 0”表示此函数的超时等待时间为 8、 若 OSTaskSuspend(prio) 函数把正在延时的任务挂起,

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

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

13、 S3C2410的处理器对内存的访问只能通过

Load/Store指令来实现。(V) DA转换器。(X)

X)

)

0秒(X)

则调用一次对应的唤醒函数即可

14、 Nand Flash 比 Nor Flash 成本高,可靠性差。 (X) 15、 C 语言程序可以嵌套加入汇编程序模块。

( V )

( X )

16、 运算放大器的输出电压范围一般大于电源电压的范围。 17、 由于CPU内部寄存器的访问速度较高,根据

在 4 个以下。(

V )

ATPC标准,应尽可能使函数的参数控制

18、 ARMi理器结构体系中具有 T变种处理器核可以工作在 ARM犬态和Thumb犬态。(V ) 四、 简答题

1、 ARM 微处理器的编程模型是指 ARM 微处理器的基本工作原理和一些与程序设计相关 的基本技术细节, ARM 编程模型主要有哪五个方面?主要是指什么内容? 答案要点 :

ARM微处理器的工作状态: ARM犬态、Thumb状态 ARM 体系结构的存储器格式:大端格式、小端格式 ARM 微处理器的工作模式: 7 种运行模式

ARM 体系结构的寄存器组织: 37个32位寄存器,其中 31 个为通用寄存器, 6个为犬态寄 存器,哪些寄存器是可编程访问的,取决微处理器的工作犬态及具体的运行模式。 ARM 微处理器的异常犬态: 7种异常

2、画图说明卩COS-II操作系统各状态之间是如何切换的,并举出至少一个相应的切换条

件或函数。 答:

OsTaskDel()

OsSemPost() OsMboxPost() OsQPost()

OsQPostFro nt() OsTaskResume() OsTimeDlyResume() OsTimeTick()

OsSemPe nd() OsMboxPe nd() OsQPe nd()

OsTaskSupe nd() OsTimeDly()

OsTimeDlyHmsm()

OsTaskCreat() OsTaskCreatExt OsTaskDel()

OsStart() OsI ntExit()

()O/就绪)、,一s_Task_Sw()运行 任务被占先_/\"、

中断 OsI ntExit()

中断 服务

__________ OsTaskDel() 带箭头各任务间切换图正确,得

1分;

切换条件每三个得1分,共3分,每种切换能举出一个正确条件或函数即可。

3、什么是卩COS-II操作系统的时钟节拍? 答:时钟节拍是特定的周期性中断。 的时间间隔取决于不同的应用,一般在

(1分)这个中断可以看作是系统心脏的脉动。中断间

10ms〜200ms之间。(1分)时钟的节拍式中断使得

内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的 依据。(1分)时钟节拍率越快,系统的额外开销就越大。

(1分)

4、ARM处理器有几种工作模式?并做说明每种工作模式的含义。 答:ARM处理器有7种工作模式: 用户模式(usr)-

正常程序执行的模式

异常响应时进入此模式

0.5分 0.5分 0.5分 0.5分

0.5分 0.5分 0.5分

快速中断模式(fiq)- FIQ 中断模式(irq)- IRQ 管理员模式(svc)- 中止模式(abt)-

异常响应时进入此模式

系统复位和软件中断响应时进入此模式

用于虚拟存储及存储保护

系统模式(sys)-与用户类似,但有直接切换到其它模式等特权 未定义模式(und)-未定义指令异常响应时进入此模式

除了用户模式外,其他模式均可视为特权模式 间??

0.5分

5、什么是操作系统? 操作系统在“硬件、操作系统、应用程序、硬件驱动”四者中,处 于哪两层之答:操作系统是计算机中最基本的程序。操作系统负责计算机系统中全部软硬件资源的分 配与回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作 环境;操作系统为用户扩展新的系统提供软件平台。

操作系统处于应用程序和硬件驱动之间。 (1 分)

6、什么是嵌入式系统?分别从狭义和广义两方面说明。 答:从广义上说,凡是与产品结合在一起具有嵌入式特点的控制系统都可以叫嵌入式系统 如电子表、超声波测距仪等职能仪表,常见 杂的便携式电子设备,如手机、掌上电脑、 分)

7、 简述任务切换的过程。

答:当多任务内核决定运行另外的任务时,它保存正在运行任务的当前状态,即

CPU寄存

器中的全部内容。 ( 1 分)这些内容保存在任务的当前状态保存区,也就是任务自己的堆 栈中。( 1 分)入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的堆栈 中重新装入CPU的寄存器,并开始下一个任务的运行。这个过程就称为任务切换。(1分) 做任务切换所需要的时间取决于

CPU有多少寄存器要入栈。(1分)

CPU为MCS51系列芯片。(2分)

功能较复

MP4等,常见CPU为ARM DSP SOC等。(2

从狭义上说, 嵌入式系统是指而嵌入式系统一般指在开发时移植了操作系统,

(3 分)

8、 S3C44B0的存储系统中,OxcOOOOOO和0xc080000的含义是什么?它们之间的 512kbyte 空间做什么用?

答:OxCOOOOOO是SDRAM的起始地址,系统的程序存储空间从 0xC080000开始。(2分) 512Kbyte的空间划分出来,作为系统的 更新LCD的显示)。(2分)

9、简述你对嵌入式和嵌入式系统的理解?

答:凡是使用了 CPU的便携式电子设备都可以叫嵌入式, 能较复杂的便携式电子设备, DSP SOC等)。( 2 分) 10、嵌入式设计流程? 答: 1)系统需求分析

2) 体系结构设计 3) 硬件 / 软件协同设计 4) 系统集成

5) 系统测试 (每点约 1 分,酌情错 2 点,扣 1 分)

11、什么是代码临界区,进、出代码临界应分别做什么?

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

LCD显示缓冲区使用(更新其中的数据,就可以

(如电子表、超声波测距仪等职能

仪表,常见CPU为MCS51系列芯片)(2分)。而嵌入式系统一般指在开发时移植了操作 系统,功

(如手机、掌上电脑、 MP4等,常见CPU为ARM

为确保代码临界区的执行, 在进入临界区之前要关中断, 而临界区代码执行完以后要立 即开中断(在任务切换时,地址、指令、数据等寄存器堆栈保护) 。(2 分) 12、 简要叙述嵌入式系统开发流程。 参考答案及要点: 建立开发环境; 配置开发主机;

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

13、 试简述常用的三极管放大电路和技术特点。 答:共射电路:具有较大的电压放大倍数和电流放大倍数,输入电阻和输出电阻适中。

共集电路:输入电阻大,输出电阻小,电压放大倍数小于 共基电路:输入电阻小,频率特性好。

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--;

}

1。

q->k=i;

for(i=0;i<5;i++)printf(\"%d\); printf(\"\\n\");

}

(1) i、 p、 struct NODE 和 m 的分别占据多少字节的内存空间?( 4 分) (2) p 和 q 指针初始指向的地址相差多少字节?( 4 分) (3)程序运行后的输出结果是什么?( 参考答案及要点 : (1) (2)

i、 p、 struct NODE 和 m 的分别占据 4 字节、 4 字节、 8 字节和 40 字节的内存空间。

p 和 q 指针初始指向的地址相差 32 字节 4 分)

(3) 程序运行后的输出结果 13431。

2、在分辨率为320x240的LCD上,执行完下列程序后,画出在 线处添加注释。

void Main_Task(void *Id) { int oldx,oldy;

LCD上显示的图形并在划横

答: 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)至U( 50,-50)画直线 (0.5分) 从当前坐标开始以 30为半径顺时针画圆弧到坐标(80,-20 )

(0.5 分)

3、在划线处添加代码,完成下面的程序,实现在 taskl中计算1到10的平均值,完成后 向task2发送

信号量。Task2无限期等待信号量,等到后在

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(;;)

LCD上显示收到平均值。

{ - OSSemPe nd(math_Sem ,0,& err);_ : LCD_printf(\"we get the average ___ OSTimeDly(100);__ ; ! \\n\");

}

}

4、在划横线处添加代码,完成下面创建一个任务的过程,要求优先级为 256。

OS_STK task1_Stack [256]={0,}; void task1 (void *ld); #defi ne task1_Prio 36 OSI nit() ; // 操作系统初始化

_____

36,任务栈大小为

OSTaskCreate (task1,(void *)0,(OS_STK *)&task1_Stack[256-1],task1_Prio); OSStart() ;//操作系统任务调度开始

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

量。

ENTRY

B B B B B NOP; B

Startup Un defHa ndle SWIHa ndle PAbtHa ndle DAbtHa ndle

; ; ; ; ; ;

复位中断,0x00

1分

1分

未定义指令中断,0x04 软中断,0x08

1分 1分

预取中止,0x0C 数据中止,0x00000010

系统保存未用,0x00000014

IRQHa ndle FIQHa ndle

; ;

IRQ 中断,0x18

1分 1分

B

快速中断,0x1C

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

void Key_Scan_Task(void *ld)// 按键扫描任务 { U32 key;

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

OSMboxPe nd(Key_MailBox, 0, &err); // 请求键盘邮箱 1 分 key=Zlg7289_ReadKey(); pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);

;// _请求到表示有键按下的邮箱 1分

if(pmsg)

Sen dMessage(pmsg); //_创建消息 } }

void Main_Task(void *Id)

//接收键盘消息的任务

{ POSMSG pMsg=0;〃创建消息结构

for(;;) {//死循环

pMsg=WaitMessage(O); // 发送消息 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。分析上的显示结果。

Void task1 () {

ClearScree n(); LCD_Printf(

“task1 is running!\\n

” );

OSTimeDly(5OO); }

Void task2 () {

ClearScree n();

1 分 LCD LCD_Pri ntf( “ this is task2!\\n OSTimeDly(350); }

Void task3 () { ClearScree n();

LCD_Printf( “ running task3!\\n ” );

);

OSTimeDly(200); }

8、C语言程序

#in clude\"..\ii\\in cludes.h\" #in clude \"..\ii\\add\\osadditi on.h\" #i nclude \"..\\i nc\\drv.h\" #in clude

OS_STK Main_Stack[STACKSIZE*8]={0, }; void Main_Task(void *Id); #defi ne Main_Task_Prio 12 OS_EVENT *Na nd_Rw_Sem; OS_EVENT *Uart_Rw_Sem; int mai n(void) {

ARMTargetInit(); //开发板初始化 OSI nit();

uHALr_ResetMMU();〃 复位 MMU LCD_Init();

//初始化 LCD 模块

LCD_printf(\"LCD initialization is OK\\n\");〃LCD_pri ntf(\"320 x 240

Text Mode\\n\");

initOSGUI();〃初始化图形界面

在LCD上的显示结果为: 第一次: taskl is running! (1

第二(1

次: this is task2! 分)

第三(1

次: running task3! 分)

第四(1

次: running task3! 分)

第五(1

次: this is task2! 分)

第六(1次: taskl is running!

分) LoadFont();〃 调 Unicode 字库

/* uC/OS in terface */

〃1) 定义并初始化堆栈(数组)// 2) 定义任务优先级 〃3)

定义信号量 _____________

〃4)

操作系统初始化

向液晶屏输出数据

LoadConfigSys();〃使用config.sys文件配置系统设置 LCD_printf(\"Create task on uCOS-ll...\\n\");

OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_Stack[STACKSIZE*8-1], Main_Task_Prio);

OSAddTask_Init();〃创建系统附加任务 LCD_pri ntf(\"Starti ng uCOS-II...\\n\"); LCD_pri ntf(\"E nteri ng graph mode...\\n\");

LCD_ChangeMode(DspGraMode);// 变 LCD 显示模式为文本模式 InitRtc();//初始化系统时钟

Nand_Rw_Sem=OSSemCreate(1); // 6) 创建信号量,初值为1 ,满足互斥条件 OSStart(); 〃7) return 0; }

操作系统任务调度开始 ___________________

〃5) _____ 创建系统任务 _____________

9、阅读下列与看门狗有关的寄存器描述,解释每一行代码的功能。 看门狗定时器控制寄存器(WTCON)

寄存 器 地 址 读/写 描 述 初始值

WTCON 0x53000000 读/写 看门狗定控制寄存器 0x8021 WTCON的标识位

WTCON Prescaler Value Reserved Bit [15:8] [7:6] 描 述 0〜255 初始值 0x80 00 预装比例值,有效范围值为 保留 使能和禁止看门狗定时器 Watchdog Timer [5] 0=禁止看门狗定时器 1=使能看门狗定时器 这两位决定时钟分频因素 0 Clock Select [4:3] 00:1/16 10:1/64 中断的禁止和使能 01:1/32 11:1/128 00 Interrupt Generation Reserved Reset Enable/Disable

[2] [1] 0 0=禁止中断产生 仁使能中断产生 保留 禁止很使能看门狗复位信号的输出 仁看门[0] 狗复位信号使能 0=看门狗复位信号禁止 1 0 看门狗定时器数据寄存器( WTDAT) 寄存器

WTDAT 地 址 读/写 读/写 描 述 初始值 0x8000 0x53000004 看门狗数据寄存器 看门狗计数寄存器(WTCNT) 寄存器 WTCNT 地 址 读/写 读/写 描 述 初始值 0x8000 0x53000008 看门狗计数器当前值 #define rWTDAT (*( volatile #define rWTCNT (*( volatile void watchdog_test( void )

unsigned *)0x53000004) // 第 2行 unsigned *)0x53000008) // 第 3行

{

rWTCON = ((PCLK/1000000-1)<<8)|(3<<3)|(1<<2); rWTDAT = 7812; rWTCNT = 7812;

第4行 // // 第 5 行 // 第6行 // 第 7行

rWTCON |=(1<<5);

参考答案及要点:

第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;

OSSemPost(math_Sem);

}

}

void task2() { U8 err;

for(;;){

OSSemPend(math_Sem,0,&err); dest = source; source =0;

并说明程序答:功能:编写两个任务taskl和task2实现要求的功能。 设task2为较高的优先级,taskl 中给一个全局变量 source赋值;task2中读取这个变量的值到另一个全局变量 dest中,然

后清零source变量。要求先赋值后读取。

流程图:(3分)

(3分)

Taskl的流程图

F task2

SOURCE=1 发送信号量 六、应用实践题

1、利用串口 1实现两个开发平台间的双机通信。要求 1)画出双机通信的串

的流程图

口连接图。 2) 要实现开发平台 A发送某个数,开发平台B接收到后加1再回送给开发平台 A。应如何设计 程序,给出编程思路或画出程序流程图。

1)( 2 分)

RS-232 RS-232

串行接口

2)编程思路:

串行接口

过串口 1发送 3)调接受函数,通过串口 1接收(3分)

开发平台A编程思路:1)初始化串口 1 2)给一个变量赋初值,并调发送函数通

开发平台B编程思路:1)调接受函数,通过串口 1接收 2)接收到得数据加1

3)调发送函数,发送加 1后的数据(3分)

2、编写程序,实现利用 ARM芯片的I/O端口控制LED显示。

控制如下硬件原理图中的四个发光二极管

LED1、LED2、LED3、LED4,使它们有规律地

点亮和熄灭,具体顺序如下: LED1亮TLED2亮宀LED3亮 宀LED4亮宀LED1灭宀LED2 灭TLED3灭TLED4灭T全亮T全灭,如此反复。

R12U

参考答案及要点:

#i nclude \"2410lib.h\" void led_ on( void) {

int i,n Out; nO ut=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,n Out;

nO ut=0;

rGPFDAT = 0;

for(i=0;i<100000;i++); rGPFDAT = n Out | 0x80;

for(i=0;i<100000;i++); rGPFDAT |= nO ut | 0x40; for(i=0;i<100000;i++); rGPFDAT |= nO ut | 0x20; for(i=0;i<100000;i++); rGPFDAT |= nOut | 0x10; for(i=0;i<100000;i++); }

void led_ on_o ff(void)

int i; rGPFDAT=O; for(i=0;i<100000;i++); rGPFDAT=OxFO; for(i=0;i<100000;i++); }

3、实现CAN总线通信需要哪两个芯片?画出 意图。要实现两个开发平台间通过 路或程序流程图)。

答:1)MCP2510和 TJA1050。( 2 分)

S3C44B0利用CAN总线进行通信的硬件连接示

CAN总线双机通信,应如何设计程序(给出软件设计思

2)( 3

分)

CANH CANL

3)能正确表示CAN总线的初始化和发送接收编程思路(3分)

开发平台A编程思路:

1)初始化 MCP2510 2)启动can总线收发 3 )通过can 口发送一个字符 开发平台B编程思路:

1)初始化 MCP2510 2)启动can总线收发 3 )通过can 口接收一个字符

4、给出S3C44B01过驱动器控制步进电机的硬件连接示意图;已知步进电机正转时的控制

顺序为ATA4BSSCCHD^DA以列表的形式给出各 I/O控制口的值。可以通过 哪个宏来设置I/O控制口的值。 答:1)

2)高四位I/O控制口的值 片六进制 1H 3H 2H 6H 1H CH 8H 9H

二进制 0001 0011 0010 0110 0100 1100 1000 1001 通电状态 A AB B BC C CD D DA 3)可以通过宏 SETEXIOBITMASK(bit,mask) (EXIO.h)来设置扩展 I/O 口。

5、TCP/IP协议可以分为哪几层?画出 S3C44B0进行网络通信的硬件框图;要实现基于 UDP

的网络通信,应如何设计程序,给出编程思路或程序流程图。

1)分为:物理层

数据链路层(IEEE802.3 Ethernet MAC ) 网络层(IP、ARR ICMR IGMF) 传输层 (TCR UDR 应用层(BSD Sockets)

2)

3)能正确描述实现网络初始化、创建、绑定、发送和接收 UPD包的过程。

编程思路:1)初始化以太网 2 )创建socket套接字3 )绑定socket套接字和本机 Ip 4 )通过socket发送数据

或5)通过socket接收数据

最后两步顺序可换

6、独立式键盘和矩阵式键盘各有什么优缺点?画出矩阵式键盘连接示意图;若采用矩阵式 键盘,怎样编程获得按下的键值,给出编程思路或流程图。

1)独立式键盘占有I/O 口较多,但编程简单;矩阵式键盘占有 对复杂。 2)

5I/O接口较少,编程相

(输出端口)

B1

-2 B2

B3

(输入端口) B1 B2 B3

3)识别矩阵键盘按键的方法分为两步:第一步,识别键盘有无键被按下;第二步,女口 果有键被按下,识别出具体的按键。

识别键盘有无键被按下的方法是: 让所有行线均置为 0电平,检查各列线电平是否 有变化,如果有变化,则说明有键被按下,如果没有变化,则说明无键被按下。

识别具体按键的方法是(亦称扫描法)

:逐行置零电平,其余各行置为高电平,检

则可确定此行此列交叉点处

查各列线电平的变化, 如果某列电平有高电平变为零电平, 的按键被按下

7、阅读以下S3C2410部分用户手册.求:当 PCLK 或UCLK 为40 MHz时,串口 0的波特 率为2 4 0 0

bps,串口1的波特率为1 1 5 2 0 0 置. (8分)

bps,相应的控制寄存器如何设

UART BAUD RATE DIVISOR REGISTER There are three UART baud rate divisor registers

(寄存器)in cludi ng 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: UBRDI Vn = (i nt)(PCLK / (bps x 16)) or

UBRDI Vn = (i nt)(UCLK / (bps x 16)) Where, the divisor should be from 1 to (2 Register UBRDIV0 UBRDIV1 -

-

16-1) and UCLK should be smaller than PCLK.

Address 0x50000028 0x50004028 0x50008028 R/W R/W R/W R/W Descripti on Baud rate divisor register 0 Baud rate divisor register 1 Baud rate divisor register 2 Reset Value — — — UBRDIV2 UBRDI Vn Bit Descripti on In itial State — UBRDIV [15:0] Baud rate divisi on value UBRDI Vn >0 答:根据 UBRDIVn = (int)(PCLK / (bps x 16))

-

寄存器 UBRDIV0= (int)(40000000/2400*16)-1=1040=10000010000(B) 寄存器 UBRDIV1=( int)(40000000/115200*16)-1=20=10100(B)

8 试写出卩C/OSII多任务程序框架结构 (1)在操作系统多任务调度策略中, 如何防止最高优先级任务独占

C程序示意代码,要求至少包含两个任务,并为

每个任务设计和分配堆栈,同时要求每个任务都有机会获得处理器运行。另外回答以下问 题

什么是基于优先级的抢占式调度策略?在 卩C/OSI中是

CPU的?

(2)卩C/OSI中每个任务都是死循环,如果最高优先级任务的这个死循环中出现了这样一句 代码:“ for(;;); ,试”问会出现什么现象?为什么?如何防止? 参考答案: 代码框架 int int

Stack1[1024]; 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();

OSTaskCreate(Task1,

s1,

//定义要显示的字符 //定义要显示的字符 //初始化 uCOS_II //创建任务 MyTask //

给任务传递参数

& Stack1 [TASK_STK_SIZE - 1], // 设置任务堆栈栈顶指针 0);

OSTaskCreate(Task2,

s2, 1); OSStart();

//使任务 MyTask 的优先级别为 //创建任务 MyTask //给任务传递参数

//使任务 MyTask 的优先级别为 //启动 uCOS_II 的多任务管理

0 0

& Stack2 [TASK_STK_SIZE - 1], // 设置任务堆栈栈顶指针

最高优先级任务中出现了 for ( ; ; ) ; ,将出现死机,因为其他任务都无法剥夺该任务的 CPU, 而该任务陷入不会主动放弃 CPU 的死循环,解决办法就是规定除了空闲任务,每个任务在 进入下一轮循环之前,必须主动调用延时函数或多或少的放弃

CPU 一定时间。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top