ARM架构知识点(来自朱友鹏课堂笔记)

3.文件读写的一些细节
errno和perror
(1)errno就是error number, 意思就是错误号码。linux系统中对各种常见错误做了个编号,当函数执行错误时,函数会返回一个特定的errno编号来告诉我们这个函数到底哪里错了。
(2)errno是由OS来维护的一个全局变量,任何OS内部函数都可以通过设置errno来告诉上层调用者究竟刚才发生了什么错误
(3)errno本身实质是一个Int类型的数字,每个数字编号对应一种错误。当我们只看errno时只能得到一个错误编号数字,不适应于人看。
(4)linux系统提供了一个额函数perror(print error),perror函数内部会读取errno并且将其转成对应的错误信息字符串,然后打印出来。


第四节  统一编址&独立编制&哈佛结构&冯诺依曼结构
1. 什么是IO?什么是内存?
内存是程序的运行场所,内存和CPU之间通过总线链接,CPU通过一定的地址来访问具体内存单元。
IO是输入输出接口,是CPU和其他外部设备(如串口、LCD、触摸屏、LED等)之间通信的道路。一般的,IO就是指CPU的各种内部或外部外设。


2. 内存的访问方式
内存通过CPU的地址总线来寻址定位,然后通过CPU数据总线来读写。
CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是一定的,而内存是需要占用CPU的寻址空间的。
内存与CPU的这种总线式连接方式是一种直接连接,优点是效率高访问快,确定是资源有限,扩展性差。


3.IO的访问方式
IO值得是与CPU连接的各种外设
CPU访问各种外设有2种方式:一种是类似于访问内存的方式,既把外设的寄存器当做一个内存地址来读写,从而以访问内存相同的方式来操作外设,叫IO与内存的统一编址方式;另一种是使用专用的CPU指令来访问某种特定外设,叫IO与内存独立编址。


4.对比
由于内存访问频率高,因此采用总线式连接,直接地址访问,效率最高。
IO与内存统一编址方式,优势是IO当作内存来访问,编址简单;缺点是IO也需要占用一定的CPU地址空间,而CPU的地址空间是有限资源。
IO与内存独立编址方式,优势是不占用CPU地址空间,缺点是CPU设计变复杂了。


5.程序和数据
程序运行时两大核心元素:程序(不可改变)+数据(大部分可改变)
程序是我们写号的源代码经过编译、汇编、连接得到的机器码,这些机器码可以拿给CPU去解码执行,CPU不会也不应该去修改程序,所以程序是只读的。
数据是程序运行过程中定义和产生的变量的值,是可以读写的,程序运行实际就是为了改变数据的值。


6.冯诺依曼结构与哈佛结构
程序和数据都放在内存中,且彼此不分离的结构称为冯诺依曼结构。比如intel的CPU采用冯诺依曼结构。
程序和数据分开独立放在不同的内存块中,彼此完全分离的结构成为哈佛结构。比如大部分的单片机(MCS51、ARM9等)均采用哈佛结构。


7. 优劣对比
冯诺依曼结构中程序和数据不区分的放在一起,因此安全和稳定性是个问题,好处是处理起来简单。
哈佛结构中程序(一般放在ROM,FLASH中)和数据(一般放在RAM中)独立分开存放,因此好处是安全和稳定性高,缺点是软件处理复杂一些(需要统一规划连接地址等)


第五节 软件编程控制硬件的关键--寄存器
1. 什么是寄存器
寄存器属于CPU外设的硬件组成部分
CPU可以像访问内存一样访问寄存器
寄存器是CPU的硬件设计者制定的,目的是留作外设被编程控制的“活动开关”
正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器。


2. 两类寄存器
SOC中有两类寄存器:通用寄存器和SFR
通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与
SFR(特殊功能寄存器)不在CPU中,而存在于CPU的外设中,我们通过访问外设的SFR来编程操控这个外设,这就是硬件编程的方法
NOTE: 可以用C语言对SFR进行操作,但不可以对通用寄存器进行直接操作,因为C语言屏蔽了这一细节,只有C语言通过汇编产生的汇编代码才能体现对通用寄存器的操作


第六节 ARM体系结构要点总结
1. ARM是RISC架构
常用的ARM汇编指令只有二三十条
ARM是低功耗CPU
ARM的架构非常适合单片机、嵌入式,尤其是物联网领域;而服务器等高性能领域目前主导还是intel


2. ARM是统一编址的
大部分ARM(M3 M4 M7 M0 ARM9 ARM 11 A8 A9 都是32位架构)
32位ARM CPU支持的内存少于4G(因为有一部分地址资源分配给了IO, SFR)通过CPU地址总线来访问
SoC中的各种内部外设通过各自的SFR编程访问,这些SFR的访问方式类似于访问普通内存,这叫IO与内存的统一编址。
ARM9有32根地址线和32根数据线。地址线的根数决定了CPU的地址空间, 数据线的根数决定了一次处理数据的位数


3. ARM是哈佛结构的
常见的ARM(除了ARM7外)都是哈佛结构的
哈佛结构保证了ARM CPU运行的稳定性和安全性,因此ARM适用于嵌入式领域
哈佛结构也决定了ARM裸机程序(使用实地址即物理地址)的链接比较麻烦,必须使用复杂的链接脚本告诉连接器如何组织程序;对于OS之上的应用(工作在虚拟地址之中)则不需要考虑这么多。


第十二节
1. ARM的基本设定
ARM约定:
byte: 8bits
halfword: 16bits
word: 32bits
大部分ARM core提供
ARM指令集 (32bit)
Thumb指令集(16bit)
Thumb2指令集(16&32bit)
Jazelle cores支持Java bytecode


2. ARM有7个基本工作模式
User:非特权模式,大部分任务执行在这种模式
FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
Supervisor:当复位或软中断指令执行时将会进入这种模式
Abort:当存取异常时将会进入这种模式
Undef:当执行未定义指令时会进入这种模式
System:使用和User模式相同寄存器集的特权模式


NOTE: 各种模式的切换,可以是程序员通过代码主动切换(写CPSR寄存器);也可以是CPU在某些情况下自动切换。
各种模式下权限和可以访问的寄存器不同。


3. CPU为什么设计这些模式?
CPU是硬件,OS是软件,软件的设计要依赖硬件的特性,硬件的设计要考虑软件需要,便于实现软件特性。
操作系统有安全级别的要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全级别需要。


第十三节 ARM的37个寄存器详解
1. CPSR CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关 CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(比如BLE指令中的E就和CPSR中的Z标志位有关)
CPSR中的I、F位和开中断、关中断有关
CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。


2. PC(r15)程序控制寄存器
PC为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)
整个CPU中只有一个PC(CPSR只有一个,但SPSR有5个),PC是一个国家的最高领导人。


第十四节、ARM的异常处理方式简单介绍
1, 什么是异常
正常工作之外的流程都叫异常
异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作
2,异常向量表
所有的CPU都是异常向量表,这是CPU设计时就设定好的,是硬件决定的。
当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作),CPU知道有中断产生,至于怎么做,是软件去实现的。
异常向量表是硬件向软件提供的处理异常的支持。
3, ARM的异常处理机制
当异常产生时,ARM core:
 -拷贝CPSR到SPSR_<mode>
 -设置适当的CPSR位:
改变处理器状态进入ARM态
改变处理器模式进入相应的异常模式
设置中断禁止位禁止相应中断
 -保存返回地址到LR_<mode>
 -设置PC为相应的异常向量
 
返回时,异常处理需要:
 -从SPSR_<mode>恢复到CPSR
 -从LR_<mode>恢复PC
 -NOTE:这些操作只能在ARM态执行
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值