《ARM嵌入式系统基础教程》复习.doc
《嵌入式系统基础教程》复习
1.什么是嵌入式系统?其特点有些什么?
答:嵌入式系统是“以应用为屮心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。”
特点:1)是专用的计算机系统,用于特定的任务;
2)资源较少,可以裁减;
3)功耗低,体积小,集成度高,成木低;
4)使用实时操作系统;
5)可靠性要求更高,具有系统测试和可靠性评估体系;
6)运行坏境差异大
7)大部分程序尚化在ROM屮;
8)较长的生命周期;
9)嵌入式微处理器通常包含专用调试电路
2.嵌入式系统的BooTLoader的功能是什么?
答:BootLoader是系统加电后、操作系统内核或用户应用程序运行Z前,首先必须运行的一段程序代码。通过这段稈序,为最终调用操作系统内核、运行用户应用程序准备好正确的环境。(对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,但在系统启动时都必须运行BootLeuie「,为系统运行准备好软硬件环境。)3.目前嵌入式操作系统有哪些?
答:1) pC/OS-II嵌入式操作系统内核;2) VxWorks嵌入式实时操作系统;3) WinCE操作系统;4) Linux操作系统;5) Symbian操作系统
4.构造嵌入式开发环境有哪几种形式?
答:1)交叉开发环境;2)软件模拟环境;3)评估电路板
5.嵌入式系统开发的基本流程?
答:1)系统定义与需求分析;
2)系统设计方案的初步确立;
3)初步设计方案性价比评估与方案评审论证;
4)完善初步方案、初步方案实施;
5)软硬件集成测试;
6)系统功能性能测试及可靠性测试。
6.什么是可编程片上系统?
答:用可编稈逻辑技术把整个系统放到一块硅片上,称作可编程片上系统SOPCo它是一种特殊的嵌入式系统,首先它是SOC,即由单个芯片实现粥个系统的主要逻辑功能,具有一般SOC基木属性;其次,它又具备软便件在系统可编稈的功能,是可编稈系统,具有可裁剪、可扩充、可升级等灵活的设计方式。
7?有时要使用Thumb技术的原因
答:(Thumb指令集是把32位的ARM指令集的一个子集重新编码后形成的一个特殊的16位指令集。)在性能和代码大小Z间取得平衡,在需要较低的存储代码时采用Thumb指令系统用Thumb指令编写最小代码量的程序(能够很好的解决代码长度的问题),却取得以ARM代码执行的最好性能,可以带来低功耗,小体积,低成木。
& ARM处理器的工作模式有哪几种?
答:1)正常用户模式(user);
2)快速中断模式(fiq);
3)普通屮断模式(irq);
4)操作系统保护模式(svc)或管理模式;
5)数据访问中止模式(abt);
6)处理未定义指令的未定义模式(und);
7)运行特权级的操作系统任务的系统模式(sys)。
9.寄存器R13, R14, R15的专用功能各是什么?
答:1)寄存器R13保存堆栈指针SP;
2)寄存器R14用作子程序链接寄存器,也称为LR ,用以保存返冋地址;
3)R15 (PC)用作程序计数器。
13.什么是数据的边界对齐?
16
.
10. 寄存器CPSR, SPSR 的功能各是什么?
答:1) CPSR 包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。所有处理器模式下都可 以访问当前的稈序状态寄存器CPSR 。
2)在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR 。当异常出现时,SPSR 用于
保存CPSR 的状态,以便异常返冋后恢复异常发生时的工作状态。
11?ARM 的异常有哪几种,各进入何种工作模式?他们退出各采用什么指令?
答:1)复位(Reset )异常(管理模式);
2) 未定义指令(undefined instruction )异常(未定义模式); 3) 软件屮断(SWI )异常(管理模式);
4) 指令预取中止(Prefect Abort )异常(中止模式); 5) 数据访问屮止(DataAbort )(屮止模式); 6) 快速中断请求(FIQ ) (FIQ 模式); 7) 外部屮断请求(IRQ ) (IRQ 模式)。
异常返回指令:1) SWI,未定义的返回:MOVS PC,R14; 2) IRQ,FIQ,预取中止的返回:SUBS PC,R14,#4; 3) 数据中止返回并重新存取:SUBS PC,R14,#8
异常中断的优先级:复位(最高优先级)-> 数据异常屮止…〉FIQ -> IRQ …〉预取指异常屮止…>SWI …未 定义指令(包括缺协处理器)。
12?什么是小端和大端存储器组织?
答:1)小端存储器组织是较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址(同 同小)。
2)大端存储器组织是较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址
(正反大)。
答:默认情况下,ADS 编译器使用的是数据类型的白然边界对其方式。数据的白然对其方式是指:如果该数据类
型是n 个字节的,那么该数据类型就按n 字节对齐。
14?ARM 核现在有哪几种?
(2) (3) LDR RO, [R1, #4]!
LDR RO, [R1], #4 ;R0-[Rl+4]、Rl-Rl+4
;R0—[RI]、R1-RI+4
5) 堆栈寻址 (1) STMFD SP! {R1-R7,LR};
(2) LDMFD SP! {R1-R7,LR}: 6) 块拷贝寻址 (1) LDMIA RO!, {R2-R9}:
(2) STMIA R1,{R2,R9};
7) 相对寻址
在
ARM 的立即寻址方式下其立即数如何在指令编码中表示? 答:在ARM 数据处理指令屮,当参与操作的第二操作数为立即数型时,每个立即数都是采用一个8位的常数循环 右移偶数位而间接得到。其屮循环右移的位数由一个4位二进制的两倍表示,如果立即数记作
答:ADR 是将基于PC 或者寄存器的地址值读入到寄存器的,ADR 伪指令通常被替换成一条ADD 指令或SUB 指
ARM 的寻址方式有哪些?各写一条说明。
答:1)立即寻址 (1ADD RO, RO, # 1 /*R0*-R0+l*/ R0=R0+1 (2) ADD RO, RO, #0x3f
/*R0*-R0+0x3f*/ R0=R0+0x3f 2)寄存器寻址
ADD RO, Rl, R2
/*R0-Rl+R2*/ R0=Rl+R2
3)寄存器间接寻址(1) LDR RO, [Rl]
/*R0—[Rl]*/; (2) STR RO, [Rl] /*[R1]^RO*/; 4)基址加偏址寻址(1) LDR RO, [Rl, #4]
:R0-[Rl+4]
答:ARM7、ARM9、ARM9E 、ARM10E,、SecurCore 、ARM 11
15.
令来实现该ADR指令的功能。而ADRL伪指令与ADR指令的哉大不同Z处是,它可以读取更大范I韦1内的地址, 而且被编译器替换成2条数据处理指令。LDR将一个32位的立即数或者一个地址值读取到寄存器屮。大范围的地址读取。NOP在汇编时将被替换成ARM中的空操作。
18.指令LDR Rl,=0xFFF是如何将立即数Oxfff读入到R1的?
答:由于需要读取的寄存器的数据超过了MOV及MVN指令可操作的范围,编译器将该常数放在数据缓冲区屮, 同时用一条基于PC的LDR指令读取该常数。
LDRR1, [PC, offset_to_LPOOLJ.
LTORG ;声明数据缓冲池
LPOOL DCD OxFFF; OxFFF放在数据缓冲池屮。
19?如何在c语言程序中内嵌汇编?
答:内嵌的汇编指令包括大部分的ARM指令和Thumb指令,但是不能肓接引用C的变最定义,数据交换必须通过ATPCS进行。嵌入式汇编在形式上表现为独立定义的函数体。
20?如何在汇编语言程序访问C语言的全局变量?
答:汇编稈序可以通过地址问接访问在C语言稈序屮声明的全局变量。通过使用IMPORT关键词引人全局变量,并利用LDR和STR指令根据全局变量的地址可以访问它们。
对于不同类型的变量,需要采用不同选项的LDR和STR指令,如下所示:
1) unsigned char ------- LDRB/STRB ;
2) unsigned short ------ LDRH/STRH;
3) unsigned int ------- LDR/STR;
4) char ——LDRSB/STRSB:
5) Short——LDRSH/STRSH
21?在C语言程序如何调用汇编语言程序?
答:为了保证稈序调用时参数的正确传递,汇编程序的设计要遵守ATPCSo在汇编程序屮需要使用EXPORT伪操作来声明,使得木稈序可以被其它稈序调用。同时,在C稈序调用该汇编稈序Z前需要在C语言程序屮使用extern 关键词来声明该汇编程序。
22?汇编语言程序调用C语言程序?
答:为了保证程序调用时参数的正确传递,汇编程序的设计要遵守ATPCSo在C程序中不需要使用任何关键字来声明将被汇编语言调用的C程序,但是在汇编程序调用该C程序Z前需要在汇编语言程序屮使用IMPORT伪操作来声明该C稈序。在汇编稈序屮通过BL指令来调用子程序。
23?在嵌入式C语言程序设计中为提高程序效率的相关设计技巧。
答:1)变量定义;2)参数传递;3)循环条件;4)以空间换时间;
5)数学方法解决问题;6)使用位操作;7)嵌入汇编。
24.Linux操作系统的内核、文件系统、编程接口等。
答:Linux的内核也有很多种,例如普通的Linux内核、uClinux内核、RTLinux内核等
25?嵌入式Linux操作系统的特点。
答:广泛的硬件支持、内核高效稳定、开放源码,软件丰富、优秀的开发T具、完善的网络通信和文件管理机制, 26?Windows CE操作系统及其特点。
答:Windows CE是一个32位、多任务、多线程的操作系统,其开放式的设计结构适用于各种各样的设备,其主要特点:
一、CE是一种压缩并可升级的软件系统,即使在小内存条件下,也能提供较高的性能。
二、CE具有便于携带的优点,可以运行于多种微处理器上
三、CE拥有很好的电源管理系统,能延长移动设备的电池寿命
四、CE支持标准的通讯系统,可以非常方便地访问Internet,发送和接受电了邮件,浏览力?维网。
和*程序解释
AREA COPYB S,CODE,READONLY;定义一个代码段
ENTRY;程序入U
LDR RO=SRC:取得原数据表的表头
LDRR1 ,=DST;取得忖标数据表的表头
MOV R2,#20;R4作为循环控制
BCOPY MOVS R3,R2,LSR,#3;R3=R2 ?3逻笹右移3位
BEQ CWORD;若Z=l,跳转到CWORD
OCOPY LDMIA R0!,{ R4-R11};加载R0指向的地址上的多字数据,保存到R4?R11屮,R0值更新STMIAR1!,{R4-R11};将R4-R11的数据存储到R1指向的地址上,RI值更新
SUBS R3,R3,#1;R3=R3-1
BNE OCOPY;若Z=(),跳转到OCOPY
CWORD AND R2,R2,#7;R2=R2&7
BEQ STOP;若7=1,跳转到STOP
WCOPY LDR R3,{R0},#4;将R3中的字数据读入以R0为地址的存储器中,并将新地址R0+4写入R1 STR R3,{R1},#4;将R3屮的字数据写入以R1为地址的存储器中,并将新地址R1+4写入R1
SUBS R2,R2,#1;R2=R2-1
BNE WCOPY;若Z=0,跳转到WCOPY
STOP ……
在程序屮常常需要根据一定的参数选择执行不同的了程序。跳转表屮存放的是各了函数的地址,选择不同的了程序的参数是该了程序在跳转表屮的偏移量。在木例屮R3寄存器屮存放的是跳转表的基地址(首选地址,其屮存放的是第一个子稈序的地址)。R0寄存器的值用于选择不同的子稈序;当R0为0时,选择的是子稈序Do Add;当R0为1时, 选择的是了稈序DoSubo
在ADS编译环境程序如下:
AREA Jump, CODE, READONLY设置木程序的名称及属性
NUM EQU 2■跳转表屮的了程序个数
ENTRY?
?程序执行的入口点
Start MOV R0,#0设置3个参数,R0选择调用哪个子稈序MOV Rl,#3R1为子程序要用的参数
MOV R2,#2R2为子程序要用的参数
BL Func调用了程序Func,进行算术运算
Stop MOV RO ,#0x 18木条与下条指令的作用是参数传递LDR R1 ,=&20026
SWI0x123456:将CPU的控制权交给调试器
Func CMP RO, #NUM;判断R0是否在有效范围Z内
MOVH S PC, LR;如果超出范用则程序返冋
ADR R3, JTable;读取跳转表的基地址
LDR PC, [R3, RO, LSL#2]:根据参数R0的值跳转到相应的子稈序JTable DCD DoAdd;当参数R0为0时上面的代码将选择
DoAdd
DCD DoSub;当参数R0为1时上面的代码将选择DoSub DoAdd ADD RO, Rl, R2;子程序DoAdd执行加法操作MOV PC, LR:子稈序返冋
DoSub SUB RO, Rl, R2:子稈序DoSub执行减法操作
MOV PC, LR;子程序返回
END;结束汇编