2018年11月1日星期四
第一章:嵌入式系统概论
1.嵌入式系统:指操作系统和功能软件集成于计算机硬件之中。
2.嵌入式系统特点:嵌入性,内含计算机,专用性。
3.嵌入式系统分类:嵌入式微处理器,微控制器,DSP处理器,片上系统。
4.三种操作系统:多道批处理系统,分时操作系统,实时操作系统。
5.实时操作系统特点:异步的事件响应,切换时间和中断延迟时间响应,优先级中断和调度,抢占式调度,内存锁定,连续文件,同步。
6.一般实时系统与嵌入式实时系统的区别主要在于应用场合和开发过程:1.一般实时系统应用于实时处理系统的上位机和实时查询系统等实时性较弱的实时系统中,并且提供了开发,调试,运用一致的环境。2.嵌入式实时系统运用于实时性要求高的实时控制系统中,并且运用程序的开发过程是通过交叉开发来完成的,即开发环境与运行环境不一致。嵌入式实时系统具有规模小,可固化,实时性强的特点。
7.嵌入式系统的开发工具:人机界面,系统程序,模拟程序,模块集(包括CPU模块,IO模块和功能模块)。
8.前后台系统:循环中调用相应的函数完成相应的操作,为后台行为。中断服务程序处理异步事件,为前台行为。后台叫任务级,前台叫中断级。
9.操作系统:是计算机中最基本的程序,负责计算机系统的全部软硬件资源的分配与回收,控制与协调等并发活动;提供用户接口,使用户获得良好的工作环境,为用户扩展新的系统功能提供软件平台。
10.实时操作系统:每个任务均有一个优先级,根据各个任务的优先级,动态的切换各个任务,保证对实时性的要求。
11.代码的临界区:指处理不可分割的代码,运行这些代码不可被打断。
12.任务:一个任务也是一个线程,是一个简单的程序,CPU完全属于该程序本身使用。
13.时钟节拍:时钟节拍是特定的周期性中断,时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。
2018年11月19日星期一
第二章:
1.堆栈指针R13(SP):
堆栈操作通常会发生在子程序调用,异常发生或者是程序运行过程中寄存器数量不够时。
寄存器R3作为堆栈指针(SP),用于保存堆栈的出入口地址。
Arm处理器的堆栈操作具有非常大的灵活性,根据堆栈指针的增减方向和指针指向的存储单元的地址是否为空,共有四种堆栈方式:满递增,空递增,满递减,空递减。
2.链接寄存器R14(LR)
寄存器R14称为链接寄存器LR,子程序的返回地址将自动存入R14中。
3.程序计数器R15(PC)
寄存器R5保存程序计数器PC,R15总是指向正在取址的指令。
4.CPSR与SPSR
所有模式全部共享一个程序状态寄存器CPSR,arm内核就是通过使用CPSR来监视和控制内部操作的。
在异常模式中,允许访问用于保存CPSR当前值的备份程序状态寄存器SPSR,每种异常模式都有相应的CPSR。
关系:1.当一个异常模式发生时,将CPSR的当前值保存到相应的异常处理模式下的SPSR,然后设置CPSR为相应的异常模式。2.从异常中断模式退出返回时,可通过保存在SPSR中的值来恢复CPSR。
5.存储器的字和半字
ARM处理器直接支持8位的字节,16位的半字和32位的字,其中以能被4整除的地址开始连续的4个字节构成一个字,从偶数地址开始连续的两个字节构成一个半字。ARM指令的长度为一个字(四个字节),Thumb指令的长度为一个
半字。
6.计算机结构
冯诺依曼结构:把代码作为一种特殊的数据来操作,指令总线,数据总线及存储区域是统一的。
哈弗结构:指令总线,地址总线,存储区域是分开独立的。
7.所有ARM外设都是存储器映射的,编程接口是一组对应于某些存储器地址的寄存器。即外设与内存统一编址,外设寄存器是内存空间的一部分,指令统一。
8.存储控制器:各种不同类型的存储器通过存储器控制器连接到处理器总线上。
9.中断控制器:ARM处理器有两种中断控制器,标准中断控制器和向量中断控制器。
10.初始化代码使处理器从复位状态进入操作系统能够运行的状态。
11.初始化过程为操作系统进行控制准备好硬件,操作系统组织系统资源:外设,存储器,处理时间。
12.流水线特点:执行一条分支指令或修改PC而发生跳转时,会使ARM内核清空流水线;即使产生一个中断,一条处于执行阶段的指令也将完成,流水线的其他指令将会被抛弃。而处理器将从向量表的其他入口(对应的中断向量地址)开始填充流水线。
13.ARM异常类型:复位异常,未定义异常,软件中断异常,预存指令错误异常,数据异常,快速中断异常,外部中断异常。
- 处理器模式:
用户(usr)、系统(sys)、管理(svc)、中止(abt)、未定义(und)、中断(irq)、快速中断(fiq)
特权模式:系统、管理、中止、未定义、中断、快速中断
异常模式:管理、中止、未定义、中断、快速中断
用户:正常程序运行的工作模式,不能直接从用户模式切换到其他模式
系统:用于支持操作系统的特权任务,可以直接切换到其他模式
管理:供操作系统使用的一种保护模式,只在系统复位和软件中断响应时才进入此模式
中止:用于虚拟内存或存储器保护,在ARM7内核中没有多大用处
未定义:支持软件仿真的硬件协处理器,只有在未定义指令异常响应时才进入此模式
中断:中断请求处理,只有在IRQ异常响应时进入此模式
快速中断:快速中断请求处理。只有在FIQ异常响应时进入此模式
2018年11月6日星期二
第四章:硬件结构
1.片外存储器:在CPU外部扩展连接的存储器芯片,具有数据线,地址线,控制线。
2.存储器映射:给存储器分配地址。
3.如果试图访问一个保留地址或未分配区域的地址,ARM将产生预取址中止或数据中止异常。
4.存储器重映射:部分存储单元可以同时出现在不同的地址上,包括引导块(Boot Block)和用于保存异常向量表的少量存储单元。
- Boot Block:芯片复位后被首先运行,功能主要是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否被机密,芯片在应用编程(IAP)以及在系统编程(ISP)的功能。
6.启动代码:从系统上电,到正式运行用户的main函数之前要运行的一段代码。启动代码大部分由汇编指令构成,可以实现向量表定义,堆栈初始化,系统变量初始化,中断系统初始化,IO初始化,外围初始化,地址重映射等操作。
7.时钟系统结构组成:晶体振荡器,唤醒定时器,锁相环PLL,VPB分频器。
8.AHB外设:挂接在芯片内部AHB总线上的外设部件,具有较高的速度,比如向量中断控制器部件和外部存储器控制器部件。
9.VPB外设:挂接在芯片内部VPB总线(由AHB总线转换而来)上的外设部件,速度比AHB外设低,比如GPIO部件和UART部件。
10.如果试图访问一个保留地址或未分配区域的地址,LPC2000系列的ARM将产生预取指中止和数据中止异常。
11.晶体振荡器:通过外接晶振或时钟源位系统提供时钟信号。Fosc
12.复位:复位使ARM内核与外设部件进入一个确定的初始状态。
将计算机系统中的硬件逻辑归位到一个初始状态,比如让寄存器恢复默认值,让处理器从第一条指令开始执行。
13.存储器映射控制:控制异常向量表的重新映射方式。
14.锁相环PLL:将晶体振荡器输入的时钟倍频到一个合适的时钟频率。
15.VPB分频器:将内核时钟与外设时钟分开的部件
16.功率控制:使处理器空闲或者掉电
17.唤醒定时器:系统上电或者掉电唤醒后,保证晶体振荡器能输出稳定的时钟信号。
一旦检测到一个有效的时钟,并且外部复位信号撤销以后,唤醒定时器则对4096个时钟计数,这段时间可使Flash等外围器件完成初始化。
18.时钟系统结构:晶体振荡器,唤醒定时器,锁相环,VPB分频器
19.芯片加密:加密后的芯片无法使用JTAG接口进行调试,也无法使用ISP工具对存储器进行代码下载和读取,只能对芯片整片擦出后才能做进一步操作。
https://wenku.baidu.com/view/48800919b84ae45c3a358c0b.html
重点
1.存储器重映射
小端存储器系统:数据的高字节存放在高地址中
大端存储器系统:数据的高字节存放在低地址中
存储器重映射:部分存储单元可以同时出现在不同的地址上,包括引导块(Boot Block)和用于保存异常向量表的少量存储单元。
Boot Block:芯片复位后被首先运行,功能主要是判断运行哪个存储器上的程序,检查用户代码是否有效,判断芯片是否被机密,芯片在应用编程(IAP)以及在系统编程(ISP)的功能。
一个异常向量表实际上占用16个字(64字节)的存储单元。
ARM内核在发生异常后,会使程序跳转到异常向量表出,再经过向量跳转到异常服务程序。但ARM单条指令的寻址范围有限,无法用一条指令实现4G范围的跳转,所以在其后面放置跳转目标,实现4G范围内任意跳转。
重映射原因:ARM处理器的存储器结构复杂,可能同时存在片内存储器和片外存储器,他们在存储器映射上的起始地址都不一样。
2.异常,三级流水线,前后台系统
异常模式:管理、中止、未定义、中断、快速中断
只要正常的程序被暂时终止,处理器就进入异常模式。
每种处理器操作模式都有一个相关联的中断向量,当一个异常模式发生时,ARM将会改变模式,而程序计数器PC将会被强行指向异常向量。
三级流水线:取指,译码,执行。几个指令可以并行执行,提高了CPU的运行效率,内部信息流要求通畅流通。
取指从存储器装载一条指令
译码识别将要被执行的指令
执行处理指令并将结果写回寄存器
ARM流水线只有在取第四条指令时,第一条指令才算完成。
程序计数器R15总是指向正在取指的指令
ARM状态每条指令四个字节,Thumb状态每条指令两个字节。
应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就是后台系统,是任务级。
中断服务程序用于处理系统的异步事件,也是前台系统,中断级。
3.实时操作系统概念,优点,特点
实时操作系统:计算机系统及时响应外部事件的请求,并能及时控制所有实时设备和实时任务协调运行,且能在一个规定的时间内完成对任务的处理。
嵌入式实时系统都是多任务系统,运用的是可剥夺内核,并且要求调度器进行任务切换运行的时间是固定的,缩短中断延时。
特点:实时操作系统必须为多任务系统,任务的切换时间固定,中断时间尽可能短并且可预知。
4.arm寄存器,寄存器组,不同模式状态用了哪些寄存器。
Thumb状态:(16位,半字)
8个通用寄存器(R0~R7)
程序计数器PC
堆栈指针SP
链接寄存器LR
程序状态寄存器CPSR
ARM状态:(32位,字)
31个通用32位寄存器
6个状态寄存器
两个状态切换并不影响处理器模式或者寄存器内容。
Thumb指令在某些特殊情况下具有比ARM指令更为出 {MOD}的表现,主要是在代码长度和窄带宽度存储器系统性能两方面。Thumb不可能独立的组成一个应用系统。
发生异常时,处理器自动进入ARM状态。
5.VIC,中断控制器
中断禁止位包括I位和F位:当I位置位时,IRQ中断被禁止,当F位置位时,FIQ中断被禁止。
中止包含两种类型:预取值中止,发生在指令预取过程中;数据中止,发生在堆数据访问时
复位异常具有最高优先级
向量中断控制器VIC:使ARM具有正确快速处理多个外部中断事件的能力的功能模块。
VIC作用:允许哪些中断源可以产生中断,可以产生哪类中断,产生中断后执行哪段服务程序。
VIC可管理32个中断源。
VIC控制配置寄存器:中断选择寄存器,中断使能寄存器,中断使能清零寄存器。
程序状态寄存器CPSR的I和F标志位分别用来控制IRQ模式和FIQ模式使能,1禁止。
VIC分类:FIQ(优先级最高),向量IRQ(16个优先级中等),非向量IRQ(优先级最低)
ARM7硬件不支持中断嵌套
6.IRQ过程,中断处理过程
IRQ过程:
IRQ异常事件处理流程
将当前程序状态寄存器的内容备份,SPSR_fiq=CPSR
处理器切换到IRQ模式
禁止IRQ中断
保存返回地址,LR_fiq=PC
设置IRQ异常入口地址PC=0x18
ARM对异常中断的相应过程:
将链接寄存器R14LR设置为返回地址
保存当前程序状态寄存器,将CPSR中的内容保存到SPSR中
关中断
将程序计数器R15PC值设置成该异常中断的入口地址
7.代码:读代码
8.片内外设,外部中断,定时器重点。
外部中断:由计算机外设发出的中断请求,可屏蔽。
中断号:每个中断源都被分配了独一无二的中断号。
P221中断初始化
9.写初始化代码
P204FIQ初始化
P206定时器0初始化
P209向量IRQ初始化
P211非向量IRQ中断初始化
10.根据功能,设计寄存器
了解
1.什么是嵌入式?什么是片上系统?
嵌入式系统源于微机系统,是嵌入到对象体系中,实现嵌入对象智能化的计算机。(嵌入到对象体系中的专用计算机应用系统)
嵌入式系统:是用于控制,监视或者辅助操作机器或设备的装置。以应用为中心,以计算机技术为基础,软件硬件可减裁,功能,可靠性,成本,体积,功耗严格要求的专用计算机系统。
片上系统:在一个硅片上实现复杂的系统,整个嵌入式系统大部分都可集成到一块或几块芯片中去,应用系统电路板将变得很简洁,减小体积和功耗,提高可靠性
操作系统:是计算机中最基本的程序,负责计算机系统中全部软硬件资源的分配与回收、控制与协调等并发的活动;提供用户接口,使用户获得良好的工作环境;为用户扩展新的系统功能提供软件平台。
使用嵌入式操作系统的原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期;3.充分发挥了32位CPU的多任务潜力。
嵌入式系统基本要素:嵌入性,专用性,计算机系统。
嵌入式系统特点:专用性强,可剪裁性好,实时性和可靠性高。
2.前后台系统?
前后台系统:循环中调用相应的函数完成相应的操作,为后台行为。中断服务程序处理异步事件,为前台行为。后台叫任务级,前台叫中断级。
3.抢占式,非抢占内核
占先式内核:当系统时间很重要时,要使用占先式内核,最高优先级的任务一旦就绪,总能拿到CPU控制权。
可抢占式内核:当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的程序。
非占先式内核:非占先式内核要求每个任务自我放弃CPU的所有权。非占先式调度法也称合作型多任务。中断服务可以使一个优先级高的任务由挂起状态变为就绪状态。但是CPU还是会执行被中断的任务,完成后才能执行高优先级的任务。
非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行,进程一旦处于核心态,除非进程自愿放弃CPU,否则进程将一直运行下去直至完成或退出内核。
4.ARM7内核结构
ARM内核采用精简指令集计算机RISC体系结构
①具有大量的通用寄存器
②通过装载/保存结构使用独立的LOAD
和STORE指令完成数据在寄存器与外部存储器之间的传送,处理器只处理寄存器中的数据,从而避免多次访问存储器
③寻址方式非常简单,所有装载/保存的地址都只由寄存器内容和指令域决定
④使用统一和固定长度的指令格式
内核结构:T(Thumb指令集扩展)、D(支持片上调试)、M(64位乘法指令)I(ICE硬件仿真)
CISC(复杂指令集)RISC(精简指令集)(见3.1);
RISC设计重点在于降低由硬件执行的指令的复杂度,对编译器有更高的要求
ARM7TDMI有32位的ARM指令集和16位的Thumb指令集;ARM指令集效率高代码密度低,Thumb有较高的代码密度,保持ARM的大量性能优势,是ARM的子集
ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。
处理器状态:ARM状态,Thumb状态
5.指令集特点?(复杂,精简的区别)
RISC设计重点在于降低由硬件执行的指令的复杂度,对编译器有更高的要求
RISC结构体系特征:1.具有大量的通用寄存器。2.通过装载/保存结构使用独立的load和store指令,完成数据在寄存器和外部存储器之间的传送。处理器只处理寄存器中的数据,这样可以加快访问速度,因为不必每次访问存储器。
ARM体系结构特征:1.load和store进行批量数据传输,实现最大数据吞吐量。2.每条数据指令可以同时包含算数逻辑单元ALU的运算和移位处理,地址自动增加,自动减少的寻址方式,优化程序中的循环结构。3.大多数arm指令是条件执行的。
CISC:复杂指令集,指令数量很多,有些指令执行时间很长,编码长度可变,寻址方式多样,可以对存储器和寄存器进行算术逻辑运算,难以用编辑器编写代码程序。
RISC:精简指令集,指令数量较少,没有较长执行时间的指令,编码长度固定,只能对寄存器进行算术逻辑操作,load/store体系结构,采用优化编译技术生成高效代码程序。
6.进入异常中断,中断返回流程代码。
7.进入子程序代码,返回指令
8.ARM7,flash编程方法,片内片外flash写代码方法
9.LPC2000,产生补位?异常?产生条件?
10.ARM7三级流水线
取值、译码、执行;正在操作的指令为第一条指令,PC总是指向第三条指令,即当前正在执行的指令地址再加两条指令的地址;ARM下+8(字对齐)、Thumb下+4(半字对齐)
11.存储器加速模块,原理,特点
MAM任务:在一条指令被需要时立刻将下条指令提供给CPU。
通过MAM,每访问一次存储器可以提取4条32位的ARM指令或8条16位的Thumb指令将flash存储器加宽到128位。
Flash存储器被分成两组,轮番工作,及时的为CPU提供需要的指令和数据,以防止CPU取址暂停。
每组flash都有自己的预取指缓冲器,分支跟踪缓冲器,数据缓冲器。
预取指缓冲器用于顺序获取CPU需要的下几条指令。
数据缓冲区用于保存CPU最近获取的数据行这样可以加速连续数据的获取。
Flash编程不受MAM的影响。扇区擦除操作可同时向两个组执行。
Boot Block扇区包含可被用户程序调用的Flash编程算法(即IAP代码)和一个可对Flash存储器进行串行编程的装载程序(即ISP)代码。
https://blog.csdn.net/qusongsong1/article/details/5080440
MAM关闭:直接对Flash访问,插入预先选好的等待周期,这时处理器的动作是可预知的,但是如果时钟频率太高,性能会受到影响。
MAM部分使能:从预取指缓冲区连续取指,但是最短的分支也会启动对Flash的直接访问。为了使操作可知,所需的数据都存放在Flash而非数据锁存器中。
MAM完全使能:所有访问都是对预取指或分支跟踪缓冲区或数据锁存区的操作,如果相关数据未存放在以上缓冲区内,将直接访问Flash,在高时钟频率下,操作很难预知。
void MAMSet(uint 32FCCLK)
{
MAMCR=0; //关闭MAM部件
if(FCCLK<20000000) //如果系统时钟小于20MHz,则Flash读取操作时钟为1clk
{
MAMTIM=1;
}
else
{
if(FCCLK<40000000) //如果系统时钟大于20MHz而小于40MHz
{
//则Flash读取操作时钟为2clk
MAMTIM=2;
}
else
{
MAMTIM=3; //如果系统时钟大于40MHz,则Flash读取操作时钟为3clk
}
}
MAMCR=2; //启动MAM部件
}
12.ARM7中断,片内外设功能,外部中断定时器,什么是任务
任务:一个任务,也称做一个线程,是一个简单的程序,该程序可以认为CPU完全只属于该程序自己,实时应用程序的设计过程包括如何把问题分割成多个任务,每个任务都是整个应用的一部分,每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和栈空间。
13.LPC2000和LPC2100区别
14.向量中断,非向量中断,快速中断特点
向量IRQ中断:VIC最多支持16个向量IRQ中断,这些中断被分为16个优先级,并且为每个优先级制定一个服务程序入口地址。
非向量IRQ中断:任何中断源都可以设置为非向量IRQ中断,所有的非向量中断都共用一个相同的服务程序入口地址。
快速中断FIQ:具有最高优先级。