林科大涉外嵌入式整理资料全.docx
《林科大涉外嵌入式整理资料全.docx》由会员分享,可在线阅读,更多相关《林科大涉外嵌入式整理资料全.docx(17页珍藏版)》请在冰豆网上搜索。
林科大涉外嵌入式整理资料全
嵌入式系统的定义:
在系统中有些计算机是作为某个专用系统中的一个部件而存在的,像这样“嵌入”到更大、专用的系统中的计算机系统,称之为“嵌入式计算机”、“嵌入式计算机系统”或“嵌入使系统”。
嵌入式系统的组成:
:
通常由嵌入式处理器、外围设备、嵌入式操作系统和应用软件等几大部分组成。
实时系统(RealTimeSystem):
是指产生系统输出的时间对系统至关重要的系统。
从输入到输出的滞后时间必须足够小到一个可以接受的时限。
实时系统的分类:
根据响应时间可分为3种类型:
1.强实时系统2.弱实时系统3.一般实时系统
根据确定性可分为2种类型:
1.硬实时系统2.软实时系统
实时操作系统(RTOS)是具有实时性且能支持实时控制系统工作的操作系统。
RTOS与通用计算机OS的区别:
实时性:
响应速度快,只有几微秒;执行时间确定、可预测;
代码尺寸小:
10~100KB,节省存空间,降低成本;
应用程序开发较难;
需要专用开发工具:
仿真器、编译器和调试器等。
单片机系统、嵌入式系统和SOC系统三者有何区别和联系?
单片机8位的电子器件,部集成Flash、RAM、总线逻辑、定时器/计数器、WatchDog、I/O,串行口、脉宽调制输出、A/D,D/A等各种必要的功能模块和外围部件。
SoC就是SystemonChip,SoC是一种基于IP(IntellectualProperty)核嵌入式系统设计技术。
它结合了许多功能区块,将功能做在一个芯片上,ARMRISC、MIPSRISC、DSP或是其他的微处理器核心,加上通信的接口单元
交叉开发环境:
是指实现编译、和调试应用程序代码的环境与运行应用程序的环境不同,它分散在有通信连接的宿主机与目标机环境之中。
宿主机(Host)是一台通用计算机,一般是PC机。
它通过串口或网络连接与目标机通信。
目标机(Target)可以是嵌入式应用软件的实际运行环境,也可以是能替代实际环境的仿真系统。
嵌入式系统的调试方法:
1.源程序模拟器方式2.监控器方式3.仿真器方式
源程序模拟器(Simulator)是在PC机上,通过软件手段模拟执行为某种嵌入式处理器编写的源程序的测试工具。
监控器(Monitor)调试方式需要目标机与宿主机协调。
首先,在宿主机和目标机之间通过串口、以太口等建立物理连接,然后在宿主机上运行调试器,目标机运行监控程序和被调试程序,从而建立宿主机与目标机的逻辑连接。
宿主机通过调试器与目标机的监控器建立通信连接,它们相互间的通信遵循远程调试协议。
仿真器调试方式是在微处理器的部嵌入额外的控制模块。
当特定的触发条件满足时,系统将进入某种特殊状态。
在这种状态下,被调试的程序暂时停止运行,宿主机的调试器通过微处理器外部特设的通信口访问各种寄存器、存储器资源,并执行相应的调试指令。
BSP(板级支持包)
由于嵌入式系统中采用微处理器/微控制器的多样性,嵌入式操作系统的可移植性显得更加重要。
所以有些嵌入式操作系统的核明确分成两层,上层一般称为“核”,而低层则称为“硬件抽象层”,即BSP。
板级支持包的主要功能包括两部分:
在系统启动时,对硬件进行初始化
为驱动程序提供访问硬件的手段
ARM即AdvancedRISCMachines的缩写
ARM处理器的三大特点是:
①耗电少、成本低、功能强;
②16位/32位双指令集;
③全球众多合作伙伴保证供应。
ARM体系结构的特点:
①高的指令吞吐率
②出色的实时中断响应
③体积小、性价比高的处理器宏单元
ARM含37个寄存器,其中:
31个通用32位寄存器
6个状态寄存器
指令执行的阶段
计算机中的1条指令的执行可以分若干个阶段:
①取指,从存储器中取出指令(fetch);
②译码,指令译码(dec):
③取操作数,假定操作数从寄存器组中取(reg);
④执行运算(ALU);
⑤存储器访问,操作数与存储器有关(mem);
⑥结果写回寄存器(res)。
ARM7体系结构的3级流水线:
采用了3级流水线,分为取指,译码和执行。
ARM9体系结构的5级流水线
5级流水线把存储器的取指与数据存取分开,增加了I-Cache和D-Cache以提高存储器存取的效率,增加了数据写回的专门通路和寄存器,以减少数据通路冲突。
这样,5级流水线分为:
取指、指令译码、执行、数据缓存和写回。
ARMAMBA接口
ARM处理器也可以通过先进微控制器总线架构AMBA(AdvancedMicrocontrollerBusArchitecture)来扩展不同体系架构的宏单元及I/O部件。
AMBA事实上已成为片上总线OCB(OnChipBus)标准。
AMBA包括以下三类总线:
先进高性能总线AHB
先进系统总线ASB
先进外围总线APB
ARM7TDMI名字原义如下:
ARM7ARM632位整数核的3V兼容的版本;
T16位压缩指令集Thumb;
D在片调试(Debug)支持,允许处理器响应调试请求暂停;
M增强型乘法器(Multiplier),与以前处理器相比性能更高,产生全64位结果;
I嵌入式ICE硬件提供片上断点和调试点支持。
主要特点
采用了3级流水线结构,指令执行分为取指、译码和执行等3个阶段;
ARM9TDMI
主要特点
采用指令和数据分离访问的方式,即采用了指令Cache和数据Cache。
用专门硬件来直接完成ARM与Thumb指令的译码。
ARM9TDMI也有协处理器接口,允许在芯片增加浮点、数字信号处理或其他专用的协处理器。
ARM9TDMI也提供相应的软核。
ARM9E-S是具有DSP功能的能执行v5TE版ARM指令的ARM9TDMI软核,当然其芯片面积要增加30%。
在ARM9流水线设计中,增加专用流水段用于存储器访问和将结果写回到寄存器组。
而且,寄存器读也移到译码段。
这些改变通过减少在单一时钟周期操作最大的逻辑数目,允许更高的时钟频率。
ARM920T处理器核是在ARM9TDMI处理器核基础上,增加了分离式的指令Cache和数据Cache,并带有相应的存储器管理单元I-MMU和D-MMU、写缓冲器及AMBA接口等。
ARM处理器支持下列数据类型:
Byte字节,8位;
Halfword半字,16位(半字必须与2字节边界对准);
Word字,32位(字必须与4字节边界对准)。
ARM体系结构支持7种处理器模式。
处理器模式
说明
用户
usr
正常程序执行模式
FIQ
Fiq
支持高速数据传送或通道处理
IRQ
irq
用于通用中断处理
管理
svc
操作系统保护模式
中止
abt
实现虚拟存储器和/或存储器保护
未定义
und
支持硬件协处理器的软件仿真
系统
sys
运行特权操作系统任务
硬件启动程序的工作一般包括:
(1)分配中断向量表
(2)初始化存储器系统
(3)初始化各工作模式下的堆栈
(4)初始化有特殊要求的硬件模块
(5)初始化用户程序的执行环境
(6)切换处理器的工作模式
(7)呼叫主应用程序
C语言与汇编语言混合编程应遵守的规则
在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。
ATPCS规定了一些子程序间调用的基本规则,比如:
寄存器的使用规则
子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。
在子程序中,使用寄存器r4~r11保存局部变量。
寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。
寄存器r13用作堆栈指针,记作SP。
寄存器r14称为寄存器,记作LR。
该寄存器用于保存子程序的返回地址。
寄存器r15称为程序计数器,记作PC。
堆栈的使用规则
堆栈采用满递减类型(FD,FullDescending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向含有效数据项的最低地址。
参数的传递规则
整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数
子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。
结果为浮点数时,通过浮点运算部件的寄存器F0、D0或S0返回
汇编程序调用C程序的方法为:
首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。
例如在一个C源文件中定义了如下求和函数:
intadd(intx,inty){
return(x+y);
}
调用add()函数的汇编程序结构如下:
IMPORTadd;声明要调用的C函数
…
MOVr0,1
MOVr1,2
BLadd;调用C函数add
C程序调用汇编子程序的方法为:
首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。
例如在一个汇编源文件中定义了如下求和函数:
EXPORTadd;声明add子程序将被外部函数调用
…
add;求和子程序add
ADDr0,r0,r1
MOVpc,lr
…
在一个C程序的main()函数中对add汇编子程序进行了调用:
externintadd(intx,inty);//声明add为外部函数
voidmain(){
inta=1,b=2,c;
c=add(a,b);//调用add子程序
…
}
S3C2410A的I/O口工作原理
接口:
是微处理器(CPU)与外界的连接部分(电路),是CPU与外界世界进行信息交换的中转站。
接口技术研究的是CPU如何与外部世界进行最佳耦合与匹配,以实现双方高效、可靠地进行信息交换的技术。
端口:
在接口电路常包含若干个寄存器,数据传送时,不同的信息送入不同的寄存器,能够用IN/OUT指令对其进行读/写操作的寄存器称为端口寄存器,简称“端口”
端口分类:
数据端口、状态端口和控制端口
与配置I/O口相关的寄存器包括:
端口控制寄存器(GPACON-GPHCON)
端口数据寄存器(GPADAT-GPHDAT)
端口上拉寄存器(GPBUP-GPHUP)
杂项控制寄存器
外部中断控制寄存器(EXTINTN)
ARM系统包括两类中断:
一是IRQ中断,一是FIQ中断。
处理中断的步骤如下:
(1)保存现场。
保存当前的PC值到R14,保存当前的程序运行状态到SPSR。
(2)模式切换。
根据发生的中断类型,进入IRQ模式或FIQ模式。
(3)获取中断源。
以异常向量表保存在低地址处为例,若是IRQ中断,则PC指针跳到0x18处;若是FIQ中断,则跳到0x1C处。
IRQ或FIQ的异常向量地址处一般保存的是中断服务子程序的地址,所以接下来PC指针跳入中断服务子程序处理中断。
(4)中断处理。
为各种中断定义不同的优先级别,并为每一个中断设置一个中断标志位。
当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别到底哪一个中断发生了。
进而调用相应的函数进行中断处理。
(5)中断返回,恢复现场。
当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的地址恢复到PC中,进而继续执行被中断的程序。
通过对G口的操作控制CPU板左下角的LED1和LED2实现轮流闪烁。
voidMain(void){
intflag,i;
Target_Init();//进行硬件初始化操作,包括对I/O口的初始化操作
for(;;){
if(flag==0){
for(i=0;i<1000000;i++);//延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;//配置第8、第9位为输出引脚
rGPGDAT=rGPGDAT&0xeff|0x200;//第8位输出为低电平第9位输出高电平
for(i=0;i<10000000;i++);//延时
flag=1;
}
else{
for(i=0;i<1000000;i++);//延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;//配置第8、第9位为输出引脚
rGPGDAT=rGPGDAT&0xdff|0x100;//第8位输出为高电平第9位输出低电平
for(i=0;i<1000000;i++);//延时
flag=0;
}
}
}
S3C2410A能够接收56个中断请求,但只有32个中断信号(引脚。
)
嵌入式系统的定义:
(IEEE)嵌入式系统是“用于控制、监视或者辅助机器或设备运转的装置”;(一般)以应用为中心,以计算机技术为基础,软件硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
嵌入式系统的特点:
技术密集、专用性强、环境相关度高、功耗限制、成本敏感、操作系统核小、不可垄断
硬件组成:
1、处理器核(核心处理器、时钟分频器、定时器、DMA、中断控制、I/O端口、A/D转换)2、外围电路(电源、晶振、复位、端口、DRAM、Flash、ROM、网口、调试接口]和外设与扩展(USB、LCD、手写笔、键盘、红外等)。
软件组成(由底层向上):
嵌入式硬件层、BSP[嵌入式RTOS(基本组件:
功耗管理、文件管理、GUI、操作系统核、有线无线网络;扩展组件:
汽车电子、浏览器、信息家电、嵌入式数据库)、API]、嵌入式应用系统。
嵌入式处理器分类:
微控制器:
偏重程序流程控制,响应速度;微处理器:
偏重运算功能,数据流较大;嵌入式:
偏重数字信号处理功能;片上系统:
集成度高,可编程模拟电路,可重用IP软核。
体系结构:
·诺依曼:
由CPU、存储器系统和I/O设备组成,存储器系统负责存储全部数据和指令,并可以根据拨给的地址对其进行读写操作,数据和指令存在同一存储器中;哈佛:
程序存储器和数据存储器分开,程序计数器只指向程序存储器而不指向数据存储器。
(哈佛优势:
数据和程序不必再竞争同一端口,加快了机器运行时间)
CISC:
指令数量很多;有些指令执行时间很长,如整块的存储器容拷贝或将多个寄存器的容拷贝到存贮器;编码长度可变,1-15字节;寻址方式多样;可以对存储器和寄存器进行算术和逻辑操作;难以用优化编译器生成高效的目标代码程序。
RISC:
较少,通常少于100;没有较长执行时间的指令;编码长度固定,通常为4个字节;简单寻址;只能对寄存器进行算术和逻辑操作,Load/Store体系结构;采用优化编译技术,生成高效的目标代码程序。
指令流水线技术:
几个指令可以并行执行。
提高了CPU的运行效率,部信息流要求通畅流动。
PC指向正被取指的指令,而非正在执行的指令。
cache:
为什么采用高速缓存:
微处理器的时钟频率比存速度提高快得多,高速缓存可以提高存的平均性能。
高速缓存的工作原理:
高速缓存是一种小型、快速的存储器,它保存部分主存容的拷贝。
存储器分类:
RAM:
RandomAccessMemory随机存取存储器(SRAM、SDRAM、DDR);ROM:
ReadOnlyMemory只读存储器(EEPROM、FLASH:
NOR、NAND);SD卡、CF卡:
SecureDigitalMemoryCard安全数码卡,CompactFlash;硬盘。
数据在存储器中的组织方式:
小端模式(Little-endian):
数据字或双字的高字节存放在存储器的高地址,低字节存放在存储器的低地址;大端模式(Big-endian):
数据字或双字的高字节存放在存储器的低地址,低字节存放在存储器的高地址。
例:
与存储模式无关的:
unsignedlonga=0x12345678;//a在地址0x4000
unsignedlong*b=&a;//b=0x4000
unsignedchar*c=(unsignedchar*)&a;//c=0x4000
取决于存储模式的:
unsignedchard=(unsignedchar)a;
unsignedchare=*c;//小端时e=0x78,大端时e=0x12
ARM处理器工作状态:
ARM状态:
32位,这种状态下执行的是字方式的ARM指令;Thumb状态:
16位,这种状态下执行半字方式的ARM指令。
两个状态之间的切换并不影响处理器模式或寄存器容。
ARM处理器的模式:
用户(usr):
正常程序执行模式;不能直接切换到其它模式。
系统(sys):
运行操作系统的特权任务;与usr类似,但具有可以直接切换到其它模式等特权。
快中断(fiq):
支持高速数据传输及通道处理;FIQ异常响应时进入此模式。
中断(irq):
用于通用中断处理;IRQ异常响应时进入此模式。
管理(svc):
操作系统保护模式;系统复位和软件中断响应时进入此模式。
中止(abt):
用于支持虚拟存和/或存储器保护;在ARM9TDMI没有大用处。
未定义(und):
支持硬件协处理器的软件仿真;未定义指令异常响应时进入此模式。
所有寄存器:
通用寄存器和程序计数器(R0~R15)、状态寄存器[CPSR、SPSR(usr和sys模式时不含)]。
所有的37个寄存器,分成两大类:
31个通用32位寄存器和6个状态寄存器。
程序计数器R15(PC):
正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。
由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。
ARM处理器寻址方式:
寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。
ARM处理器具有9种基本寻址方式:
1.寄存器寻址:
操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。
寄存器寻址指令举例如下:
MOVR1,R2;将R2的值存入R1
SUBR0,R1,R2;将R1的值减去R2的值,结果保存到R0
2.立即寻址:
立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。
立即寻址指令举例如下:
SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位
MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器
3.寄存器移位寻址:
寄存器移位寻址是ARM指令集特有的寻址方式。
当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。
寄存器移位寻址指令举例如下:
MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0,即是R0=R2×8
ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相“与”操作,结果放入R1
4.寄存器间接寻址:
寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。
寄存器间接寻址指令举例如下:
LDRR1,[R2];将R2指向的存储单元的数据读出保存在R1中
SWPR1,R1,[R2];将寄存器R1的值和R2指定的存储单元的容交换
5.基址寻址(变址寻址):
基址寻址就是将基址寄存器的容与指令中给出的偏移量(<4K)相加/减,形成操作数的有效地址。
基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。
寄存器间接寻址是偏移量为0的基址寻址。
基址寻址指令举例如下(前索引寻址):
LDRR2,[R3,#0x0C];读取R3+0x0C地址上的存储单元的容,放入R2
STRR1,[R0,#-4]!
;先R0=R0-4,然后把R0的值寄存到保存到R1指定的存储单元
基址寻址指令举例如下:
LDRR0,[R1,#4];R0=[R1+4],前索引基址寻址
LDRR0,[R1,#4]!
;R0=[R1+4],R1=R1+4,前索引基址寻址,!
表示要更新基址寄存器
LDRR0,[R1],#4;R0=[R1],R1=R1+4,后索引基址寻址
STRR0,[R1,R2];[R1+R2]=R0
6.多寄存器寻址:
多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。
多寄存器寻址指令举例如下:
LDMIAR1!
{R2-R7,R12};将R1指向的单元中的数据读出到R2~R7、R12中(R1自动加4)
STMIAR0!
{R2-R7,R12};将寄存器R2~R7、R12的值保存到R0指向的存储单元中(R0自动加4)
7.堆栈寻址:
堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。
堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。
STMFDSP!
{R1-R7,LR};将R1~R7,LR入栈
LDMFDSP!
{R1-R7,LR};数据出栈,放入R1~R7,LR寄存器
8.块拷贝寻址:
多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。
如:
STMIAR0!
{R1-R7};将R1~R7的数据保存到存储器中。
存储指针R0在保存第一个值之后增加,增长方向为向上增长
STMIBR0!
{R1-R7};将R1~R7的数据保存到存储器中。
存储指针R0在保存第一个值之前增加,增长方向为向上增长
9.相对寻址:
相对寻址是基址寻址的一种变通。
由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。
相对寻址指令举例如下:
BLSUBR1;调用到SUBR1子程序
BEQLOOP;条件跳转到LOOP标号处
ARM存储器访问指令:
加载:
LDRRD,addressing;加载字数据。
后缀:
B无符号字节;H无符号半字;SB有符号字节;SH有符号半字。
存储:
STRRD,addressing;存储字数据。
后缀:
B字节、H半字。
LDR/STR指令用于对存变量的访问、存缓冲区数据的访问、查表、外围部件的控制操作等。
若使用LDR指令加载数据到PC寄存器,则实现程序跳转功能,这样也就实现了程序散转。
数据传送:
MOVRd,operand2;数据传送;MVNRd,operand2;数据非传送。
后缀:
S根据指令结果更新标志N和Z;计算operand2时更新标志C,不影响V。
算术运算:
ADDRd,Rn,operand2;Rd<-Rn+operand2;SUB;RSB;Rd<-operand2-Rn逆向减法;ADC;SBC带进位减法;RSC带进位逆向减法。
这些指令影响N,Z,C和V标志位。
逻辑运算指令:
AND与;ORR或;EOR异或;BIC位清除。
当后缀S时,这些指令根据结果更新标志N和Z,在计算operand2时更新标志C,不影响标志V。
轮询系统(PollingSystems):
简单循环控制系统。
程序依次检查系统的每一个输入条件,一旦条件成立就进行相应的处理。
前后台系统(Foreground-BackgroundSystems):
中断驱动系统。
前台:
中断服务子程序;后台: