ARM_协处理器-CP15
- 格式:doc
- 大小:264.50 KB
- 文档页数:17
arm汇编cp15格式-回复CP15格式是一个用于ARM架构处理器中的协处理器格式。
它被用于实现对特殊寄存器和一些特权操作的访问和控制。
在本文中,我们将一步一步地回答一些关于CP15格式的问题,包括它的功能、如何使用它以及它的一些使用示例。
一、什么是CP15格式?CP15格式是ARM架构中的一个协处理器格式。
它被用来实现对一些特殊寄存器和特权操作的访问和控制。
这些特殊寄存器和特权操作对于操作系统和处理器架构之间的通信和控制至关重要。
二、CP15格式的功能是什么?CP15格式的主要功能包括:1. 访问系统控制寄存器(System Control Registers,SCR)和体系结构版本寄存器(Architectural Version Registers,AVR)等特殊寄存器;2. 控制处理器的访问权限和特权级别;3. 提供对异常处理的支持,例如中断处理和系统调用;4. 管理cpu缓存和内存管理单元(MMU)等。
5. 提供对TLB(Translation Lookaside Buffer)的访问和控制。
三、怎么使用CP15格式?使用CP15格式,我们需要通过特殊的指令来进行访问和控制。
在ARM 汇编语言中,这些指令通常以"MCR"(Move to Co-processor Register)或"MRC"(Move from Co-processor Register)开头,后跟协处理器编号和寄存器编码。
下面是一些使用CP15格式的示例:1. 读取系统控制寄存器的值:MRC p15, 0, R1, c1, c0, 0这条指令读取CP15寄存器1(c1)中的值,并将其放入R1寄存器中。
2. 更新系统控制寄存器的值:MCR p15, 0, R0, c1, c0, 0这条指令将R0寄存器的值写入CP15寄存器1(c1)中,从而更新系统控制寄存器的值。
四、CP15格式的使用示例1. 启用或禁用MMU:MRC p15, 0, R1, c1, c0, 0 读取系统控制寄存器的值ORR R1, R1, #0x1 << 0 将R1寄存器中的Bit 0位置1以启用MMUMCR p15, 0, R1, c1, c0, 0 更新系统控制寄存器的值通过读取和更新系统控制寄存器的值来启用或禁用MMU。
嵌⼊式试题集(含答案)---内容简单-不够详尽1、ARM微处理器有7种⼯作模式,它们分为两类⾮特权模式、特权模式。
其中⽤户模式属于⾮特权模式2、ARM⽀持两个指令集,ARM核因运⾏的指令集不同,分别有两个状态ARM 、Thumb,状态寄存器CPSR的T 位反映了处理器运⾏不同指令的当前状态3、ARM核有多个寄存器,其中⼤部分⽤于通⽤寄存器,有⼩部分作为专⽤寄存器,R15 寄存器⽤于存储PC,R13通常⽤来存储SP 。
ARM处理器有两种总线架构,数据和指令使⽤同⼀接⼝的是冯诺依曼,数据和指令分开使⽤不同接⼝的是哈佛结构4、ARM微处理器复位后,PC的地址通常是0x0 ,初始的⼯作模式是Supervisor 。
5、ARM微处理器⽀持虚拟内存,它是通过系统控制协处理器CP15 和MMU(存储管理部件)来进⾏虚拟内存的存储和管理。
当系统发⽣数据异常和指令领取异常时,异常处理程序透过嵌⼊式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页⾯,以保证程序正常执⾏。
6、编译链接代码时,有两种存储代码和数据的字节顺序,⼀种是⼩端对齐,另⼀种是⼤端对齐。
7、构建嵌⼊式系统开发环境的⼯具链有多种,其中开放源码的⼯具链是GNU⼯具链,ARM公司提供的⼯具链是ADS⼯具链计算机有CISC和RISC两种类型,以ARM微处理器为核⼼的计算机属于RISC类型,其指令长度是定长的8、⽬前使⽤的嵌⼊式操作系统主要有哪些?请举出六种较常⽤的。
Windows CE/Windows Mobile、VxWork、Linux、uCos、Symbian、QNX任选六9、Boot Loader在嵌⼊式系统中主要起什么作⽤?完成哪些主要的⼯作?答:Boot Loader是在嵌⼊式系统复位启动时,操作系统内核运⾏前,执⾏的⼀段程序。
通过Boot Loader,初始化硬件设备,建⽴内存和I/O空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。
第1章复习要点1.1.1节嵌入式系统的概念1.1.3节嵌入式系统的特点1.3节嵌入式处理器1.4节嵌入式系统的组成第2章复习要点2.1节计算机体系结构分类2.3.1节 ARM和Thumb状态2.3.2节 RISC技术2.3.3节流水线技术2.4.3节 ARM存储系统第3章复习要点3.1节ARM编程模式3.2节ARM指令格式及其寻址方式3.3节ARM指令集(课上所讲的指令)第4章复习要点4.1节汇编语言源程序格式4.2节汇编语言的上机过程第5章复习要点5.1节键盘接口5.2节 LED显示器接口5.5.1节 UART异步串行接口作业题答案:1.什么是嵌入式系统?∙第一种,根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
∙第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2.与通用型计算机相比,嵌入式系统有哪些特点?⏹通常是面向特定应用的;⏹空间和各种资源相对不足,必须高效率地设计,量体裁衣、去除冗余;⏹产品升级换代和具体产品同步,具有较长的生命周期;⏹软件一般都固化在存储器芯片或单片机本身;⏹不具备自举开发能力,必须有一套开发工具和环境才能进行开发3.举例介绍嵌入式微处理器有哪几类?一、嵌入式微处理器(Embedded Microprocessor Unit, EMPU)嵌入式处理器目前主要有Aml86/88、386EX、SC-400、PowerPC、68000、MIPS、ARM系列等。
二、嵌入式微控制器(Microcontroller Unit, MCU)嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300等。
1、 ARM 微处理器有 7种工作模式,它们分为两类 非特权模式 、 特权模式 。
其中用户模式属于 非特权模式ARM 处理器有两种总线架构,数据和指令使用同一接口的是 冯诺依曼 ,数据和指令分开使用不同接口的是 哈佛结 4、 ARM 微处理器复位后,PC 的地址通常是 0x0 ,初始的工作模式是Supervisor 。
5、 ARM 微处理器支持虚拟内存,它是通过系统控制协处理器 CP15 和MMU (存储管理部件)来进行虚拟内存的存储和管理。
当系统发生 数据 异常和指令领取 异常时,异常处理程序透过嵌入式操作系统的内存管理机制,通过MMU 交换物理内存和虚拟内存的页面,以保证程序正常执行。
6、 编译链接代码时,有两种存储代码和数据的字节顺序,一种是 小端对齐 ,另一种是 打断对齐7、 构建嵌入式系统开发环境的工具链有多种,其中开放源码的工具链是 GNU 工具链 ,ARM 公司提供的工具链是 ADS工具链计算机有CISC 和RISC 两种类型,以ARM 微处理器为核心的计算机属于 RISC 类型,其指令长度是 定长的 1、 目前使用的嵌入式操作系统主要有哪些?请举出六种较常用的。
Windows CE/Windows Mobile 、VxWork 、Linux 、uCos 、Symbian 、QNX 任选六2、ARM 系统中的堆栈有四种,如下图。
请按图标出四种堆栈的类型。
ATPCS 编程规范约定使用的堆栈是哪一种?答:FD 、FA 、ED 、EA 。
A TPCS 编程规范约定使用的堆栈是FD3、Boot Loader 在嵌入式系统中主要起什么作用?完成哪些主要的工作?答:Boot Loader 是在嵌入式系统复位启动时,操作系统内核运行前,执行的一段程序。
通过Boot Loader ,初始化硬件设备,建立内存和I/O 空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。
4、搭建嵌入式开发环境,连接目标板,一般使用什么通信接口连接?在Windows 主机上使用什么软件建立连接?在Linux 主机上使用什么软件建立连接?1、 答:RS-232,以太网口、并口在Windows 主机上使用超级终端软件 在Linux 主机上使用Minicom 软件 5嵌入式开发环境主要包括哪些组件?嵌入式系统开发需要交叉编译和在线调试的开发环境,主要包括● 宿主机 ● 目标机(评估电路板) ● 基于JTAG 的ICD 仿真器、或调试监控软件、或在线仿真器ICE ● 运行于宿主机的交叉编译器和链接器、以及开发工具链或软件开发环境 ● 嵌入式操作系统6 在进行基于ARM 核的嵌入式系统软件开发时,调用如下函数:int do_something(int arg1,void *arg2,char arg3,int *arg4)这四个参数通过什么方式从调用程序传入被调函数?根据ATPCS 编程规范,调用函数和子程序通过R0——R3四个寄存器传递参数,超过四个参数使用堆栈传递。
关于mrc?p15,0,r0,c1,c0,0
mrc是协处理器命令。
用于读取协处理器中的寄存器的数据到ARM处理器的寄存器里面。
mrc p15,0,r0,c1,c0,0 这句话的意思应该是读协处理器中的寄存器数据到ARM处理器的r0里面。
应该是ARM访问MMU,一般cp15就是MMU。
<MCR|MRC>{cond} p#, <expression1>,Rd,cn,cm{, <expression2>}
MRC 从协处理器移到ARM7寄存器(L=1)
MCR 从ARM7寄存器移到协处理器(L=0)
{cond} 两个字符的条件代码
p# 被请求得协处理器的惟一标识苻
<expression1> 计算一个常量并放到CP Opc域
Rd 是一个表达式计算ARM7有效寄存器序号
cn 和cm 是计算有效协处理器寄存器CRn CRm序号
<expression2> 计算一个常量,并放到CP域
举例:
MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6,
; 传送结果到R3 (单次32位字)
MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4
;结果送到c6。
嵌入式复习题选择题2.下列不属于嵌入设计处理器本身带有的基本接口是(C)A.串口;B.并口;C. PCIE;D.AD/DA;3.以下几个步骤是DMA控制过程的主要节点,请选出正确的DMA控制流程(请求信号HRQ)为(A)(1). CPU让出总线控制权(响应信号HLDA)(2). DMA控制器向CPU请求总线使用权(3). DMA控制器控制总线,发总线命令、传送数据(4). DMA总线控制器归还总线控制权(5). CPU重新获取总线控制权A. (2),(1),(3),(4);B. (1),(2),(3),(4);C. (3),(1),(4),(2);D. (3),(4),(1),(2);6.将系统启动代码读入内存是(C)的主要职责A. 内存管理;B. VFS;C. Boot Loader;D. 虚拟内存11. BSP作为一种嵌入式软件,他的主要特点是(B)A. 与硬件无关,与操作系统有关B. 与硬件和操作系统都相关C. 与硬件有关,与操作系统无关D. 与操作系统和硬件都无关14.下列中断处理过程的步骤,最先执行的是(D)A. 安装堆栈B. 调用中断服务C. 恢复堆栈D. 保存寄存器15.嵌入式系统的发展可大概分为四个阶段,其中第三个阶段是(B )A. 单片机的嵌入式系统,结构和功能单一,用于工业控制领域。
B.实时操作系统的嵌入式系统的嵌入式系统阶段。
C. 简单的嵌入式阶段,有较高的可靠性,低功耗的嵌入式处理器和简单的操作系统。
D. 面向Internet的阶段。
16.下面不是CISC与RISC的架构的差异是(D)A. 指令数量不同,前者多,或者较少,通常少于100.B. 前者有些指令执行时间较长,后者则没有。
C. 前者有丰富的寻址模式,而后者有较少的寻址模式。
D. 前者有复杂的编译器设计,可优化编译技术,生成高效的目标代码程序,而后者则是简单的编译器设计,难以优化生成高效的目标代码程序。
17.下面不是嵌入式ARM架构的嵌入式处理器的特点是(C)A. 具有大量的寄存器,指令执行速度快。
内存管理单元(MMU)和协处理器CP15介绍(转)内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌⼊式系统中,存储系统差别很⼤,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使⽤虚拟地址对其进⾏读写;系统中,需引⼊存储保护机制,增强系统的安全性。
为适应如此复杂的存储体系要求,ARM处理器中引⼊了存储管理单元来管理存储系统。
⼀内存管理单元(MMU)概述在ARM存储系统中,使⽤MMU实现虚拟地址到实际物理地址的映射。
为何要实现这种映射?⾸先就要从⼀个嵌⼊式系统的基本构成和运⾏⽅式着⼿。
系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处⾼端启动)处启动,顺序执⾏程序,在程序指针(PC)启动地址,属于⾮易失性存储器空间范围,如ROM、FLASH等。
然⽽与上百兆的嵌⼊式处理器相⽐,FLASH、ROM等存储器响应速度慢,已成为提⾼系统性能的⼀个瓶颈。
⽽SDRAM具有很⾼的响应速度,为何不使⽤SDRAM来执⾏程序呢?为了提⾼系统整体速度,可以这样设想,利⽤FLASH、ROM对系统进⾏配置,把真正的应⽤程序下载到SDRAM中运⾏,这样就可以提⾼系统的性能。
然⽽这种想法⼜遇到了另外⼀个问题,当ARM处理器响应异常事件时,程序指针将要跳转到⼀个确定的位置,假设发⽣了IRQ中断,PC将指向0x18(如果为⾼端启动,则相应指向0vxffff_0018处),⽽此时0x18处仍为⾮易失性存储器所占据的位置,则程序的执⾏还是有⼀部分要在FLASH或者ROM中来执⾏的。
那么我们可不可以使程序完全都SDRAM中运⾏那?答案是肯定的,这就引⼊了MMU,利⽤MMU,可把SDRAM的地址完全映射到0x0起始的⼀⽚连续地址空间,⽽把原来占据这⽚空间的FLASH或者ROM映射到其它不相冲突的存储空间位置。
关于ARM9协处理器CP15及MCR和MRC指令在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。
CP15包含16个32位的寄存器,其编号为0~15。
访问CP15寄存器的指令MCR ARM寄存器到协处理器寄存器的数据传送MRC 协处理器寄存器到ARM寄存器的数据传送MCR指令和MRC指令只能在处理器模式为系统模式时执行指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常中断。
MCR指令MCR指令将ARM处理器的寄存器中的数据传送到协处理器寄存器中。
如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。
指令语法格式MCR{<cond>} <p>,< opcode_1>,<Rd>,<CRn>,<CRm>{,<opcode_2>}MCR{<cond>} p15,0,<Rd>,<CRn>,<CRm>{,<opcode_2>}其中,<cond>为指令执行的条件码。
当<cond>忽略时指令为无条件执行。
< opcode_1>为协处理器将执行的操作的操作码。
对于CP15协处理器来说,< opcode_1>永远为0b000,当< opcode_1>不为0b000时,该指令操作结果不可预知。
<Rd>作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中。
<CRn>作为目标寄存器的协处理器寄存器,其编号可能是C0,C1,…,C15。
<CRm>和<opcode_2>两者组合决定对协处理器寄存器进行所需要的操作,如果没有指定,则将为<CRm>为C0,opcode_2为0,否则可能导致不可预知的结果。
ARM 协处理器及访问CP15协处理器4.1.1 访问CP15寄存器的指令访问CP15寄存器指令的编码格式及语法说明如下:31 28 27 24 23 21 2019 1615 1211 87 543 0cond1 1 1 0opcode _1Lcr nrd1 1 1 1opcode _2说明::协处理器行为操作码,对于CP15来说,永远为0b000,否则结果未知。
:不能是r15/pc,否则,结果未知。
:作为目标寄存器的协处理器寄存器,编号为C0~C15。
:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将crm 设置为c0,否则结果未知。
(很重要如(来自UBOOT PROJECT: / * disable MMU stuff and caches */ mrc p15, 0, r0, c1, c0, 0bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM orr r0, r0, #0x00000002 @ set bit 2 (A Align orr r0, r0,#0x00001000 @ set bit 12 (I I-Cachemcr p15, 0, r0, c1, c0, 0:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略或者将其设置为0,否则结果未知。
指令说明语法格式mcr 将ARM 处理器的寄存器中的数据写到CP15中的寄存器中mcr{} p15, , , , , {} mrc将CP15中的寄存器中的数据读到ARM 处理器的寄存器中mcr{}p15, , , , , {}4.1.2 CP15寄存器介绍CP15的寄存器列表如表4-1所示。
表4-1 ARM处理器中CP15协处理器的寄存器寄存器编号基本作用在MMU 中的作用在PU 中的作用0 ID 编码(只读)编码和cache 类型 1 控制位(可读写)各种控制位2 存储保护和控制地址转换表基地址的控制位3 存储保护和控制域访问控制位控制位4 存储保护和控制保留保留5 存储保护和控制内存失效状态访问权限控制位6 存储保护和控制内存失效地址保护区域控制7 高速缓存和写缓存高速缓存和写缓存控制8 存储保护和控制控制保留 9 高速缓存和写缓存高速缓存锁定10 存储保护和控制锁定保留 11 保留 12 保留 13 进程标识符进程标识符14 保留15因不同设计而异因不同设计而异因不同设计而异• CP15的寄存器C0CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的指定要访问哪个具体物理寄存器,与两个标识符寄存器的对应关系如下所示:opcode_2编码对应的标识符号寄存器0b000 主标识符寄存器 0b001cache 类型标识符寄存器其他保留1)主标识符寄存器访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中ARM 不同版本体系处理器中主标识符寄存器的编码格式说明如下。
嵌⼊式复习题嵌⼊式系统原理与设计第⼀章嵌⼊式系统概述1、什么是嵌⼊式系统?嵌⼊式系统和普通⼈的⽣活⾮常紧密,如⽇常⽣活中使⽤的⼿机、微波炉、有线电视机顶盒等,都属于嵌⼊式系统。
与通常使⽤的PC机相⽐,嵌⼊式系统的形式变化多样、体积⼩,可以灵活地适应各种设备的需求。
因此,可以把嵌⼊式系统理解为⼀种为特定设备服务的,软件硬件可裁剪的计算机系统。
嵌⼊式系统的英⽂名称是Embedded System。
⽬前被我国科学家普遍认同的定义是:嵌⼊式系统是以应⽤为中⼼,以计算机技术为基础,软硬件可裁减,对功能、可靠性、成本、体积、功耗要求严格的专⽤计算机系统。
2、嵌⼊式系统具有哪些特点?嵌⼊式系统通常是⾯向特定应⽤的嵌⼊式CPU,与通⽤型的最⼤不同就是嵌⼊式CPU⼤多⼯作在为特定⽤户群设计的系统中,执⾏的是带有特定要求的预先定义的任务,如实时性、安全性、可⽤性等。
它通常具有低功耗、体积⼩、集成度⾼等特点,能够把通⽤CPU中许多由板卡完成的任务集成在芯⽚内部,从⽽有利于嵌⼊式系统设计趋于⼩型化,移动能⼒⼤⼤增强,跟⽹络的耦合也越来越紧密。
嵌⼊式系统是将先进的计算机技术、半导体技术和电⼦技术与各个⾏业的具体应⽤相结合的产物。
这⼀点就决定了它必然是⼀个技术密集、资⾦密集、⾼度分散、不断创新的知识集成系统;嵌⼊式系统的硬件和软件都必须⾼效率地设计,量体裁⾐、去除冗余,⼒争在同样的硅⽚⾯积上实现更⾼的性能,这样才能在具体应⽤中对处理器的选择更具有竞争⼒。
由于嵌⼊式系统通常需要进⾏⼤量⽣产,所以单个的成本节约,能够随着产量进⾏成百上千的放⼤。
3、嵌⼊式系统与通⽤计算机相⽐有哪些区别?嵌⼊式系统通常是⾯向特定应⽤的嵌⼊式CPU,与通⽤型的最⼤不同就是嵌⼊式CPU⼤多⼯作在为特定⽤户群设计的系统中,执⾏的是带有特定要求的预先定义的任务,如实时性、安全性、可⽤性等。
它通常具有低功耗、体积⼩、集成度⾼等特点,能够把通⽤CPU中许多由板卡完成的任务集成在芯⽚内部,从⽽有利于嵌⼊式系统设计趋于⼩型化,移动能⼒⼤⼤增强,跟⽹络的耦合也越来越紧密。
ARM的CP15协处理器的寄存器访问CP15寄存器的指令访问CP15寄存器指令的编码格式及语法说明如下:1)主标识符寄存器访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM7之后处理器的主标识符寄存器编码格式如下所示:ARM7处理器的主标识符寄存器编码格式如下所示:ARM7之前处理器的主标识符寄存器编码格式如下所示:控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示:cache容量字段bits[8: 6]的含义如下所示:cache相联特性字段bits[5: 3]的含义如下所示:cache块大小字段bits[1: 0]的含义如下所示:•CP15的寄存器C1访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c1, c0{, 0} ;将CP15的寄存器C1的值读到r0中mcr p15, 0, r0, c1, c0{, 0} ;将r0的值写到CP15的寄存器C1中CP15中的寄存器C1的编码格式及含义说明如下:•CP15的寄存器C2CP15中的寄存器C2保存的是页表的基地址,即一级映射描述符表的基地址。
其编码格如下所示:mcr p15, 0, <rd>, <c7>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能•CP15中的寄存器C8CP15的C8寄存器用来控制清除TLB的内容,是只写寄存器,读操作将产生不可预知的后果。
访问CP15的C8寄存器的指令格式如下所示:mcr p15, 0, <rd>, <c8>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值组合实现不同功能,见第4.2节•CP15中的寄存器C9CP15的C9寄存器用于控制cache内容锁定。
嵌入式技术工程师中级证书考试考前练习题(一)一、选择题(单选题15 道,每题1 分;多选题15 道每题2 分)1. 当Vi 编辑器处于命令行模式时,下列命令叙述错误的是()。
A.按[0]:移动到文章的开头B.按[G]:移动到光标所在行的“行尾”C.按[w]:光标跳到下个字的开头D.按[e]:光标跳到下个字的字尾2. 编写linux 驱动程序,若想动态分配连续的物理内存应该使用的函数是()。
A.kmalloc()B.malloc()C.vmalloc()D.new()3. 在makefile 中对变量赋值,若希望定义的变量是立即变量(即定义时它的值就已经确定了),应选择的操作符是()。
A. =B.?=C.:=D. +=4. 已知makefile 中有函数:$(filter %.c %.s ,foo.c bar.c baz.s ugh.ha.out),则执行后的结果为()。
A.foo.c baz.s ugh.hB.bar.c ugh.h a.outC.baz.s ugh.h a.outD.foo.c bar.c baz.s5. 使用gdb 调试程序,若希望某个表达式的值发生改变或被读取时立即停止程序的运行,应使用的命令是()。
A.watchB.rwatchC.awatchD.info watchpoints6.下列ARM 处理器异常处理模式中优先级最高的是()。
A.复位B.未定义指令C.软件中断D.预取中止7. RISC 型处理器都是采用()结构。
A. READ/WRITEB. LOAD/STOREC. PIPELINED. 哈佛结构8. 下列对ARM 协处理器CP15 的各寄存器的作用叙述错误的是()。
A.R6:故障地址寄存器B.R7:快存Cache 操作C.R8:变换后备缓冲器TLB 操作D.R9:进程ID 映像9. ARM 系统中,协处理器应答信号CPA 和CPB 都处于低电压,表示()。
A. 协处理器可以从ARM 处理器内核接收一条协处理器指令,并立即开始执行B. 协处理器不存在,不能接收正在译码的指令C. 协处理器可以从ARM 处理器内核接收一条协处理器指令,但目前不能处理D. 无效响应10. 对指令LDRD R6,[R11]解析正确的是()。
ARM920T的CP15协处理器ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,本节首先从总体上介绍MMU、Cache和CPU核是如何协同工作的,后面两节分别讲解MMU和Cache的细节。
三星公司的S3C2410是一种很常见的采用ARM920T的芯片,涉及到具体的芯片时我们以S3C2410为例。
以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]),和CPU核的r0到r15寄存器一样,协处理器寄存器也是用0到15来编号,在指令中用4个bit来表示寄存器编号,有些协处理器寄存器有影子寄存器,这种情况下对同一个编号的寄存器使用不同的选项读或者写实际上访问的是不同的寄存器,后文用到某个寄存器时会详细说明它的功能。
表1. CP15协处理器的寄存器列表对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。
对CP15协处理器的所有操作都是通过CPU核寄存器和CP15寄存器之间交换数据来完成的。
下图是协处理器的指令格式(摘自[S3C2410用户手册])。
图8. 协处理器指令格式和其它ARM指令一样,Cond是条件码,bit 20是L位,表示该指令是读还是写,如果L=1就表示Load,从外面读到CPU核中,也就是mrc指令,如果L=0就表示Store,也就是mcr指令。
[11:8]这四个位是协处理器编号,CP15的编号是15,因此是4个1。
CRn是CP15寄存器编号,Rd是CPU核寄存器编号,各占4个位。
对于CP15协处理器,规定opcode1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。
虽然这里介绍了协处理器的寄存器编号和相关指令,但读者只需了解对协处理器是这样进行操作的就可以了,我们的重点是讲解MMU和Cache的基本概念,具体各种操作的指令该怎么写可以参考[S3C2410用户手册]。
ARM920T的MMU与Cache目录虚拟地址和物理地址的概念虚拟内存管理ARM920T的CP15协处理器MMUCache操作MMU和Cache的内核启动代码参考资料索引虚拟地址和物理地址的概念CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU (Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。
图 1. 物理地址示意图如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。
图 2. 虚拟地址示意图MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU 通常一页为4K。
例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。
虚拟内存管理现代操作系统充分利用MMU提供的VA到PA的映射机制来做内存管理,以下称为虚拟内存管理(Virtual Memory Management)。
首先看下面的例子:例 1. 进程的地址空间这是bash进程的虚拟地址空间,32位CPU的虚拟地址空间是4GB,也就是0x0000 0000-0xffff ffff,该进程占用的地址范围近似为0x0000 0000-0xbfff ffff,地址范围0xc000 0000-0xffff ffff由内核占用,用户进程不允许访问。
ARM920T的CP15协处理器ARM920T的MMU和Cache都集成在CP15协处理器中,MMU和Cache的联系非常密切,本节首先从总体上介绍MMU、Cache和CPU核是如何协同工作的,后面两节分别讲解MMU和Cache的细节。
三星公司的S3C2410是一种很常见的采用ARM920T的芯片,涉及到具体的芯片时我们以S3C2410为例。
以下是CP15协处理器的寄存器列表(摘自[S3C2410用户手册]),和CPU核的r0到r15寄存器一样,协处理器寄存器也是用0到15来编号,在指令中用4个bit来表示寄存器编号,有些协处理器寄存器有影子寄存器,这种情况下对同一个编号的寄存器使用不同的选项读或者写实际上访问的是不同的寄存器,后文用到某个寄存器时会详细说明它的功能。
表1. CP15协处理器的寄存器列表对CP15协处理器的操作使用mcr和mrc两条协处理器指令,这两条指令的记法是从后往前看:mcr是把r(CPU核寄存器)中的数据传送到c(协处理器寄存器)中,mrc则是把c(协处理器寄存器)中的数据传送到r(CPU核寄存器)中。
对CP15协处理器的所有操作都是通过CPU核寄存器和CP15寄存器之间交换数据来完成的。
下图是协处理器的指令格式(摘自[S3C2410用户手册])。
图8. 协处理器指令格式和其它ARM指令一样,Cond是条件码,bit 20是L位,表示该指令是读还是写,如果L=1就表示Load,从外面读到CPU核中,也就是mrc指令,如果L=0就表示Store,也就是mcr指令。
[11:8]这四个位是协处理器编号,CP15的编号是15,因此是4个1。
CRn是CP15寄存器编号,Rd是CPU核寄存器编号,各占4个位。
对于CP15协处理器,规定opcode1应该为0,opcode2和CRm是指令的选项,具体含义取决于不同的寄存器。
虽然这里介绍了协处理器的寄存器编号和相关指令,但读者只需了解对协处理器是这样进行操作的就可以了,我们的重点是讲解MMU和Cache的基本概念,具体各种操作的指令该怎么写可以参考[S3C2410用户手册]。
MMU是如何把VA映射成PA的呢?从图4 “进程地址空间是独立的”来看,好像是有一张VA转PA的表,给一个VA查表就可以查到PA,实际上并不是这么简单,通常要有一个多级的查表过程,对于ARM体系结构是两级查表,对于一些64位体系结构则需要更多级。
看下面的图示。
图9. Translation Table Walk首先将32位的VA[3]分成三段,前两段[31:20]和[19:12]作为两次查表的索引,第三段[11:0]作为页内的偏移。
查表的步骤如下:1 CP15协处理器的TTB寄存器(看看表1 “CP15协处理器的寄存器列表”中这是第几个寄存器?)中保存着第一级页表(Translation Table)的基地址,这个基地址指的是PA,也就是说页表是直接按这个地址存在物理内存中的。
2 以TTB中的内容为基地址,以VA[31:20]为索引在表中查出一项(想一下这个表中一共有多少项?),这个表项中保存着第二级页表(Coarse Page Table)的基地址,同样是物理地址,也就是说第二级页表也是直接按这个地址存在物理内存中的。
3 以VA[19:12]为索引在第二级页表中查出一项(想一下这个表中一共有多少项?),这个表项中就保存着物理页面的基地址,先前我们说虚拟内存管理是以页为单位的,一个虚拟内存的页映射到一个物理内存的页框,从这里就可以得到印证,因为查表是以页为单位来查的。
4 有了物理页面的基地址之后,加上VA[11:0]这个偏移量就可以取出相应地址上的数据(想一下一个页是多少字节?)。
这个过程称为Translation Table Walk,Walk这个词用得非常形象。
从TTB走到一级页表,又走到二级页表,又走到物理页面,一次寻址其实是三次访问物理内存。
注意这个“走”的过程完全是硬件做的,每次CPU寻址时MMU就自动完成以上四步,不需要编写指令指示MMU去做,前提是操作系统要维护页表项的正确性,每次分配内存时填写相应的页表项,每次释放内存时清除相应的页表项,在必要的时候分配或释放整个页表。
有了以上基本概念,我们来看CPU访问内存时的硬件操作顺序(摘自[ARM参考手册])。
图10. CPU访问内存时的硬件操作顺序我们以CPU读内存为例解释一下图中的步骤,各步骤在图中有对应的标号。
1 CPU核(图中的“ARM”框)发出VA请求读数据,TLB(Translation Lookaside Buffer)接收到该地址。
TLB是MMU中的一块高速缓存(也是一种Cache),它缓存最近查找过的VA 对应的页表项,如果TLB里缓存了当前VA的页表项就不必做Translation Table Walk了,否则去物理内存中读出页表项保存在TLB中,TLB缓存可以减少访问物理内存的次数。
2 页表项中不仅保存着物理页面的基地址,还保存着权限位和是否允许Cache的标志。
MMU首先检查权限位,如果没有访问权限,就引发一个异常给CPU核。
然后检查是否允许Cache,如果允许Cache就启用Cache和CPU核互操作,图中的“C, B bits”可以理解为选通线,后面再详细解释这两个位的作用。
3 如果不允许Cache,则直接发出PA从物理内存中读取数据到CPU核。
4 如果允许Cache,则以VA为索引到Cache中查找是否缓存了要读取的数据,如果Cache 中已经缓存了该数据(称为Cache Hit)则直接返回给CPU核,如果Cache中没有缓存该数据(称为Cache Miss),则发出PA从物理内存中读取数据并缓存到Cache中,同时返回给CPU核。
然而Cache并不是只取CPU核所要的数据,而是把相邻的数据都取上来缓存,这称为一个Cache Line。
ARM920T的Cache Line是32字节,例如CPU核要读取地址0x134-0x137的4字节数据,Cache会把地址0x120-0x13f(对齐到32字节地址边界)的32字节都取上来缓存。
ARM926EJ-S/ARM920T 协处理器CP14, CP15详解ARM 微处理器可支持多达16 个协处理器,用于各种协处理操作,在程序执行的过程中,每个协处理器只执行针对自身的协处理指令,忽略ARM 处理器和其他协处理器的指令。
ARM 的协处理器指令主要用于ARM 处理器初始化ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在ARM 协处理器的寄存器和存储器之间传送数据。
ARM 协处理器指令包括以下 5 条:—CDP 协处理器数操作指令—LDC 协处理器数据加载指令—STC 协处理器数据存储指令—MCR ARM 处理器寄存器到协处理器寄存器的数据传送指令—MRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令1、CDP 指令CDP 指令的格式为:CDP{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。
CDP 指令用于ARM 处理器通知ARM 协处理器执行特定的操作,若协处理器不能成功完成特定的操作,则产生未定义指令异常。
其中协处理器操作码 1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器和源寄存器均为协处理器的寄存器,指令不涉及ARM 处理器的寄存器和存储器。
指令示例:CDP P3 ,2 ,C12 ,C10 ,C3 ,4 ;该指令完成协处理器P3 的初始化2、LDC 指令LDC 指令的格式为:LDC{条件}{L} 协处理器编码,目的寄存器,[源寄存器]LDC 指令用于将源寄存器所指向的存储器中的字数据传送到目的寄存器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。
其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。
指令示例:LDC P3 ,C4 ,[R0] ;将ARM 处理器的寄存器R0 所指向的存储器中的字数据传送到协处理器P3 的寄存器C4 中。
3、STC 指令STC 指令的格式为:STC{条件}{L} 协处理器编码,源寄存器,[目的寄存器]STC 指令用于将源寄存器中的字数据传送到目的寄存器所指向的存储器中,若协处理器不能成功完成传送操作,则产生未定义指令异常。
其中,{L}选项表示指令为长读取操作,如用于双精度数据的传输。
指令示例:STC P3 ,C4 ,[R0] ;将协处理器P3 的寄存器C4 中的字数据传送到ARM 处理器的寄存器R0 所指向的存储器中。
4、MCR 指令MCR 指令的格式为:MCR{条件} 协处理器编码,协处理器操作码1,源寄存器,目的寄存器1,目的寄存器2,协处理器操作码2。
MCR 指令用于将ARM 处理器寄存器中的数据传送到协处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。
其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,源寄存器为ARM 处理器的寄存器,目的寄存器1 和目的寄存器2 均为协处理器的寄存器。
指令示例:MCR P3,3,R0,C4,C5,6;该指令将ARM 处理器寄存器R0 中的数据传送到协处理器P3 的寄存器C4 和C5 中。
5、MRC 指令MRC 指令的格式为:MRC{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。
MRC 指令用于将协处理器寄存器中的数据传送到ARM 处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。
其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器为ARM 处理器的寄存器,源寄存器1 和源寄存器2 均为协处理器的寄存器。
指令示例:MRC P3,3,R0,C4,C5,6;该指令将协处理器P3 的寄存器中的数据传送到ARM 处理器寄存器中.The ARM920T 有两个具体协处理器CP14调试通信通道协处理器调试通信通道协处理器DCC(the Debug Communications Channel)提供了两个32bits寄存器用于传送数据,还提供了6bits通信数据控制寄存器控制寄存器中的两个位提供目标和主机调试器之间的同步握手。
通信数据控制寄存器以下指令在Rd 中返回控制寄存器的值:MRC p14, 0, Rd, c0, c0此控制寄存器中的两个位提供目标和主机调试器之间的同步握手:位1(W 位)从目标的角度表示通信数据写入寄存器是否空闲:W = 0 目标应用程序可以写入新数据。
W = 1 主机调试器可以从写入寄存器中扫描出新数据。
位0(R 位)从目标的角度表示通信数据读取寄存器中是否有新数据:R = 1 有新数据,目标应用程序可以读取。