2024年2月9日发(作者:权晏然)
第一章
1-1.简述嵌入式系统的定义。
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
1-2.简述嵌入式系统的组成。
从体系结构上看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。其中嵌 入式处理器通常是单片机或微控制器,支撑硬件主要包括存储介质、通信部件和显示部件等,嵌入式软件则包括支撑硬件的驱动程序、操作系统、支撑软件及应用中间件等。
嵌入式系统的组成部分是嵌入式系统硬件平台、嵌入式操作系统和嵌入式系统应用。嵌入式系统硬件平台为各种嵌入式器件、设备(如ARM 、PowerPC、Xscale、MIPS等);嵌入式操作系统是指在嵌入式Linux、uCLinux、WinCE等。
7处理器使用的是(ARMv4)指令集。ARM7内核采用冯·诺依曼体系结构,数据和指令使用同一条总线。内核有一条3级流水线,执行ARMv4指令集。
-M3主要应用在哪些方向?
主要用在平衡ARM的产品的性能和功耗,提高ARM的性能,降低其功耗
1.5.简述StrongARM处理器和ARM处理器的关系
StrongARM是第一个包含5级流水线的高性能ARM处理器,但它不支持Thumb指令集
9采用的是(5)级流水线设计。存储器系统根据哈佛体系结构(程序和数据空间独立的体系结构)重新设计,区分数据总线和指令总线。
1.7.简述ARM9和ARM9E的不同点
ARM9微处理器系列
ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。具有以下特点:
- 5级整数流水线,指令执行效率更高。
- 提供1.1MIPS/MHz的哈佛结构。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- MPU支持实时操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。
ARM9系列微处理器包含ARM9 20T、ARM9 22T和ARM940T三种类型,以适用于不同的应用场合。
ARM9E微处理器系列
ARM9E系列微处理器为可综合处理器,使用单一的处理器内核提供了微控制器、DSP、Java应用系统的解决方案,极大的减少了芯片的面积和系统的复杂程度。ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。
ARM9E系列微处理器的主要特点如下:
- 支持DSP指令集,适合于需要高速数字信号处理的场合。
- 5级整数流水线,指令执行效率更高。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 支持VFP9浮点处理协处理器。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- MPU支持实时操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
- 主频最高可达300MIPS。
ARM9系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。
ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三种类型,以适用于不同的应用场合。
11采用的是什么架构的指令
ARMv6
嵌入式操作系统的特点
嵌入式操作系统完成系统初始化及嵌入式应用的任务调度和控制等核心功能,其内核精简,具有课配置特性,并与高层应用紧密关联。嵌入式操作系统具有相对不变性。主要特点如下
(1) 体积小
有别于一般的计算机处理系统,不具备想硬盘那样大容量的存储介质,大多使用闪存作为存储介质。这就要求只能运行在有限的内存中,不能使用虚拟内存,中断的使用也受到限制。因此,嵌入式操作系统必须结构紧凑,体积微小。
(2) 实时性
大多数嵌入式系统都是实时系统,而且多是强实时多任务系统,因此要求相应的嵌入式操作系统也必须是实时操作系统。实时操作系统作为操作系统的一个重要分支已成为一个热点研究领域,主要包括探讨实时多任务调度算法和可调度性、死锁接触等问题
(3) 特殊的开发调试环境
完整的集成开发环境是每一个嵌入式系统开发人员所期待的。一个完整的嵌入式系统的集成开发环境,一般需要提供的工具是编译/链接器、内核调试/跟踪器和集成图形界面开发平台。其中集成图形界面开发平台包括编辑器、调试器、软件仿真器和监视器等
SecureCore处理器系列的特点
SecureCore提供了基于高性能的32为RESC技术的安全解决方案。除了具有体积小、功耗低、代码密度高等特点外,还具有自己的特别优势,即提供安全解决方案支持。主要特点有
(1) 支持ARM指令集和Thumb指令集,以提高代码密度和系统性能
(2) 采用软内核技术一提供最大限度的灵活性,可以防止外部对其进行扫描探测
(3) 提供了安全特性,可以抵制攻击
(4) 提供面向智能卡和低成本的存储保护单元MPU
(5) 可以集成用户自己的安全特性和其它的协处理器
SecureCore包含SC100、SC110、SC200和SC210四种类型
SecureCore系列处理器主要应用于一些安全产品及应用系统,包括电子商务、电子银行业务、网络、移动媒体和认证系统等
第二章
2-1.简述ARM可以工作在几种模式。
ARM处理器共有7种工作模式:用户模式(User)、快速终端模式(FIQ)、外部中断模式(IRQ)、特权模式(svc)、数据访问中止模式(Abort)、未定义指令中止模式(Undef)、系统模式(System)。除用户模式外其他6种模式称为特权模式。在特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式切换。再除去系统模式,其余5种模式又称为异常模式。
核有多少个寄存器?
ARM处理器有如下37个32位长的寄存器:
(1)30个通用寄存器;
(2)6个状态寄存器:1个CPSR(Current Program Status Register,当前程序状态寄存器),5个SPSR(Saved Program Status Register,备份程序状态寄存器);
(3)1个PC(Program Counter,程序计数器)。
2-3.什么寄存器用于存储 PC和LR寄存器?
寄存器R15称为程序计数器(Program Counter,PC),寄存器R14又被称为连接寄存器(Link
Register,LR)。
2-4.R13通常用来存储什么?
R13(the Stack Point,SP,栈指向),用于存储堆栈指针。
2-5.哪种模式使用的寄存器最少
用户模式和系统模式
的(第5位T位)反映了处理器的状态。P15
有哪几个异常类型?P20
ARM体系结构中,存在7种异常处理。
复位异常、未定义指令异常、软中断、预取指令异常、数据访问中止异常、外部中断请求、快速中断请求。
2-8.复位后,ARM处理器处于何种模式、何种状态?
管理模式(svc),软中断和系统复位后进入管理模式,ARM状态(异常中断(Exception)处理。在进入异常中断后,内核自动切换到ARM状态。即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断处理程序返回前,程序再切换到ARM状态。 ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,调用该Thumb程序。)
指令有什么作用?
BIC(Bit Clear)位清零指令,将寄存器Rn的值与第2个源操作数shifter_operand的值的反码按位做“逻辑与”操作,结果保存到Rd中。指令的语法格式
BIC{
2-10.当指令SWI指令时,会发生什么?
软件中断指令(Software Interrupt,SWI)用于产生软中断,从而实现从用户模式变换到管理模式,CPSR保存到管理模式的SPSR中,执行转移到SWI向量,在其他模式下也可以使用SWI指令,处理器同样切换到管理模式。
流水线的 概念和原理
处理器按照一系列步骤来执行每一条指令,典型步骤如下
(1)从存储器读取指令(fetch)
(2)译码鉴别他是属于哪一条指令(decode);
(3)从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(reg)
(4)将操作数进行组合以得到结果或存储器地址(ALU)
(5)如果需要,则访问存储器一存储数据(mem)
(6)将结果写回到寄存器堆(res)
并不是所有的指令都需要上述每一个步骤,但是,多数指令需要其中的多个步骤。这些步骤往往使用不同的硬件功能,如ALU可能只在第4步中用到。因此,如果一条指令不是在前一条指令结束之前开始,那么在每一步骤内处理器只有少部分硬件在使用。
有一种方法可以明显改善硬件资源的使用率和处理器的吞吐量,这就是当前一条指令结束之前就开始下一条指令,即通常所说的流水线技术。流水线是RISC处理器执行指令时采用的机制。使用流水线,可在取下一条指令的同时译码和执行其他指令,从而加快执行的速度。可以把流水线看作是汽车生产线,每个阶段只完成专门的处理器任务。
采用上述操作顺序,处理器可以这样来着组织:当一条指令刚刚执行完步骤(1)并转向步骤(2)时,下一条指令就开始执行步骤(1)。从原理上说,这样的流水线应该比没有重叠的指令执行快6倍,但由于硬件结构本身的一些限制,实际情况会比理想情况差一些。
流水线的分类
3级流水线ARM组织 取指令 译码
5级流水线ARM组织 取指令 译码
5级流水线ARM组织
取指令 发射
执行
执行
译码
缓冲/数据
执行
回写
存储 回写
影响流水线性能的因素: 1互锁:一条指令的结果被用作下一条指令的操作数
2 跳转指令
存储管理单元(MMU)
在创建多任务嵌入式系统时,最好有一个简单的方式来编写、装在及运行各自独立的任务。目前大多数的嵌入式系统不再使用自己定制的控制系统,而使用操作系统来简化这个过程。较高级的操作系统采用基于硬件的存储管理单元(MMU)来实现管理操作。
MMU提欧诺个的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。在带MMU的操作系统下,运行的任务无需知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。
MMU提供了一些资源以允许使用虚拟存储器(将系统物理存储器重新编址,可将其看成一个独立于系统物理存储器的存储空间)。MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的五物理地址,即在物理主存中的地址。这个转换过程允许运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置。
这样存储器就有两种类型的地址:虚拟地址和物理地址。虚拟地址由编译器和链接器在定位程序时分配;物理地址用来访问实际的主存硬件模块(物理上程序存在的区域)
高速缓冲存储器(Cache)
Cache是一个容量小但存取速度非常快的存储器,它保存最近用到的存储器数据副本。对于程序员来说,Cache是透明的。它自动决定保存哪些数据、覆盖哪些数据。现在Cache通常与处理器在同一芯片上实
现。Cache能够发挥作用是因为程序具有局部性特性。所谓局部性就是只在任何特定的时间,处理器趋于对相同区域的数据(如堆栈)多次执行相同的指令(如循环)。
Cache经常与写缓存器(write buffer)一起使用。写缓存器是一个非常小的先进先出(FIFO)存储器,谓语处理器核与主存之间。使用写缓存的目的是,将处理器核和Cache从较慢的主存写操作中解脱出来。当CPU想主存储器做写入操作时,它先将数据写入到写缓存区中,由于写缓存器的速度很高,这种写入操作的速度也将很高。写缓存区在CPU空闲时,以较低的速度将数据写入到主存储器中相应的位置。
通过引入Cache和写缓存区,存储系统的性能得到了很大的提高,同时也带来了一些问题。例如,由于数据将存在系统中不同的物理位置,可能造成数据的不一致性;由于写缓存区的优化作用,可能有些写操作的执行顺序不是用户期望的顺序,从而造成操作错误。
异常
ARM体系机构中,存在7种异常处理。当异常发生时,处理器会把PC设置为一个特定的存储地址。这一地址放在被称为向量表的特定地址范围内。向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。
存储器映射地址0x00000000是为向量表(一组32位字)保留的。在有些处理器中,向量表可以选择定位在存储空间的高地址(从偏移量0xffff0000开始)
ARM的7种异常
异常类型
复位异常(Reset)
软中断异常(Software Abort)
预取异常(Prefetch Abort)
数据异常(Data Abort)
外部中断请求(IRQ)
快速中断请求(FIQ)
响应后处理器模式
管理模式
管理模式
数据访问中止模式
数据访问中止模式
外部中断请求模式
快速中断请求模式
执行低地址 执行高地址
0x00000000 0xFFFF0000
0x00000008 0xFFFF0008
0x0000000C 0xFFFF000C
0x00000010 0xFFFF0010
0x00000018 0xFFFF0018
0x0000001C 0xFFFF001C
未定义指令异常(Undefined interrupt) 未定义指令中止模式
0x00000004 0xFFFF0004
注:0x00000014 和0xFFFF0014被保留
异常返回时,SPSR内容恢复到CPSR,连接寄存器R14的内容恢复到程序计数器(PC)
异常的优先级
优先级
最高 1
2
3
4
5
6
最低 7
异常
复位异常
数据中止
快速中断请求
外部中断请求
预取指令异常
软中断
未定义指令
软中断异常和未定义指令异常享有相同的优先级
异常处理向量表
快速中断请求
外部中断请求
0x1C
0x18
保留
数据异常
预取异常
软中断异常
未定义指令异常
复位异常
0x10
0x0C
0x08
0x04
0x00
当一个异常处理返回时,一共有3件事情需要处理: 通用寄存器的恢复、状态寄存器的恢复及PC指针的恢复。(ARM指令集请看附件)
第三章
3-1.比较ARM指令和Thumb指令的不同。
Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度但是它不如ARM指令的效率高 .Thumb 不是一个完整的体系结构,不能指望处理只执行Thumb 指令而不支持 ARM 指令集.因此,Thumb 指令只需要支持通用功能,必要时可以借助于完善的 ARM 指令集,比如,所有异常自动进入 ARM 状态.在编写 Thumb 指令时,先要使用伪指令 CODE16 声明,而且在 ARM
指令中要使用 BX指令跳转到 Thumb 指令,以切换处理器状态.编写 ARM 指令时,则可使用伪指令
CODE32声明.
Thumb 指令集没有协处理器指令,信号量指令以及访问 CPSR 或 SPSR 的指令,没有乘加指令及 64 位乘法指令等,且指令的第二操作数受到限制;除了跳转指令 B 有条件执行功能外,其它指令均为无条件执行;大多数 Thumb 数据处理指令采用 2 地址格式.Thumb指令集与 ARM 指令的区别一般有如下几点:
跳转指令
程序相对转移,特别是条件跳转与 ARM 代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移.
数据处理指令
数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第 3 个寄存器中.数据处理操作比 ARM 状态的更少,访问寄存器 R8~R15 受到一定限制.除 MOV 和
ADD 指令访问器 R8~R15 外,其它数据处理指令总是更新 CPSR 中的 ALU 状态标志.访问寄存器 R8~R15
的 Thumb 数据处理指令不能更新 CPSR 中的 ALU 状态标志.
单寄存器加载和存储指令
在 Thumb 状态下,单寄存器加载和存储指令只能访问寄存器 R0~R7
批量寄存器加载和存储指令
LDM 和 STM 指令可以将任何范围为 R0~R7 的寄存器子集加载或存储. PUSH 和 POP 指令使用堆栈指令
R13 作为基址实现满递减堆栈.除 R0~R7 外,PUSH 指令还可以存储链接寄存器 R14,并且 POP 指令可以加载程序指令PC
3-2.如何从ARM状态切换到Thumb状态?P54
对于汇编程序来说,可以有两种方法来实现程序状态的切换。第一种方法是利用连接器提供的交互子程序Veneer来实现程序状态的切换,这时用户可以使用指令BL来调用子程序;第二种方法是用户自己编写状态切换的程序。
BX指令
ARM状态下的BX指令,使程序跳转到指令中指定的参数Rm所指定的地址执行程序,Rm的第0位复制到CPSR中的T位,bits[31∶1]移入PC。
指令的语法格式如下:
BX{
3-3.在ARM汇编中如何定义一个全局的数字变量?P61
GBLA、GBLL和GBLS伪操作用于定义一个ARM程序中的全局变量并将其初始化。其中GBLA伪操作用于定义一个全局的数字变量并初始化为0。格式为:
GBLA
***和LDR的用法有什么区别
ADR:
这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。使用的格式:ADR register,exper。在编译源程序时,汇编器首先计算出当前PC到exper的偏移值#offset_to_exper,然后会用一条ADD或者SUB指令来替换这条伪指令,例如:ADD register,PC,#offset_to_exper。
注意,标号exper与指令必须在同一代码段。
ADRL:
这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。
使用的格式:ADRL register,exper。在编译源程序时,汇编器会用两条合适的指令来替换这条伪指令。 例如:
ADD register,PC,offset1
ADD register,register,offset2
与ADR相比,它能读取更大范围的地址。
注意,标号exper与指令必须在同一代码段。
LDR:
第一种情况:
当LDR用做ARM指令时,它将基于PC的相对偏移地址处存储的值读到目标寄存器中。
应用格式:LDR register,[expr]
第二种情况:
当LDR用做ARM伪指令时,它用于大范围的地址读取。
其实说它用于大范围的读取,还不如说它用于大范围的地址赋值。我们来看一下这条伪指令的应用格式:LDR register,=expr/label_expr ,显然,我们可以直观的看出,指令的目的就是要将expr或label_expr赋值(=)给register.所以在编译时,当expr或label_expr的值没有超出MOV和MVN的范围时,采用MOV或MVN指令来代替这条伪指令就显得理所当然了。当expr或label_expr的值超出MOV和MVN的范围时,汇编器将expr或label_expr放入文字池中,并使用一条程序相对偏移指令LDR从文字池读出常量。例如:LDR
register,[PC,#offset to literal pool]
ADR伪指令将给予PC相对偏移地址或基于寄存器相对偏移地址值读取到寄存器中。
LDR指令装载的地址是绝对地址,即PC相关地址
过程调用标准的内容是什么?(书上没有,一下为网上收集的内容,如果有听课的同学,请更正并通知大家)
过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规则, ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。
寄存器使用规则
(1) 子程序间通过寄存器R0~R3传递参数,寄存器R0~R3可记作A1~A4。被调用的子程序在返回前无须恢复寄存器R0~R3的内容。
(2) 在子程序中,ARM状态下使用寄存器R4~R11来保存局部变量,寄存器R4~R11可记作
V1~V8;Thumb状态下只能使用R4~R7来保存局部变量。
(3) 寄存器R12用作子程序间调用时临时保存栈指针,函数返回时使用该寄存器进行出栈,记作IP;在子程序间的链接代码中常有这种使用规则。
(4) 通用寄存器R13用作数据栈指针,记作SP。
(5) 通用寄存器R14用作链接寄存器 ;
(6) 通用寄存器R15用作程序计数器,记作PC 。
数据栈使用规则
过程调用标准规定数据栈为FD类型,并且对数据栈的操作时要求8字节对齐的。
参数传递规则
1. 参数个数可变的子程序参数传递规则
对于参数个数可变的子程序,当参数个数不超过4个时,可以使用寄存器R0~R3来传递;当参数个数超过4个时,还可以使用数据栈进行参数传递。
2. 参数个数固定的子程序参数传递规则
如果系统不包含浮点运算的硬件部件且没有浮点参数时,则依次将各参数传送到寄存器R0~R3中,如果参数个数多于4个,将剩余的字数据通过数据栈来传递;
如果包括浮点参数则要通过相应的规则将浮点参数转换为整数参数,然后依次将各参数传送到寄存器R0~R3中。如果参数多于4个,将剩余字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。
如果系统包含浮点运算的硬件部件,将按照如下规则传递:
各个浮点参数按顺序处理
为每个浮点参数分配寄存器。分配方法是:找到编号最小的满足该浮点参数需要的一组连续的FP寄存器进行参数传递。
子程序结果返回规则
(1)结果为一个32位的整数时,通过寄存器R0返回;结果为一个64位整数时,通过寄存器R0,R1返回。
(2)结果为一个浮点数时,可以通过浮点运算部件的寄存器F0、D0或者S0来返回;结果为复合型的浮点数(如复数)时,可以通过寄存器F0~Fn或者D0~Dn来返回。
(3)对于位数更多的结果,需要通过内存来传递。
3-6.什么是内联汇编?什么是嵌入型汇编?两者之间的区别是什么?
内联汇编是包含有C程序内容的汇编程序,而嵌入型汇编是一个独立的子程序,C程序可调用其执行
区别:嵌入型可带参数,嵌入型汇编_asm声明的常规函数放在.emb_text段中
3-7.汇编代码中如何调用C代码中定义的函数?P90
如C中定义函数int g(int,int,int);先在汇编程序开始处声明C程序g(),如:IMPORT g
汇编中调用指令为:BL g
网上资料:在ARM开发工具编译环境下,汇编程序中要使用IMPORT伪操作声明将要调用的C程序。
3-8.C++代码中如何包含C头文件?
从C++调用C头文件之前,C头文件必须包含在extern“C”命令中。
(1) 在C++中使用系统的C头文件 : 要包括标准的系统C头文件,如stdio.h,不必进行任何特殊的操作,由编译器自动包含标准C头文件
(2) 在C++中使用自定义的C头文件:要包含自己的C头文件,用户必须将#include命令包在extern“C”语句中。
第五章
5-1.S3C2410核心电压是多少?
1.8或者2.0V 内部存储器和外围设备供电电压为3.3V
接口电路的作用是什么?
主要用于芯片内部测试及对系统进行仿真、调试
5-3.本章介绍的系统采用的是什么样的复位电路?
系统监督复位芯片IMP811S
Flash的特点是什么?P134
芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中,NOR的传输效率很高,在1~4MB的小容量是具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
(以上为网上的说法)
Flash存储器是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌入的算法完成对芯片的操作。
1) Nor Flash带有通用的SRAM接口,可以轻松的挂接在CPU的地址、数据总线上,对CPU接口要求低。其特点是芯片内执行(XIP),这样,应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。
2) 容量较小,一般在1~16M之间,但是价格要比 Nand Flash高。
3) 不存在坏块问题,位翻转现象出现的几率较小。
4) 寿命:擦写次数在十万次。
5) 其升级比较麻烦,更换不同容量的器件时不方便。
6) 读写性能:要求在进行擦除前先要将目标块内所有的位都写为1.,执行一个写入/擦除操作的时间约为5s,而Nand为4ms,但是读速度稍快一些。
5-5.比较 Nand Flash和Nor Flash的不同 。(同上,见P134)6方面不同
1.接口对比
2.容量和成本对比
3.可靠性对比
4.寿命对比
5.升级对比
6.读写性能对比
的特点与作用是什么?
特点:不具有掉电保持数据的性能,存储速度大大高于Flash存储器,具有读/写的属性。单位空间存储容量大,价格便宜。
作用:主要用作程序的运行空间、数据及堆栈区。
232的作用是什么?
9针RS232信号电平转换
5-8.S3C2410处理器上集成的A/D转换器性能参数是什么?
分辨率、转换速率、量化误差、偏移误差、满刻度误差、线性度。
第七章
7-1.简述交叉开发的概念
通常,程序是在一台计算机上编译,然后再分布到将要使用的其他计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,该过程就叫做
交叉编译。
除了兼容性这个明显的好处之外,交叉编译还由于以下两个原因而非常重要:
1. 当目标系统对其可用的编译工具没有本地设置时。
2. 当主机系统比目标系统要快得多,或者具有多得多的可用资源时
编译器运行在x86主机上,却编译出可以在ARM上运行的可执行程序,这种编译器就是交叉编译器(cross compiler),而采用交叉编译器进行编译就是指交叉编译(cross compiling),而交叉编译器相关的环境就是指交叉编译环境(cross compiling environment)。
Linux 交叉开发采用宿主机和目标机的模式进行。宿主机是一台运行Linux(如:RedHat)的PC 机,目标机即JXARM9-2410 教学实验系统。开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,这种代码并不能在宿主机上执行,而只能在目标机上执行。然后把可执行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。宿主机和目标板的处理器一般都不相同,宿主机为Intel 处理器,而目标板如JXARM9-2410 为SAMSUNG S3C2410。
Linux交叉开发包括Linux内核的开发和Linux应用程序的开发
7-3.简述Bootloader的作用。(P208,并且注意其组成及结构。)
Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。
嵌入式系统世界已经有各种各样的Bootloader,种类划分也有多种方式。除了按照处理器体系结构不同划分以外,还有功能复杂程度的不同。
7-6.列举出3种常见嵌入式Linux文件系统格式。
1. EXT2/EXT3 /JFFS2
7-8.利用NFS调试新文件系统有什么好处?(P253,还要熟悉其搭建过程和指令)
包括以下几个方面:
1) 本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
2) 用户不必在每个网络上机器里头都有一个home目录。Home目录可以被放在NFS服务器上并且在网络上处处可用。
3) 诸如软驱、CD-ROM之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。
2024年2月9日发(作者:权晏然)
第一章
1-1.简述嵌入式系统的定义。
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
1-2.简述嵌入式系统的组成。
从体系结构上看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。其中嵌 入式处理器通常是单片机或微控制器,支撑硬件主要包括存储介质、通信部件和显示部件等,嵌入式软件则包括支撑硬件的驱动程序、操作系统、支撑软件及应用中间件等。
嵌入式系统的组成部分是嵌入式系统硬件平台、嵌入式操作系统和嵌入式系统应用。嵌入式系统硬件平台为各种嵌入式器件、设备(如ARM 、PowerPC、Xscale、MIPS等);嵌入式操作系统是指在嵌入式Linux、uCLinux、WinCE等。
7处理器使用的是(ARMv4)指令集。ARM7内核采用冯·诺依曼体系结构,数据和指令使用同一条总线。内核有一条3级流水线,执行ARMv4指令集。
-M3主要应用在哪些方向?
主要用在平衡ARM的产品的性能和功耗,提高ARM的性能,降低其功耗
1.5.简述StrongARM处理器和ARM处理器的关系
StrongARM是第一个包含5级流水线的高性能ARM处理器,但它不支持Thumb指令集
9采用的是(5)级流水线设计。存储器系统根据哈佛体系结构(程序和数据空间独立的体系结构)重新设计,区分数据总线和指令总线。
1.7.简述ARM9和ARM9E的不同点
ARM9微处理器系列
ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。具有以下特点:
- 5级整数流水线,指令执行效率更高。
- 提供1.1MIPS/MHz的哈佛结构。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- MPU支持实时操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。
ARM9系列微处理器包含ARM9 20T、ARM9 22T和ARM940T三种类型,以适用于不同的应用场合。
ARM9E微处理器系列
ARM9E系列微处理器为可综合处理器,使用单一的处理器内核提供了微控制器、DSP、Java应用系统的解决方案,极大的减少了芯片的面积和系统的复杂程度。ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。
ARM9E系列微处理器的主要特点如下:
- 支持DSP指令集,适合于需要高速数字信号处理的场合。
- 5级整数流水线,指令执行效率更高。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 支持VFP9浮点处理协处理器。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- MPU支持实时操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
- 主频最高可达300MIPS。
ARM9系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。
ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三种类型,以适用于不同的应用场合。
11采用的是什么架构的指令
ARMv6
嵌入式操作系统的特点
嵌入式操作系统完成系统初始化及嵌入式应用的任务调度和控制等核心功能,其内核精简,具有课配置特性,并与高层应用紧密关联。嵌入式操作系统具有相对不变性。主要特点如下
(1) 体积小
有别于一般的计算机处理系统,不具备想硬盘那样大容量的存储介质,大多使用闪存作为存储介质。这就要求只能运行在有限的内存中,不能使用虚拟内存,中断的使用也受到限制。因此,嵌入式操作系统必须结构紧凑,体积微小。
(2) 实时性
大多数嵌入式系统都是实时系统,而且多是强实时多任务系统,因此要求相应的嵌入式操作系统也必须是实时操作系统。实时操作系统作为操作系统的一个重要分支已成为一个热点研究领域,主要包括探讨实时多任务调度算法和可调度性、死锁接触等问题
(3) 特殊的开发调试环境
完整的集成开发环境是每一个嵌入式系统开发人员所期待的。一个完整的嵌入式系统的集成开发环境,一般需要提供的工具是编译/链接器、内核调试/跟踪器和集成图形界面开发平台。其中集成图形界面开发平台包括编辑器、调试器、软件仿真器和监视器等
SecureCore处理器系列的特点
SecureCore提供了基于高性能的32为RESC技术的安全解决方案。除了具有体积小、功耗低、代码密度高等特点外,还具有自己的特别优势,即提供安全解决方案支持。主要特点有
(1) 支持ARM指令集和Thumb指令集,以提高代码密度和系统性能
(2) 采用软内核技术一提供最大限度的灵活性,可以防止外部对其进行扫描探测
(3) 提供了安全特性,可以抵制攻击
(4) 提供面向智能卡和低成本的存储保护单元MPU
(5) 可以集成用户自己的安全特性和其它的协处理器
SecureCore包含SC100、SC110、SC200和SC210四种类型
SecureCore系列处理器主要应用于一些安全产品及应用系统,包括电子商务、电子银行业务、网络、移动媒体和认证系统等
第二章
2-1.简述ARM可以工作在几种模式。
ARM处理器共有7种工作模式:用户模式(User)、快速终端模式(FIQ)、外部中断模式(IRQ)、特权模式(svc)、数据访问中止模式(Abort)、未定义指令中止模式(Undef)、系统模式(System)。除用户模式外其他6种模式称为特权模式。在特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式切换。再除去系统模式,其余5种模式又称为异常模式。
核有多少个寄存器?
ARM处理器有如下37个32位长的寄存器:
(1)30个通用寄存器;
(2)6个状态寄存器:1个CPSR(Current Program Status Register,当前程序状态寄存器),5个SPSR(Saved Program Status Register,备份程序状态寄存器);
(3)1个PC(Program Counter,程序计数器)。
2-3.什么寄存器用于存储 PC和LR寄存器?
寄存器R15称为程序计数器(Program Counter,PC),寄存器R14又被称为连接寄存器(Link
Register,LR)。
2-4.R13通常用来存储什么?
R13(the Stack Point,SP,栈指向),用于存储堆栈指针。
2-5.哪种模式使用的寄存器最少
用户模式和系统模式
的(第5位T位)反映了处理器的状态。P15
有哪几个异常类型?P20
ARM体系结构中,存在7种异常处理。
复位异常、未定义指令异常、软中断、预取指令异常、数据访问中止异常、外部中断请求、快速中断请求。
2-8.复位后,ARM处理器处于何种模式、何种状态?
管理模式(svc),软中断和系统复位后进入管理模式,ARM状态(异常中断(Exception)处理。在进入异常中断后,内核自动切换到ARM状态。即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断处理程序返回前,程序再切换到ARM状态。 ARM处理器总是从ARM状态开始执行。因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,调用该Thumb程序。)
指令有什么作用?
BIC(Bit Clear)位清零指令,将寄存器Rn的值与第2个源操作数shifter_operand的值的反码按位做“逻辑与”操作,结果保存到Rd中。指令的语法格式
BIC{
2-10.当指令SWI指令时,会发生什么?
软件中断指令(Software Interrupt,SWI)用于产生软中断,从而实现从用户模式变换到管理模式,CPSR保存到管理模式的SPSR中,执行转移到SWI向量,在其他模式下也可以使用SWI指令,处理器同样切换到管理模式。
流水线的 概念和原理
处理器按照一系列步骤来执行每一条指令,典型步骤如下
(1)从存储器读取指令(fetch)
(2)译码鉴别他是属于哪一条指令(decode);
(3)从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(reg)
(4)将操作数进行组合以得到结果或存储器地址(ALU)
(5)如果需要,则访问存储器一存储数据(mem)
(6)将结果写回到寄存器堆(res)
并不是所有的指令都需要上述每一个步骤,但是,多数指令需要其中的多个步骤。这些步骤往往使用不同的硬件功能,如ALU可能只在第4步中用到。因此,如果一条指令不是在前一条指令结束之前开始,那么在每一步骤内处理器只有少部分硬件在使用。
有一种方法可以明显改善硬件资源的使用率和处理器的吞吐量,这就是当前一条指令结束之前就开始下一条指令,即通常所说的流水线技术。流水线是RISC处理器执行指令时采用的机制。使用流水线,可在取下一条指令的同时译码和执行其他指令,从而加快执行的速度。可以把流水线看作是汽车生产线,每个阶段只完成专门的处理器任务。
采用上述操作顺序,处理器可以这样来着组织:当一条指令刚刚执行完步骤(1)并转向步骤(2)时,下一条指令就开始执行步骤(1)。从原理上说,这样的流水线应该比没有重叠的指令执行快6倍,但由于硬件结构本身的一些限制,实际情况会比理想情况差一些。
流水线的分类
3级流水线ARM组织 取指令 译码
5级流水线ARM组织 取指令 译码
5级流水线ARM组织
取指令 发射
执行
执行
译码
缓冲/数据
执行
回写
存储 回写
影响流水线性能的因素: 1互锁:一条指令的结果被用作下一条指令的操作数
2 跳转指令
存储管理单元(MMU)
在创建多任务嵌入式系统时,最好有一个简单的方式来编写、装在及运行各自独立的任务。目前大多数的嵌入式系统不再使用自己定制的控制系统,而使用操作系统来简化这个过程。较高级的操作系统采用基于硬件的存储管理单元(MMU)来实现管理操作。
MMU提欧诺个的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中运行。在带MMU的操作系统下,运行的任务无需知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。
MMU提供了一些资源以允许使用虚拟存储器(将系统物理存储器重新编址,可将其看成一个独立于系统物理存储器的存储空间)。MMU作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的五物理地址,即在物理主存中的地址。这个转换过程允许运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置。
这样存储器就有两种类型的地址:虚拟地址和物理地址。虚拟地址由编译器和链接器在定位程序时分配;物理地址用来访问实际的主存硬件模块(物理上程序存在的区域)
高速缓冲存储器(Cache)
Cache是一个容量小但存取速度非常快的存储器,它保存最近用到的存储器数据副本。对于程序员来说,Cache是透明的。它自动决定保存哪些数据、覆盖哪些数据。现在Cache通常与处理器在同一芯片上实
现。Cache能够发挥作用是因为程序具有局部性特性。所谓局部性就是只在任何特定的时间,处理器趋于对相同区域的数据(如堆栈)多次执行相同的指令(如循环)。
Cache经常与写缓存器(write buffer)一起使用。写缓存器是一个非常小的先进先出(FIFO)存储器,谓语处理器核与主存之间。使用写缓存的目的是,将处理器核和Cache从较慢的主存写操作中解脱出来。当CPU想主存储器做写入操作时,它先将数据写入到写缓存区中,由于写缓存器的速度很高,这种写入操作的速度也将很高。写缓存区在CPU空闲时,以较低的速度将数据写入到主存储器中相应的位置。
通过引入Cache和写缓存区,存储系统的性能得到了很大的提高,同时也带来了一些问题。例如,由于数据将存在系统中不同的物理位置,可能造成数据的不一致性;由于写缓存区的优化作用,可能有些写操作的执行顺序不是用户期望的顺序,从而造成操作错误。
异常
ARM体系机构中,存在7种异常处理。当异常发生时,处理器会把PC设置为一个特定的存储地址。这一地址放在被称为向量表的特定地址范围内。向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。
存储器映射地址0x00000000是为向量表(一组32位字)保留的。在有些处理器中,向量表可以选择定位在存储空间的高地址(从偏移量0xffff0000开始)
ARM的7种异常
异常类型
复位异常(Reset)
软中断异常(Software Abort)
预取异常(Prefetch Abort)
数据异常(Data Abort)
外部中断请求(IRQ)
快速中断请求(FIQ)
响应后处理器模式
管理模式
管理模式
数据访问中止模式
数据访问中止模式
外部中断请求模式
快速中断请求模式
执行低地址 执行高地址
0x00000000 0xFFFF0000
0x00000008 0xFFFF0008
0x0000000C 0xFFFF000C
0x00000010 0xFFFF0010
0x00000018 0xFFFF0018
0x0000001C 0xFFFF001C
未定义指令异常(Undefined interrupt) 未定义指令中止模式
0x00000004 0xFFFF0004
注:0x00000014 和0xFFFF0014被保留
异常返回时,SPSR内容恢复到CPSR,连接寄存器R14的内容恢复到程序计数器(PC)
异常的优先级
优先级
最高 1
2
3
4
5
6
最低 7
异常
复位异常
数据中止
快速中断请求
外部中断请求
预取指令异常
软中断
未定义指令
软中断异常和未定义指令异常享有相同的优先级
异常处理向量表
快速中断请求
外部中断请求
0x1C
0x18
保留
数据异常
预取异常
软中断异常
未定义指令异常
复位异常
0x10
0x0C
0x08
0x04
0x00
当一个异常处理返回时,一共有3件事情需要处理: 通用寄存器的恢复、状态寄存器的恢复及PC指针的恢复。(ARM指令集请看附件)
第三章
3-1.比较ARM指令和Thumb指令的不同。
Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度但是它不如ARM指令的效率高 .Thumb 不是一个完整的体系结构,不能指望处理只执行Thumb 指令而不支持 ARM 指令集.因此,Thumb 指令只需要支持通用功能,必要时可以借助于完善的 ARM 指令集,比如,所有异常自动进入 ARM 状态.在编写 Thumb 指令时,先要使用伪指令 CODE16 声明,而且在 ARM
指令中要使用 BX指令跳转到 Thumb 指令,以切换处理器状态.编写 ARM 指令时,则可使用伪指令
CODE32声明.
Thumb 指令集没有协处理器指令,信号量指令以及访问 CPSR 或 SPSR 的指令,没有乘加指令及 64 位乘法指令等,且指令的第二操作数受到限制;除了跳转指令 B 有条件执行功能外,其它指令均为无条件执行;大多数 Thumb 数据处理指令采用 2 地址格式.Thumb指令集与 ARM 指令的区别一般有如下几点:
跳转指令
程序相对转移,特别是条件跳转与 ARM 代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移.
数据处理指令
数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第 3 个寄存器中.数据处理操作比 ARM 状态的更少,访问寄存器 R8~R15 受到一定限制.除 MOV 和
ADD 指令访问器 R8~R15 外,其它数据处理指令总是更新 CPSR 中的 ALU 状态标志.访问寄存器 R8~R15
的 Thumb 数据处理指令不能更新 CPSR 中的 ALU 状态标志.
单寄存器加载和存储指令
在 Thumb 状态下,单寄存器加载和存储指令只能访问寄存器 R0~R7
批量寄存器加载和存储指令
LDM 和 STM 指令可以将任何范围为 R0~R7 的寄存器子集加载或存储. PUSH 和 POP 指令使用堆栈指令
R13 作为基址实现满递减堆栈.除 R0~R7 外,PUSH 指令还可以存储链接寄存器 R14,并且 POP 指令可以加载程序指令PC
3-2.如何从ARM状态切换到Thumb状态?P54
对于汇编程序来说,可以有两种方法来实现程序状态的切换。第一种方法是利用连接器提供的交互子程序Veneer来实现程序状态的切换,这时用户可以使用指令BL来调用子程序;第二种方法是用户自己编写状态切换的程序。
BX指令
ARM状态下的BX指令,使程序跳转到指令中指定的参数Rm所指定的地址执行程序,Rm的第0位复制到CPSR中的T位,bits[31∶1]移入PC。
指令的语法格式如下:
BX{
3-3.在ARM汇编中如何定义一个全局的数字变量?P61
GBLA、GBLL和GBLS伪操作用于定义一个ARM程序中的全局变量并将其初始化。其中GBLA伪操作用于定义一个全局的数字变量并初始化为0。格式为:
GBLA
***和LDR的用法有什么区别
ADR:
这是一条小范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。使用的格式:ADR register,exper。在编译源程序时,汇编器首先计算出当前PC到exper的偏移值#offset_to_exper,然后会用一条ADD或者SUB指令来替换这条伪指令,例如:ADD register,PC,#offset_to_exper。
注意,标号exper与指令必须在同一代码段。
ADRL:
这是一条中等范围的地址读取伪指令,它将基于PC的相对偏移的地址值读到目标寄存器中。
使用的格式:ADRL register,exper。在编译源程序时,汇编器会用两条合适的指令来替换这条伪指令。 例如:
ADD register,PC,offset1
ADD register,register,offset2
与ADR相比,它能读取更大范围的地址。
注意,标号exper与指令必须在同一代码段。
LDR:
第一种情况:
当LDR用做ARM指令时,它将基于PC的相对偏移地址处存储的值读到目标寄存器中。
应用格式:LDR register,[expr]
第二种情况:
当LDR用做ARM伪指令时,它用于大范围的地址读取。
其实说它用于大范围的读取,还不如说它用于大范围的地址赋值。我们来看一下这条伪指令的应用格式:LDR register,=expr/label_expr ,显然,我们可以直观的看出,指令的目的就是要将expr或label_expr赋值(=)给register.所以在编译时,当expr或label_expr的值没有超出MOV和MVN的范围时,采用MOV或MVN指令来代替这条伪指令就显得理所当然了。当expr或label_expr的值超出MOV和MVN的范围时,汇编器将expr或label_expr放入文字池中,并使用一条程序相对偏移指令LDR从文字池读出常量。例如:LDR
register,[PC,#offset to literal pool]
ADR伪指令将给予PC相对偏移地址或基于寄存器相对偏移地址值读取到寄存器中。
LDR指令装载的地址是绝对地址,即PC相关地址
过程调用标准的内容是什么?(书上没有,一下为网上收集的内容,如果有听课的同学,请更正并通知大家)
过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规则, ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。
寄存器使用规则
(1) 子程序间通过寄存器R0~R3传递参数,寄存器R0~R3可记作A1~A4。被调用的子程序在返回前无须恢复寄存器R0~R3的内容。
(2) 在子程序中,ARM状态下使用寄存器R4~R11来保存局部变量,寄存器R4~R11可记作
V1~V8;Thumb状态下只能使用R4~R7来保存局部变量。
(3) 寄存器R12用作子程序间调用时临时保存栈指针,函数返回时使用该寄存器进行出栈,记作IP;在子程序间的链接代码中常有这种使用规则。
(4) 通用寄存器R13用作数据栈指针,记作SP。
(5) 通用寄存器R14用作链接寄存器 ;
(6) 通用寄存器R15用作程序计数器,记作PC 。
数据栈使用规则
过程调用标准规定数据栈为FD类型,并且对数据栈的操作时要求8字节对齐的。
参数传递规则
1. 参数个数可变的子程序参数传递规则
对于参数个数可变的子程序,当参数个数不超过4个时,可以使用寄存器R0~R3来传递;当参数个数超过4个时,还可以使用数据栈进行参数传递。
2. 参数个数固定的子程序参数传递规则
如果系统不包含浮点运算的硬件部件且没有浮点参数时,则依次将各参数传送到寄存器R0~R3中,如果参数个数多于4个,将剩余的字数据通过数据栈来传递;
如果包括浮点参数则要通过相应的规则将浮点参数转换为整数参数,然后依次将各参数传送到寄存器R0~R3中。如果参数多于4个,将剩余字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。
如果系统包含浮点运算的硬件部件,将按照如下规则传递:
各个浮点参数按顺序处理
为每个浮点参数分配寄存器。分配方法是:找到编号最小的满足该浮点参数需要的一组连续的FP寄存器进行参数传递。
子程序结果返回规则
(1)结果为一个32位的整数时,通过寄存器R0返回;结果为一个64位整数时,通过寄存器R0,R1返回。
(2)结果为一个浮点数时,可以通过浮点运算部件的寄存器F0、D0或者S0来返回;结果为复合型的浮点数(如复数)时,可以通过寄存器F0~Fn或者D0~Dn来返回。
(3)对于位数更多的结果,需要通过内存来传递。
3-6.什么是内联汇编?什么是嵌入型汇编?两者之间的区别是什么?
内联汇编是包含有C程序内容的汇编程序,而嵌入型汇编是一个独立的子程序,C程序可调用其执行
区别:嵌入型可带参数,嵌入型汇编_asm声明的常规函数放在.emb_text段中
3-7.汇编代码中如何调用C代码中定义的函数?P90
如C中定义函数int g(int,int,int);先在汇编程序开始处声明C程序g(),如:IMPORT g
汇编中调用指令为:BL g
网上资料:在ARM开发工具编译环境下,汇编程序中要使用IMPORT伪操作声明将要调用的C程序。
3-8.C++代码中如何包含C头文件?
从C++调用C头文件之前,C头文件必须包含在extern“C”命令中。
(1) 在C++中使用系统的C头文件 : 要包括标准的系统C头文件,如stdio.h,不必进行任何特殊的操作,由编译器自动包含标准C头文件
(2) 在C++中使用自定义的C头文件:要包含自己的C头文件,用户必须将#include命令包在extern“C”语句中。
第五章
5-1.S3C2410核心电压是多少?
1.8或者2.0V 内部存储器和外围设备供电电压为3.3V
接口电路的作用是什么?
主要用于芯片内部测试及对系统进行仿真、调试
5-3.本章介绍的系统采用的是什么样的复位电路?
系统监督复位芯片IMP811S
Flash的特点是什么?P134
芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中,NOR的传输效率很高,在1~4MB的小容量是具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
(以上为网上的说法)
Flash存储器是一种可在系统(In-System)进行电擦写,掉电后信息不丢失的存储器。它具有低功耗、大容量、擦写速度快、可整片或分扇区在系统编程(烧写)、擦除等特点,并且可由内部嵌入的算法完成对芯片的操作。
1) Nor Flash带有通用的SRAM接口,可以轻松的挂接在CPU的地址、数据总线上,对CPU接口要求低。其特点是芯片内执行(XIP),这样,应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。
2) 容量较小,一般在1~16M之间,但是价格要比 Nand Flash高。
3) 不存在坏块问题,位翻转现象出现的几率较小。
4) 寿命:擦写次数在十万次。
5) 其升级比较麻烦,更换不同容量的器件时不方便。
6) 读写性能:要求在进行擦除前先要将目标块内所有的位都写为1.,执行一个写入/擦除操作的时间约为5s,而Nand为4ms,但是读速度稍快一些。
5-5.比较 Nand Flash和Nor Flash的不同 。(同上,见P134)6方面不同
1.接口对比
2.容量和成本对比
3.可靠性对比
4.寿命对比
5.升级对比
6.读写性能对比
的特点与作用是什么?
特点:不具有掉电保持数据的性能,存储速度大大高于Flash存储器,具有读/写的属性。单位空间存储容量大,价格便宜。
作用:主要用作程序的运行空间、数据及堆栈区。
232的作用是什么?
9针RS232信号电平转换
5-8.S3C2410处理器上集成的A/D转换器性能参数是什么?
分辨率、转换速率、量化误差、偏移误差、满刻度误差、线性度。
第七章
7-1.简述交叉开发的概念
通常,程序是在一台计算机上编译,然后再分布到将要使用的其他计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,该过程就叫做
交叉编译。
除了兼容性这个明显的好处之外,交叉编译还由于以下两个原因而非常重要:
1. 当目标系统对其可用的编译工具没有本地设置时。
2. 当主机系统比目标系统要快得多,或者具有多得多的可用资源时
编译器运行在x86主机上,却编译出可以在ARM上运行的可执行程序,这种编译器就是交叉编译器(cross compiler),而采用交叉编译器进行编译就是指交叉编译(cross compiling),而交叉编译器相关的环境就是指交叉编译环境(cross compiling environment)。
Linux 交叉开发采用宿主机和目标机的模式进行。宿主机是一台运行Linux(如:RedHat)的PC 机,目标机即JXARM9-2410 教学实验系统。开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,这种代码并不能在宿主机上执行,而只能在目标机上执行。然后把可执行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。宿主机和目标板的处理器一般都不相同,宿主机为Intel 处理器,而目标板如JXARM9-2410 为SAMSUNG S3C2410。
Linux交叉开发包括Linux内核的开发和Linux应用程序的开发
7-3.简述Bootloader的作用。(P208,并且注意其组成及结构。)
Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。
嵌入式系统世界已经有各种各样的Bootloader,种类划分也有多种方式。除了按照处理器体系结构不同划分以外,还有功能复杂程度的不同。
7-6.列举出3种常见嵌入式Linux文件系统格式。
1. EXT2/EXT3 /JFFS2
7-8.利用NFS调试新文件系统有什么好处?(P253,还要熟悉其搭建过程和指令)
包括以下几个方面:
1) 本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一台机器上而且可以通过网络访问到。
2) 用户不必在每个网络上机器里头都有一个home目录。Home目录可以被放在NFS服务器上并且在网络上处处可用。
3) 诸如软驱、CD-ROM之类的存储设备可以在网络上面被别的机器使用。这可以减少整个网络上的可移动介质设备的数量。