一、嵌入式系统
1.定义:以应用为中心,计算机技术为基础,软硬件可裁剪,适合应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2.特点
1》专用,软硬件可裁剪可配置
2》低功耗、高可靠性、高稳定性。
3》软件代码短小精悍
4》代码可固化(为提高执行速度和系统可靠性,嵌入式中的软件一般固化在存储器芯片中或单片机本身中,而不是存储于磁盘中)
5》实时性(嵌入式系统不等于实时系统)
3.组成
i应用软件-----嵌入式操作系统------硬件设备
ii嵌入式硬件设备包括:嵌入式处理器和外围器件。
iii核心是嵌入式处理器(CPU)它与通用处理器的区别:
① 嵌入式处理器大多工作在为特定用户群专门设计的系统中
② 它将通用处理器中的许多由板卡完成的任务集成到芯片内部,利于设计趋于小型化
③ 很高的效率和可靠性
iiii外围设备:嵌入式系统中完成存储、通信、调试、显示等辅助功能的其他部件;
一些常见的嵌入式外围器件(按功能分):
i存储设备:RAM、SRAM、Flash
ii通信设备:RS-232接口、SPI接口、以太网接口
iii显示设备:显示屏
4.常见的存储器概念分析:
根据掉电数据是否丢失可分为:RAM、ROM
RAM随机存储器:访问速度比较快,但是掉电后数据丢失(人们通常说的内存即指系统中的RAM)
1》SRAM静态存储器(造价高,用于一二级缓存,有自充电路)和DRAM动态存储器(编写代码控制充电)
2》ROM只读存储器:掉电后数据不会丢失,其中又分为EPRAM(可擦除可编程ROM)和EEPRAM(电可擦除ROM)但使用不是很方便。
3》Flash是一种非易失性存储器,掉电不会丢失,它擦写方便、访问速度快,亦称Flash ROM,它又分为NOR flash(三大总线,数据、地址、控制,容量1——16m)和NAND flash(总线复用,容量1——8g)
5.嵌入式系统开发
①交叉编译:在一个平台上生成可以在另一个平台上执行的代码。(需要注意的是:编译器本身也是程序,也要在与之对应的某个CPU平台上运行)
②嵌入式的交叉编译分为:交叉编译、交叉链接
③ARM的交叉编译器为arm-elf-gcc,交叉链接器为arm-elf-ld。
④交叉编译之后是交叉调试:软件(网络)和硬件方式(串口、并口、JTAG)的方法
二、ARM体系结构
1.ARM(advanced RISC machines):一个公司的名称、一类微处理器、一种技术的名称。
2.嵌入式RISC微处理器
①RISC是精简指令集计算机;有固定的指令长度,减少指令的格式和寻址方式
②CISC是复杂指令集计算机,指令长度不固定,每次使用前都必须先判断指令长度
3.数据和指令类型
基本数据类型:Byte:字节,8bits
Halfword:半字,16bits(半字节必须与2字节边界对齐)??怎么理解?
Word:字,32bits(字节必须与4字节边界对齐)
①ARM采用的是32位构架
②ARM是32位指令集
③Yhumb是16位指令集
4.处理器的工作模式(7种模式,1种非特权模式user,6种特权模式又分为5种异常模式(除了system模式))用户、管理、系统,中止、未定义,中断、快中断-----七种模式
此外:Cortext-A特有的模式 : Monitor——————也是特权模式,用于执行安全监控代码,一般用于网银等方面。
①目的:资源控制,最主要控制寄存器;不同模式,控制的寄存器不同
②什么是寄存器:
i内核---寄存器---cache---存储器
ii-cache高级缓存区;
③什么情况下会引起CPU复位?
i上电复位
ii人为复位
iii欠压、过压复位
iiii看门狗复位
④什么情况下会引起CPU中断?
i外设(串口、IIC总线)中断
⑤fiq和irq的区别?
它们的概念是相对的,看内个中断被指定为高级中断,则其他的都为低级中断。
⑥supervisor为管理模式或者特权模式:CPU复位或者软件中断指令执行时会进入这种模式
undef未定义指令访问模式
system系统模式(可以直接访问user模式不能直接访问的MMU)
内核需要的数据---指令数据和用户数据
5.ARM寄存器
1.异常不可屏蔽,但中断可以屏蔽。。。。。fiq和irq也是异常产生的中断;中断是外设引起,它一定属于异常中的一种;
2.ARM状态:所有指令32bits宽,程序指针PC,只能存放指令的地址,pc的值由bits[31:2]决定,bits[1:0]一直是0;
3.thumb状态:所有指令16bits宽,指令halfword半字对齐。pc的值由bits[31:1]决定,bits[0]一直是0;
4.Crotext—A以前的ARM版本,处理器有37个32位长的寄存器,其中包括30个通用寄存器,6个状态寄存器:1个CPSR当前程序状态寄存器,5个SPSR备份程序状态寄存器和1个PC程序计数器。
5. R0-R7:8种模式共用
R8-R12:FIQ私有一组,其他共用一组。
R13(存放栈指针sp)
R14(用来保存PC(R15))
R15(PC):程序计数器
程序的状态寄存器CPSR
SPSR:保存CPSR
6.异常处理(重点)
1.当异常产生时,必须在ARM状态下,内核为我们实现:(复位不做前3步,只操作pc)(以下步骤无先后顺序)
①拷贝CPSR拷贝到相应模式下的SPSR_
②设置适当的CPSR位,改变处理器状态进入ARM状态,改变处理器模式进入相应的异常模式位,如果有需要,可以设置中断禁止位禁止相应的中断
③保存返回地址到LR_
④设置PC为相应的异常向量
2.返回时,异常处理需要(最起码要操作①②步,两步同时执行)
①从SPSR_恢复CPSR
②从LR_恢复PC
7.字节序
小端:低地址放低字节
大端:低地址放高字节
例:0x12345678------78为低字节
ARM都支持,默认为小端;X86都是小端;powerpc是大端;网络通信时大端。
8.contex系列:
①A-----applications
②R-----Real-Time
③M----MCU
TI:德州仪器(做DSP起家)
Samsung:三星
Freescale:飞思卡尔----以前motorola的
Marvell:马维尔
Qualcomm:高通
Nvidia:英伟达-----显卡、主板
低功耗、低成本的微控控制器方向:cortex-M3/M1/M0
实时方向:cortex-R4
9.ARM指令集
1.所有的ARM指令集均为32-bits长
2.所有的ARM指令都可以条件执行
3.大部分为单周期指令
4.Load/Store架构
1.load架构,数据从存储器走向寄存器(RAM或者ROM)---------ldr 到内核
2.store构架,数据从内核存到RAM或者可读写的EEPROM、FlashRom中—--str到
5.跳转指令
1.B 不能返回,跳转范围PC+32Mbyte和PC-32Mbyte
2.BL <子程序> 执行子程序,保存返回地址到IR,返回时从LR恢复PC
3.注意:对于非叶子节点的函数(嵌套调用了其他函数的函数),LR必须压栈保存
6.协处理器:一组寄存器的集合,包含16个可定义的协处理器
10.Thumb指令集
1.一个16-bits指令集
2.是ARM指令集的一个功能子集
3.ARM/Thumb转换使用BX指令
11.SOC概念
1.CPU上的bus总线-----大脑的神经
2.AMBA----先进、微处理、总线、架构AMBA(Advanced Microcontroller Bus Architecture) 分为:AHB总线(速度快些)和APB总线(速度慢些)
3.南、北桥芯片?南桥上挂着键盘、鼠标、串口。。。。北桥挂载的外设:CPU、内存
快速辨别南北桥,北桥芯片理CPU比较近
12.ARM的处理内核
1.ARM处理器的尾缀
1.带T:支持16位Thumb
2.带D:支持片上调试(Debug)
3.带M:内嵌硬件乘法器(Multiplier)
4.带I:支持片上访问电路,嵌入式ICE,支持片上断点和调试点(低成本)
5.带J:支持Jave字解码
6.带E:支持扩展的dsp指令集
7.带F:支持浮点指令集,意味着它有浮点运算的门电路
8.带S:综合,都支持
2.指令流水线
1.PC指向预取的指令,而非正在执行的指令
3.最佳流水线:指令周期CPI=1,所有的操作都在寄存器中(单周期执行),F-取指,D-解码,E-执行
4.分支流水线(有个A-的调整,LR-4在赋值给PC)
5.LDR流水线指令
6.中断流水线,必须自己编写代码修改。。。
3.对齐
4.带cache的ARM7TDMI
1.8k统一(不区分数据和指令)的cache
2.哈佛构架(存储器分为 I----rom 和 D----ram),冯式结构(存储器---rom/ram)
3.三大总线
5.LDR互锁:空间的互锁,E中增加M和I
6.LDM互锁:时间的互锁
1.LDM R13!, {R0 – R3} R13存放指向起始内存的地址
2.MW产生地址回写,写的同时产生下一个地址
7.ARM9E处理器内核
1.前导零计数指令,计算出该数最大的位数是多少
2.饱和算术指令
3.
8.ARM10E系列
1.核到cache的64-bits存储器接口
2.静态分支预测 那么什么是动态分支预测?
3.6级流水线
4.支持“Hit under miss“,cache的一种算法
5.提高中断的实时性的提高
9.顺序代码的执行
1.单核,f – d – e
2.多发射,每个核中有多个 f-d-e 在执行。(X86,双核多发射)
10.ARM V6体系
1.提高多媒体性能
2.SIMD:单指令流,多数据流。。。。(音频和 并发执行)
3.三种方式去分辨
1.紧耦合的向量中断控制器
2.向量中断控制器(半导体)
3.非向量中断(效率,最慢)
4.中断延迟:指从硬件中断发生到开始执行中断处理程序第一条指令之间的这段时间,中断延迟 = 识别中断时间 + [等待中断打开时间] + [关闭中断时间]