中国科技大学嵌入式考试复习总结.docx
- 文档编号:8229401
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:23
- 大小:597.15KB
中国科技大学嵌入式考试复习总结.docx
《中国科技大学嵌入式考试复习总结.docx》由会员分享,可在线阅读,更多相关《中国科技大学嵌入式考试复习总结.docx(23页珍藏版)》请在冰豆网上搜索。
中国科技大学嵌入式考试复习总结
嵌入式系统的几个重要特征:
(1)操作系统内核小(2)专用性强(3)系统精简(4)高实时性OS(5)嵌入式软件开发走向标准化(6)嵌入式系统开发需要开发工具和环境
嵌入式系统具有的特点:
低功耗、体积小、成本低、集成度高。
定义:
以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统。
组成:
硬件,系统组件,内嵌式操作系统,用户程序。
实时性:
依赖于运行结果的逻辑正确性和时间正确性。
从输入到输出的滞后时间必须足够小到一个可以接受的时限内。
嵌入式系统的设计过程:
需求分析》规格说明》体系结构设计》(执行装置设计,硬件设计,软件设计)》系统集成》系统测试》产品
软硬件协同设计过程可归纳:
(l)需求分析;
(2)软硬件协同设计(3)软硬件实现(4)软硬件协同测试和验证。
交叉开发环境:
先在通用PC机上编程,然后通过交叉编译链接,将程序做成目标平台上可以运行的二进制代码格式。
最后将程序下载到目标平台上的特定位置由目标板上启动代码运行这段二进制代码。
几种常用的调试方法:
1指令集模拟器,2驻留监控软件,3JTAG仿真器,4在线仿真器ICE
嵌入式linux开发流程:
1建立开发环境:
操作系统一般使用REDHAT-LINUX,通过网络下载相应的GCC交叉编译器进行安装
2.配置开发主机:
a)配置MINICOM,MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;
b)配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
3.建立引导装载程序BOOTLOADER:
4.下载别人已经移植好的LINUX操作系统:
下载后再添加自己的特定硬件的驱动程序,进行调试修改。
5.建立根文件系统
6.建立应用程序的flash磁盘分区
7.开发应用程序
什么是bootloader:
Bootloader为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。
Bootloader的位置:
通常固化在硬件上的某个固态存储设备上,加电后自启动。
Bootloader功能:
初始化硬件设备、建立内存空间的映射图,将系统的软、硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。
几种发布的Bootloader:
vivi、RedBoot和U-Boot
Bootloader操作模式:
“启动加载”模式和“下载”模式
启动加载模式:
Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
下载模式:
目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。
主要是下载内核映像和根文件系统映像等。
从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标机上的FLASH类固态存储设备中。
Bootloader启动过程:
1、第一阶段
(1)、基本的硬件设备初始化
(2)、为阶段2代码准备RAM空间
(3)、拷贝阶段2代码到RAM空间
(4)、设置好堆栈
(5)、跳转到阶段2的C程序入口点
2、第二阶段
(1)、初始化本阶段要使用到的硬件
(2)、检测系统内存映射(memorymap)
(3)、将kernel和根文件系统映像从flash读到RAM空间
(4)、为kernel设置启动参数
(5)、调用内核
四:
嵌入式处理器:
嵌入式微控制器(MCU),嵌入式DSP处理器,嵌入式微处理器(MPU),嵌入式片上系统
嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。
冯·诺依曼体系结构:
数据和指令都存储在一个存储器中的计算机被称为冯·诺依曼机
哈佛体系结构:
数据和指令存储在各自独立的存储器中的计算机体系结构称为哈佛体系结构,提供了较大的数据存储器带宽,适合于数字信号处理
CISC复杂指令集:
RISC:
精简指令集
ARM体系结构还采用了一些特别的技术:
Ø所有的指令都可根据前面的执行结果决定是否被执行,提高了指令的执行效率。
Ø可用Load/Store指令批量传输数据,以提高数据的传输效率。
Ø可在一条数据处理指令中同时完成逻辑处理和移位处理。
RISC流水线技术:
个指令可以并行执行,提高了CPU的运行效率,内部信息流要求通畅流动
ARM7系列处理器中每条指令分取指、译码、执行三个阶段,流水线上虽然一条指令仍需3个时钟周期来完成,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令,提高了流式指令的处理速度.
ARM9系列处理器的流水线分为取指、译码、执行、访存、回写.
解决流水线相关:
1.结构相关:
如果某些指令在流水线中重叠执行时,产生资源冲突(多周期指令、访问存储器指令)
避免方法:
a)采用分离式指令Cache和数据Cache
b)ALU中采用单独加法器来完成地址计算
2.数据相关:
当一条指令需要前面指令的执行结果,而这些指令均在流水线中重叠执行时
避免方法:
a)定向(也称旁路或短路)技术。
将前一条指令的结果,直接传递给后面需要它的指令,不必写入寄存器之后再由后一条指令读出。
就可能避免停顿
b)流水线互锁技术。
当互锁发生时,流水线会停止这条指令的执行,直到数据准备好为止。
3.控制相关:
当流水线遇到分支指令和其他会改变PC值的指令时就会发生控制相关
避免:
a)引入延时分支
b)尽早计算出分支转移成功的PC值
ARM7和ARM9的比较:
5级流水线的ARM9内核是哈佛架构,拥有独立的指令和数据总线;指令和数据的读取可以在同一周期进行;3级流水的ARM7内核是指令和数据总线复用的冯.诺依曼架构,指令和数据的读取不能在同一周期进行;负面作用是增加了系统的延时。
超标量执行:
超标量CPU采用多条流水线结构。
通过重复设置多套指令执行部件,同时处理并完成多条指令,实现并行操作,来达到提高处理速度的目的。
如何减少CPU与内存之间的速度差异?
1.在基本总线周期中插入等待,但这样会浪费CPU的能力。
2.采用存取时间较快的SRAM作存储器,但却大幅提升了系统成本。
3.在慢速的DRAM和快速CPU之间插入一速度较快、容量较小的SRAM,起到缓冲作用;这就是Cache法
4.采用新型存储器。
为什么采用高速缓存:
CPU的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。
高速缓存的工作原理:
高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝
总线桥:
简单来说就是一个总线转换器,它实现各类微处理器总线到PCI总线、各类标准总线到PCI总线的连接,并允许它们之间相互通信。
ARM总线结构:
AHB总线(高速),ASB总线(高速),APB总线(低速)
ARM处理器的几大特点:
小体积、低功耗、成本低、高性能;支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;大量使用寄存器,大多数数据操作都在寄存器中完成,指令执行速度更快;寻址方式灵活简单,执行效率高;指令长度固定;
ARM两种工作状态:
ARM-32-bit,Thumb-16-bit
ARM>THUMB:
LDRR0,=Label+1
BXR0
THUMB>ARM:
LDRR0,=Label
BXR0
ARM处理器在开始执行代码时,只能处于ARM状态。
ARM体系结构的存储器模式:
大端模式,最高位字节保存在最低位地址
小端模式,最低位字节保存在最低位地址
测试编译器属哪种模式
下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:
shortintx;
charx0,x1;
x=0x1122;
x0=((char*)&x)[0];//低地址单元
x1=((char*)&x)[1];//高地址单元
若x0=0x11,则是大端;若x0=0x22,则是小端......
上面的程序还可以看出,数据寻址时,用的是低位字节的地址
ARM处理器有7种操作模式:
CPSR[4:
0]
处理器模式
说明
备注
可访问的寄存器
10000
用户(usr)
用户程序正常工作模式
不能直接切换到其它模式
PC,R14~R0,CPSR
11111
系统(sys)
用于支持操作系统的特权任务等
与用户模式类似,但具有可以直接切换到其它模式等特权
PC,R14~R0,CPSR
10001
快中断(fiq)
支持高速数据传输及通道处理
FIQ异常响应时进入此模式
PC,R14_fiq~R8_fiq,
R7~R0,CPSR,SPSR_fiq
10010
中断(irq)
用于通用中断处理
IRQ异常响应时进入此模式
PC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq
10011
管理(svc)
操作系统保护代码
系统复位和软件中断(SWI)响应时进入此模式
PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc
10111
中止(abt)
用于支持虚拟内存和/或存储器保护
处理存储器故障、实现虚拟存储器和存储器保护
PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt
11011
未定义(und)
支持硬件协处理器的软件仿真
未定义指令异常响应时进入此模式
PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und
ARM体系结构的寄存器组织:
37个寄存器:
31个通用(未分组寄器R0-R7,分组寄存器R8-R14,程序计数器PC(R15)),6个状态寄存器
每种模式下:
可以访问15个通用寄存器(R0toR14),以及1或者2个状态寄存器和程序计数器
R13堆栈指针(sp):
每种处理器模式都有单独的堆栈,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间
R14:
子程序链接寄存器(SubroutineLinkRegister)或链接寄存器LR,当执行BL子程序调用指令时,R14←R15(程序计数器PC)。
其他情况下,R14用作通用寄存器。
R14为链接寄存器(LR),在结构上有两个特殊功能:
1.在每种模式下,模式自身的R14版本用于保存子程序返回地址;
2.当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。
R15程序计数器(PC):
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。
CPSR–CurrentProgramStatusRegister,当前程序状态寄存器
SPSR–SavedProgramStatusRegister,保存当前程序状态寄存器
当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
在ARM状态下,绝大多数的指令都是有条件执行的。
在Thumb状态下,仅有分支指令是有条件执行的。
Load-store结构:
在通用寄存器中操作,load/store从存储器中读某个值,操作完后再将其放回存储器中
指令分类:
1.数据处理指令–使用和改变寄存器的值
2.数据传送指令–把存储器的值拷贝到寄存器中(load)or把寄存器中的值拷贝到存储器中(store)
3.控制流指令
Ø分支
Ø分支和链接,保存返回的地址,以恢复最先的次序
4.程序状态寄存器(PSR)处理指令
5.协处理器指令
6.异常产生指令
ARM微处理器支持这四种类型的堆栈工作方式:
-满递增堆栈FA:
堆栈指针指向最后压入的数据,且由低地址向高地址生成。
-满递减堆栈FD:
堆栈指针指向最后压入的数据,且由高地址向低地址生成。
-空递增堆栈EA:
堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。
-空递减堆栈ED:
堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生成。
算术操作
ADDr0,r1,r2
r0:
=r1+r2
ADCr0,r1,r2
r0:
=r1+r2+C
SUBr0,r1,r2
r0:
=r1-r2
SBCr0,r1,r2
r0:
=r1-r2+C-1
RSBr0,r1,r2
r0:
=r2–r1
RSCr0,r1,r2
r0:
=r2–r1+C-1
按位逻辑操作
ANDr0,r1,r2
r0:
=r1andr2
ORRr0,r1,r2
r0:
=r1orr2
EORr0,r1,r2
r0:
=r1xorr2
BICr0,r1,r2
r0:
=r1and(not)r2
寄存器传送
MOVr0,r2
r0:
=r2
MVNr0,r2
r0:
=notr2
比较操作
CMPr1,r2
setcconr1-r2
CMNr1,r2
setcconr1+r2
TSTr1,r2
setcconr1andr2
TEQr1,r2
setcconr1xorr2
加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。
子程序:
使能IRQ中断
ENABLE_IRQ
MRSR0,CPSR
BICR0,R0,#0x80
MSRCPSR_c,R0
MOVPC,LR
子程序:
禁能IRQ中断
DISABLE_IRQ
MRSR0CPSR
ORRR0,R0,#0x80
MSRCPSR_c,R0
MOVPC,LR
在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。
与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。
APCS(ARMProduceCallStandard)是ARM程序中子程序调用的基本规则,目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。
这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则。
汇编语言与C/C++的混合编程通常有以下几种方式:
-在C/C++代码中嵌入汇编指令。
-在汇编程序和C/C++的程序之间进行变量的互访。
-汇编程序、C/C++程序间的相互调用。
嵌入式汇编调用:
voidenable_IRQ(void)
{
inttmp;
__asm
{
MRStmp,CPSR
BICtmp,tmp,#0x80
MSRCPSR_c,tmp
}
}
voiddisable_IRQ(void)
{
inttmp;
/*内联汇编,对CPSR寄存器进行操作*/
__asm
{
MRStmp,CPSR
ORRtmp,tmp,#0x80
MSRCPSR_c,tmp
}
}
初始化:
汇编调用C:
IMPORTMain;通知编译器该标号为一个外部标号
AREAInit,CODE,READONLY;定义一个代码段
ENTRY;定义程序的入口点
LDRR0,=0x3FF0000;初始化系统配置寄存器
LDRR1,=0xE7FFFF80
STRR1,[R0]
LDRSP,=0x3FE1000;初始化用户堆栈
BLMain;跳转到Main()函数处的C/C++代码执行
END;标识汇编程序的结束
C源程序:
#include
externvoidstrcopy(char*d,constchar*s);用extern声明一个函数为外部函数,
intmain()
{
constchar*srcstr=“Firststring-source”;
char*dststr=“Secondstring-destination”;
strcopy(dststr,srcstr);调用汇编函数strcopy()
return(0);
}
汇编源程序:
AREASCopy,CODE,READONLY
EXPORTstrcopy;用EXPORT伪操作声明该变量可以被其他文件引用,相当于声明了一个全局变量。
Strcopy;R0指向目标字符串,R1指向源字符串
LDRBR2,[R1],#1;字节加载,并更新地址
STRBR2,[R0],#1;字节保存,并更新地址
CMPR2,#0;检测R2是否等于0
BNEstrcopy;若条件不成立则继续执行
MOVPC,LR;从子程序返回
END
第五章
S3C2410X的存储器管理器提供访问外部存储器的所有控制信号:
27位地址信号、32位数据信号、8个片选信号、以及读/写控制信号等。
S3C2410X的存储空间分成8组,最大容量是1GB,bank0---bank5为固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB,并且bank7的开始地址与bank6的结束地址相连接,但是二者的容量必须相等。
bank0可以作为引导ROM,其数据线宽只能是16位和32位,复位时由OM0、OM1引脚确定;其它存储器的数据线宽可以是8位、16位和32位。
S3C2410X的存储器格式,可以为大端格式,也可以为小端格式。
S3C2410X存储器控制器共有13个寄存器.
寄存器
地址
功能
操作
复位值
BWSCON
0x48000000
总线宽度和等待控制
读/写
0x0
BANKCON0
0x48000004
BANK0控制
读/写
0x0700
BANKCON1
0x48000008
BANK1控制
读/写
0x0700
BANKCON2
0x4800000C
BANK2控制
读/写
0x0700
BANKCON3
0x48000010
BANK3控制
读/写
0x0700
BANKCON4
0x48000014
BANK4控制
读/写
0x0700
BANKCON5
0x48000018
BANK5控制
读/写
0x0700
BANKCON6
0x4800001C
BANK6控制
读/写
0x18008
BANKCON7
0x48000020
BANK7控制
读/写
0x18008
REFRESH
0x48000024
SDRAM刷新控制
读/写
0xAC0000
BANKSIZE
0x48000028
可变的组大小设置
读/写
0x0
MRSRB6
0x4800002C
BANK6模式设置
读/写
xxx
MRSRB7
0x48000030
BANK7模式设置
读/写
xxx
FLASH存储器又称闪存,是一种可在线多次擦除的非易失性存储器,即掉电后数据不会丢失。
FLASH存储器还具有体积小、功耗低、抗振性强等优点,是嵌入式系统的首选存储设备。
FLASH存储器主要分为两种,一种为NOR型FLASH,另一种为NAND型FLASH。
NOR型与NAND型FLASH的区别
(1)接口差别
NOR型FLASH采用的是SRAM接口,提供有足够的地址引脚来寻址,可以很容易地存取其片内的每一个字节;
NAND型FLASH使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。
通常是采用8个引脚来传送控制、地址和数据信息。
(2)读写的基本单位
NOR型FLASH操作是以“字”为基本单位;
NAND型FLASH操作是以“页面”为基本单位,页的大小一般为512字节。
(3)性能比较
NOR型FLASH的地址线和数据线是分开的,传输效率很高,程序可以在芯片内执行。
NOR型的读速度比NAND型稍快一些;
NAND型的写入速度比NOR型快很多(由于NAND型读写的基本单位为“页面”,所以对于小量数据的写入,总体速度要比NOR型慢);
(4)容量和成本
NAND型FLASH具有极高的单元密度,容量可以做得比较大,加上其生产过程更为简单,价格也就相应地降低了。
NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、SecureDigital、PCCards和MMC存储卡市场上所占份额最大
(5)软件支持
在NOR型FLASH上运行代码不需要任何的软件支持,而在NAND型FLASH上进行同样操作时,通常需要驱动程序
Norflash存储器:
读速度高,而擦、写速度低,容量小,价格高。
Nandflash存储器:
读速度不如Norflash,而擦、写速度高,容量大,价格低。
有取代磁盘的趋势。
因此,现在不少用户从Nandflash启动和引导系统,而在SDRAM上执行主程序代码。
S3C2410X有117个输入/输出端口。
这些端口都具有多功能,通过引脚配置寄存器,可以将其设置为所需要的功能,如:
I/O功能、中断功能等等。
每一个端口都有4个寄存器,它们是:
引脚配置寄存器、数据寄存器、引脚上拉寄存器,保留寄存器。
S3C2410的UART(通用异步串行口)有三个独立的异步串行I/O端口:
UART0、UART1、UART2,每个串口都可以在中断和DMA两种模式下进行收发。
每个UART包含:
波特率发生器、接收器、发送器和控制单元。
UART例题:
波特率数与UBRDIVn的关系为:
UBRDIVn=(int)(CLK/(fB*16))-1
其中CLK为所选择的时钟频率,fB为波特率。
fB=CLK/16/(UBRDIVn+1)
例如,如果波特率为115200bps且PCLK或UCLK为40MHz,则UBRDIVn为:
UBRDIVn=(int)(40000000)/(115200*16))-1
=(int)(21.7)-1
=21-1=20
IIC总线信号:
为两线,双向传输的数据线SDA、双向传输的时钟线SCL。
IIC总线系统组成:
IIC总线是多主系统,系统可以有多个IIC节点设备组成,并且可以是多主系统,任何一个设备都可以为主IIC;但是任一时刻只能有一个主IIC设备,IIC具有总线仲裁功能,保证系统正确运行。
主IIC设备发出时钟信号、地址信号和控制信号,选择通信的从IIC设备和控制收发。
系统要求:
(1)各个节点设备必须具有IIC接口功能;
(2)各个节点设备必须共地;(3)两个信号线必须接上拉电阻。
IIC总线的工作原理:
进行数据传输时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国科技大学 嵌入式 考试 复习 总结