每天干每天做网站crm客户管理系统页面
2026/4/18 11:07:34 网站建设 项目流程
每天干每天做网站,crm客户管理系统页面,8免费建站网站,西安市建设工程信息网诚信信息平台官网二、嵌入式处理器1.嵌入式处理器的结构类型指令集#xff1a;CISC#xff08;复杂#xff09;/RISC#xff08;精简#xff09;指令系统#xff0c;包括#xff1a;基本数据类型、寄存器、寻址模式、指令、中断以及外部I/O等。存储结构2.典型嵌入式处理器简介2-1.ARM处理…二、嵌入式处理器1.嵌入式处理器的结构类型指令集CISC复杂/RISC精简指令系统包括基本数据类型、寄存器、寻址模式、指令、中断以及外部I/O等。存储结构2.典型嵌入式处理器简介2-1.ARM处理器主流为32位特点为耗电省、成本低、功能强。单周期RISC架构只使用加载/存储指令访问内存指令长度固定三地址指令格式指令流水线技术低功耗设计2-2.ARM指令集的比较ARM指令集全部是32位的指令其基本指令主要进行8位、16位、32位整数的运算可扩充浮点运算指令、数字信号处理指令等Thumb指令集从ARMv4T开始全部是16位字长的指令可看作ARM指令的压缩模式Thumb-2指令集混合的指令集既有 16位又有32位2-3.典型ARM处理器分五类:经典ARM、ARM Cortex嵌入式处理器、ARM Cortex实时嵌入式处理器、ARM Cortex应用处理器、ARM专家处理器。Cortex-AApplication应用处理器面向高端Cortex-RReal time R4、R5、R7实时嵌入式处理器面向实时控制Cortex-MMicrocontroller嵌入式处理器面向微控制器采用流水线只支持Thumb-2ARM7、ARM9、ARM11经典ARM处理器Cortex-R4支持ARM/Thumb-2指令集有可选的浮点数运算可用于汽车电子Cortex-A常用于智能手机除A50为64位其他均为32位Cortex-M嵌入式处理器CM0、CM0成本低简单适合中低端应用仅有56条Thumb-2指令CM3性能高通用性好适合工业控制及中高端应用支持Thumb-2子集CM4数字信号处理3.ARM处理器的工作状态及工作模式3-1.ARM处理器的工作状态1ARM状态ARM处理器工作于32位指令的状态所有指令均为32位宽度。2Thumb状态ARM处理器执行16位指令的状态此时代码密度变大占用内存空间减小。3调试状态处理器停机调试时进入调试状态。1.除Cortex-M系列处理器外所有ARM处理器复位后开始执行代码时总是处于ARM状态。2.Cortex-M系列处理器因为只有Thumb-2指令集所以只有Thumb状态和调试状态。ARM和Thumb状态的切换1由ARM状态切换到Thumb状态通过BX指令将操作数寄存器的最低位设置为1即可将ARM状态切换到Thumb状态。如果R0[0]1则执行BX R0指令进入Thumb状态。如果Thumb状态进入异常处理异常处理要在ARM状态下进行当异常返回时将自动切换到Thumb状态。2由Thumb状态切换到ARM状态通过BX指令将操作数寄存器的最低位设置为0即可将Thumb状态切换到ARM状态。如果R0[0]0则执行BX R0指令进入ARM状态。如果进入异常处理则从异常向量地址开始执行将自动进入ARM状态。3-2.ARM处理器的工作模式ARM体系结构支持7种工作模式取决于程序状态寄存器CPSR低5位的值。工作模式功能说明可访问的寄存器CPSR[M4M0]用户模式User程序正常执行工作模式PC,R14~R0,CPSR10000快速中断模式FIQ处理高速中断用于高速数据传输或通道处理PC,R14_fiq~R8,R7~R0,CPSR,SPSR_fiq10001外部中断模式IRQ用于普通中断处理PC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq10010管理模式SVC操作系统的保护模式处理软件中断SWIPC,R14_svc~R13,R12~R0,CPSR,SPSR_svc10011中止模式ABT处理存储器故障实现虚存储器和存储保护PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt10111未定义指令模式UND处理未定义的指令陷阱用于支持硬件协处理器仿真PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und11011系统模式SYS运行特权级的操作系统任务PC,R14~R0,CPSR11111ARM处理器工作模式之间可以相互转换发生异常时处理器自动改变CPSR[M4M0]的值从而改变模式。4.ARM处理器的寄存器组织4-1. ARM状态下的寄存器组织ARM处理器在ARM状态下共有37个寄存器其中31个为通用寄存器包括PC剩余6个为状态寄存器。1通用寄存器公共寄存器: R7-R0为所有工作模式公用的通用寄存器R8-R14根据不同模式有分别。PC寄存器: R15PC始终作为程序计数器使用指向将要执行的下一条指令的地址。CPSR寄存器: 当前程序状态寄存器记录当前程序的状态。SPSR寄存器备份状态寄存器对CPSR的备份当从用户模式转到其他模式时备份状态寄存器记录CPSR的状态用于保护现场。2状态寄存器程序寄存器CPSR/SPSR格式如下前5位是条件码标志后8位是控制位I、F、T、M4~M0。NZCVQ标志位:N: 符号标志N1表示运算结果为负数N0表示运算结果为正数。Z: 零标志运算结果为0时Z1否则Z0。C: 进借位标志加法有进位时C1无进位时C0减法有借位时C0无借位时C1。V: 溢出标志加减法运算结果有溢出时V1否则V0。Q: 增强的DSP运算指令溢出标志溢出时Q1否则Q0。中断控制位:I禁止外部中断IRQ控制位I1禁止外部中断IRQI0允许外部中断IRQ。F: 禁止快速中断FIQ的控制位F1禁止FIQ中断F0允许FIQ中断。T: ARM和Thumb指令切换位T1时执行Thumb指令否则执行ARM指令。模式选择位M4~M0决定控制器工作于何种模式。4-2. Thumb状态下的寄存器组织Thumb状态下的寄存器组是ARM状态下寄存器组的子集。R0-R7为低位寄存器所有ARM处理器的不同状态均可使用R8-R12在16位指令模式下不能使用只有在32位指令状态下才可当作通用寄存器使用。R13 (SP)为堆栈指针分为PSP进程堆栈指针和MSP主堆栈指针R14 (LR)为链接寄存器R15 (PC)是程序计数器状态寄存器为 xPSR包括CPSR和SPSR。5.ARM处理器的异常异常是指在程序正常执行过程中由于内部或外部事件引起的请求使处理器暂停当前工作去处理其他事情处理完毕后返回原程序继续执行。在操作系统或组成原理中中断和异常通常被归为同一类概念。中断可视为异常的一种用于处理内部或外部事件。5-1. 异常的种类ARM体系结构除Cortex外中共有7种异常异常优先级分为6级复位(RESET)优先级最高未定义指令(UND)和软件中断(SWI)优先级相同且最低。每个异常中断向量占据4个字节异常向量地址用于定位异常处理程序的入口。复位异常优先级最高发生时PC无条件指向0x00000000通常此处放置无条件转移指令跳转到系统初始化程序。异常类型优先级工作模式异常向量地址说明复位(RESET)1管理模式SVC0x00000000RESET引脚有效时未定义指令(UND)6中止模式ABT未定义指令模式UND0x00000004协处理器认为当前指令未定义软件中断(SWI)6管理模式SVC0x00000008用户定义的中断指令指令预取中止(PABT)5中止模式ABT0x00000000当预取指令地址不存在或该地址不允许访问数据访问中止(DABT)2中止模式ABT0x00000010当数据访问地址不存在或该地址不允许访问外部中断请求(IRQ)4外部中断模式IRQ0x00000018有外部中断快速中断请求(FIQ)3快速中断模式FIQ0x00000010有快速中断请求5-2. 异常的中断响应过程1保护现场将CPSR的值保存到将要执行的异常中断对应的SPSR中以实现对处理器当前状态、中断屏蔽及各标志位的保护。2设置CPSR相应位设置CPSR中的M4~M0位进入相应工作模式设置I1禁止IRQ中断若进入复位模式或FIQ模式还需设置F1禁止FIQ中断。3保存断点地址将引起异常指令的下一条地址断点地址保存到新的异常工作模式的LR(R14)中以便异常处理程序执行完后能正确返回原程序。每种异常模式对应两个寄存器SPR13_mode和LR(R14_mode),分别存放堆栈指针和断点地址。4给PC赋值给程序计数器PC强制赋值转入异常向量地址以便执行相应的处理程序。5恢复用户寄存器除复位将SPSR_mode寄存器值复制到CPSR中恢复原先的CPSR状态根据异常类型将PC值恢复成断点地址继续执行用户原来运行着的程序。6清除中断禁止标志清除CPSR中的中断禁止标志I和F开放外部中断IRQ和快速中断FIQ。6.ARM的存储器格式及数据类型ARM存储器是从0x00000000地址开始的以字节为单位的线性阵列每个数据字32位占4个字节的地址空间按0号、1号、2号、3号字节排列 。ARM支持的最大寻址空间为4GB。6-1.ARM的两种存储字的格式1大端模式在大端模式下32位数据字的高字节存储在低地址中低字节存放在高地址中。如32位数据字0x32145678存放在起始地址为0x30001000时高字节32存放在低地址0x30001000低字节78存放在高地址0x30001003。2小端模式在小端模式下32位数据字的高字节存放在高地址低字节存放在低地址。如32位数据字0x12345678存放在起始地址为0x30001000时低字节78存放在低地址0x30001000高字节12存放在高地址0x30001003。6-2. 存储器的数据类型除Cortex-A50外32位ARM处理器支持字节(8位)、半字(16位)、字(32位)三种数据类型。字需要4字节对齐地址的低两位为0半字需要2字节对齐地址的最低位为0。每种数据类型又支持有符号数和无符号数因此共有6种数据类型。ARM还支持其他类型的数据如浮点数等数据类型。7.ARM处理器中的MMU和MPU7-1. MMU1MMU的功能虚拟地址到物理地址映射: ARM处理器产生的地址是虚拟地址MMU负责将这些虚拟地址转换为物理地址通过查找页表完成转换。页表存储在内存储器中记录虚拟地址与物理地址的对应关系。存储器访问权限控制: 存储器的访问权限可以按块页为单位设置包括不可访问、只读、可读/写等权限。访问具有不可访问权限的页时会产生存储器异常信号通知ARM处理器。2存储器访问的顺序1TLB查找: 执行加载/存储指令访问存储器时MMU首先查找TLBTranslation Lookaside Buffer转换后备缓冲器中的转换表。2页表查找: 如果TLB中没有找到对应项则硬件自动查找主存储器内的页表获取虚拟地址到物理地址的转换信息和访问权限信息。3中断处理: 如果页表中也找不到转换信息则产生中断缺页中断由操作系统OS进行处理。7-2. MPUMPUMemory Protection Unit存储器保护单元是对存储器进行保护的可选组件。提供简单代替MMU的方法来管理存储器通过定义域区域来控制指令内存和数据内存的访问。MPU允许ARM处理器的4GB地址空间定义8对域分别控制8个指令区域和8个数据区域。每个域的首地址和界或长度均可编程。8.ARM指令8-1. ARM指令分类ARM的指令集可分为分支指令、数据处理指令、程序状态寄存器(CPSR)处理指令、加载/存储指令、协处理器指令、异常产生指令六种。分支指令: 如B、BL、BLX、BX等用于控制程序流程实现跳转。数据处理指令: 如ADD、SUB、MUL等用于进行算术和逻辑运算。程序状态寄存器(CPSR)处理指令: 如MSR、MRS等用于操作程序状态寄存器。加载/存储指令: 如LDR、STR、LDM、STM等用于数据在寄存器和存储器之间的传输。协处理器指令: 如CDP、MCR、MRC等用于与协处理器进行交互。异常产生指令: 如SWI、BKPT等用于产生异常或中断。8-2. ARM指令格式opcode: 指令的操作码即助记符如MOV、ADD、B等用于指定指令的功能。{cond}: 指令执行的条件码如EQ、NE等满足条件时指令才会执行。条件码共有16种位于指令的最高4位。可省略。{S}指令执行时是否更新CPSR可省略。Rd目的寄存器Rn第一个源操作数op2第二个源操作数8-3.操作数符号立即数符号(#): 表示立即数其后可以是十进制数或十六进制数。十六进制符号(0x): 表示其后的数据为十六进制数。更新基址寄存器符号(!): 指令完成后将最后地址写入基址寄存器。复制SPSR到CPSR符号(^): 用于批量数据存储指令中放在寄存器后面当后缀当其前面寄存器不包括PC时该符号表示所用的寄存器是用户模式的寄存器当其前面的寄存器包含PC时该符号指示将SPSR的值复制到CPSR。寄存器列表范围符号(-): 表示多个连续寄存器如R0-R7。8-4.移位操作移位操作类型包括LSL(逻辑左移)、ASL(算术左移)、LSR(逻辑右移)、ASR(算术右移)、ROR(循环右移)以及RRX(带扩展的循环右移)。移位操作格式:Rm, opsh #shift其中Rm为要移位的通用寄存器opsh为移位操作符shift为移位次数(0~31)。9.ARM指令的寻址方式1. 立即寻址立即寻址也称立即数寻址操作数本身就在指令中给出取出指令即取到操作数。立即数前带有“#”前缀十六进制立即数还需在“#”后加“0x”。例: MOV R0,#0x11ADC R0,#99。2. 寄存器寻址利用寄存器中的数值作为操作数。例: ADD R3,R1,R2将R1和R2的数据相加后存入R3。3. 寄存器间接寻址寄存器中存储的是操作数所在内存地址通过该地址访问操作数。寄存器名用中括号[]括起来表示间接寻址。例: LDR R0,[R1]将R1指向地址中的值加载到R0。4. 基址加变址寻址将基址寄存器的内容与指令中的地址偏移量相加得到操作数的有效地址。常用于访问基地址附近的内存单元。例: LDR R0,[R1,#3]将R13地址中的值加载到R0。5. 相对寻址以程序计数器PC的当前值为基地址指令中的地址标号作为偏移量相加后得到操作数的有效地址。主要用于跳转指令。例: BL Subroutine_A跳转到子程序Subroutine_A处执行。6. 堆栈寻址堆栈是一种数据结构按先进后出(FILO)方式工作使用堆栈指针指示当前操作位置。分为递增堆栈和递减堆栈各有满栈和空栈两种工作方式。例: 满递增堆栈堆栈指针指向最后压入的数据地址由低向高生成。7. 块拷贝寻址又称多寄存器寻址一条指令可完成多个寄存器值的传送。最多可传送16个通用寄存器的值。例:LDMIA R0[R1,R2,R5,R9],表示[R0]-R1;[R04]-R2;[R08]-R5;[R012]-R9。10.ARM支持的伪指令在ARM汇编语言程序中有一些特殊指令助记符没有相对应的操作码通常称为伪指令。ARM汇编的伪指令类型包括符号定义、数据定义、汇编控制、宏指令等10-1.符号定义伪指令符号定义目的:定义符号提供数据符号定义内容:变量名与表达式符号对应的地址:存储数据的地址分为全局(global)和局部(local)符号定义的数据类型:数值(arithmetic)、逻辑(logic)、字符(string)符号赋值:使用set进行赋值有初始化过程10-2.数据定义伪指令数据定义伪指令以d开头b代表byte即连续的字节w代表半字即每两个字节一组d代表字q代表双字即连续的双字存储。示例:dcb表示定义连续的字节存储dcw表示定义三个连续的半字存储并初始化为123。10-3.汇编控制伪指令汇编控制伪指令类似于C语言中的if else和循环结构。if逻辑表达式为真时执行特定代码段否则执行另一代码段。汇编控制伪指令示例一if else结构:GB ll test生成全局逻辑变量test。if test等于true执行指定序列一否则执行指定序列二。汇编控制伪指令示例二循环结构:gbl a count定义一个名为count的竖直边变量。count set a 3将count的值设置为3。当count小于10时执行循环体指令序列。循环中可能包含使count逐渐加一的操作直至满足终止条件。10-4.其他伪指令断明l指令:涉及程序、数据的分段段有很多属性段的属性:包括代码d、只读read only、可读可写read why、对齐a line、16位或32位指令集entry和end:汇编程序的入口和结束equ指令:定义一个常量类似于C语言的defineexport指令:全局标号声明import指令:引入一个不在当前范围内的标号作为指令exchange指令:外部标号的引用11.ARM汇编语言的语句格式汇编语言的语句由标号、指令或伪指令以及注释组成。指令或伪指令的助记符可以全大写或全小写但不可大小写混用。符号约定:区分大小写: 同名但大小写不同的符号被视为两个不同的符号。唯一性: 符号在其作用范围内必须唯一不允许重名。避免与保留字重名: 自定义符号名不能与系统的保留字或指令、伪指令同名。变量与常量:变量: 其值在程序运行过程中可以改变的量。常量: 其值在程序运行过程中不能改变的量。变量代换: 程序中的变量可以通过代换操作取得一个常量值。11-1.在汇编语言程序中的表达式和运算符运算次序:优先级相同的双目运算符从左到右运算。括号运算符的优先级最高。相邻的单目运算符从右到左运算且单目运算符的优先级高于其他运算符。数值表达式构成: 由数值常量、数值变量、数值运算符和括号构成。常用运算符:算术运算符: 、-、*、/ 及 MOD。移位运算符: ROL、ROR、SHL 及 SHR。数值逻辑运算符: AND、OR、NOT 及 EOR。逻辑表达式构成: 由逻辑量、逻辑运算符和括号构成运算结果为真或假。常用运算符:关系操作符: 、、、、、/。逻辑运算符: LAND、LOR、LNOT 及 LEOR。注意: 逻辑运算符前的“L”用于与位运算符区分。字符串表达式构成: 由字符串常量、字符串变量、运算符和括号构成。字符串最大长度为512B。常用运算符:返回字符串长度运算符: LEN。字节整数转换为字符运算符: CHR。字符串转换运算符: STR。返回左端字符串运算符: LEFT。返回右端字符串运算符: RIGHT。合并字符串运算符: CC。11-2. S3C2410系统引导程序代码1系统引导程序的功能关看门狗定时器: 引导程序首先会关闭看门狗定时器和中断以确保系统稳定启动。设置CPU速率及时钟频率: 接着设置CPU的速率和时钟频率为系统提供基本的运行参数。设置堆栈: 设置堆栈为程序的运行提供必要的内存空间。切换用户模式并初始化用户堆栈: 切换至用户模式并初始化用户堆栈为应用程序的运行做准备。初始化设备寄存器: 如果使用DRAM或其他设备还需要设置相关寄存器初始化这些设备。初始化存储空间: 初始化存储空间为数据的存储和读取提供条件。跳转到C程序入口: 最后跳转到C程序的入口开始执行主程序。2启动文件Startup.S及其代码分析启动文件: 引导程序的主要实现文件是Startup.S这是一个启动代码文件。分析时机: 由于启动代码中涉及许多S3C2410内部硬件知识建议在学习完第3章相关内容后再详细分析Startup.S代码。11-3. 顺序程序设计顺序程序设计也称简单程序设计或直接程序设计没有分支也没有循环是按照指令顺序一条一条执行下去的程序结构。11-4. 分支程序设计ARM分支程序结构通过分支指令B与条件执行相结合来实现。分支指令B通常与cmp等指令结合根据cmp的比较结果或其他运算结果对状态寄存器的位进行改变从而决定是否进行跳转。例: 如三个数826的降序排序过程首先比较a8与b2因a大于等于b所以不变接着比较b2与c6因b不大于c所以交换b与c的位置得到862最后再次比较a8与b6因a大于等于b所以排序完成得到降序排列862。11-5. 循环程序设计1循环控制部分循环初始部分: 为开始循环准备必要的条件如循环次数、循环体需要的初始值等。循环体部分: 重复执行的程序代码其中包括对循环条件修改的程序段。循环控制部分: 判断循环条件是否成立决定是否继续循环是编程的关键和难点。分为先循环后判断和先判断后循环两种方式。2由计数控制循环方法: 用一个通用寄存器Rn(n0,1,2,3,4,5,6,7)作为计数器先给初始值然后每循环一次减1直到循环次数为0结束循环。程序结构: 初始化计数器→执行循环体→修改计数器值→判断计数器值是否为0→是则结束循环否则继续循环。3由条件控制循环11-6. 子程序设计在汇编语言设计中子程序设计是指将单独的功能块进行独立设计。目的是提高代码的模块化和可重用性。子程序调用采用BL指令。格式为BL 子程序名。BL指令会保存返回地址以便子程序执行完毕后能够返回到调用处。11-7. 多段结构程序设计在ARM汇编语言程序中除了可以使用一个代码段外还可以定义多个数据段以便对数据进行更灵活的操作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询