目录
一、从源码到cpu执行过程
高级语言-->.s汇编-->.exe二进制可执行程序-->bin格式烧录文件-->cpu读flash-->解码后cpu执行指令
二、汇编和高级语言差异
汇编:无可移植性,难写,执行效率高
高级语言:可移植性高,好写,执行效率低,适合大型复杂项目
三、CISC和RISC
RAM架构是RISC
地址总线:最大寻址范围(32位,4g)
数据总线:单次交换信息数量(32位,4字节)
CISC:复杂指令集(例如复杂计算只需要一条指令就可完成),编译器好设计,cpu难,IO与内存独立编址
RISC:精简指令集(提供基本功能指令),cpu设计和工艺简单,编译器难,IO与内存统一编址(例如单片机寄存器和内存是统一编址)
四、程序和数据
程序运行核心:程序(只读的)+数据(可读写的)
五、冯诺依曼结构与哈佛结构
冯诺依曼结构:程序和数据存放在内存,不分离(Intel),程序和数据可读可写(不安全),处理简单
哈佛:程序和数据在内存,分离(大部分嵌入式单片机),程序不可写(安全),软件处理复杂
六、寄存器
特殊功能寄存器(SFR):一般在外设里面,通过访问寄存器来控制外设
通用寄存器:r1,r2。。。。sp,lr,pc,cpsr,spsr(共37个,汇编用的多,c一般不使用)
每种模式下最多只能看到18个寄存器,其他寄存器名字相同但在当前模式(七个模式)不可见。
对于r14来说,RAM共有6个r14,但在特定模式下只有一个是可见的,其他必须切换到对应模式下才能看见,这种设计叫影子寄存器。
七、内存外存
CPU连接内存是总线访问(好处直接访问随机访问,坏处占用地址空间大小受限)
一般pc:小容量BIOS(NorFlash)+大容量硬盘+大容量DRAM
单片机:小容量NorFlash+小容量SRAM
嵌入式系统:外接大容量Nand+外接大容量DRAM+内置SRAM
内存
内部存储器,运行程序RAM断电数据数据丢失(DRAM SRAM DDR)
SRAM:静态内存,容量小价格高,优点上电直接使用
DRAM:动态内存,容量大价格低,缺点需要软件初始化才能使用
外存
外部存储器,ROM断电数据数据不会丢失(硬盘 flash u盘 sd卡)
NorFlash:容量小,价格高,优点可以与cpu直接总线连接,一般用作启动介质
NandFlash:容量大,价格低,需要软件初始化,通过时序接口读写
八、嵌入式系统启动方式
1.先从内部IROM读取代码(BL0),执行(做一些初始化cpu时钟,看门狗等,然后判断启动模式,从相应的外部存储器读取一部分启动代码BL1到SRAM)
2.执行上一步读取来的代码IRAM,BL1负责初始化NandFlash,然后将BL2读取到IRAM
3.从IRAM运行BL2,初始化DRAM,然后将OS读到DRAM,启动系统。
先读取内部ROM初始化一些东西判断启动方式,然后去对应的地方读取boot执行,最后读取os到DRAM启动系统
BL0
- 关看门狗
- 初始化cache指令
- 初始化堆栈
- 初始化块设备复制函数
- 设置系统时钟
- 复制BL1到IRAM
- 校验BL1,跳转到BL1执行
九、编程模式和7种模式
大部分ARM core提供:ARM指令集(32bit),Thumb指令集(16),Thumb2指令集(16&32)
工作模式:
user:非特权模式
FIQ高优先级,IRQ低优先级,Supervisor复位或软中断,About存取异常,Under未定义指令:特权模式,异常
system:特权模式
cpu为什么会有这些模式:
cpu是硬件,os是软件,软件的设计要依靠硬件的特性,硬件的设计要考虑软件需要。
操作系统有安全级别要求。
异常
- 异常向量表,有些cpu支持多个中断会有二级中断向量表
所有cpu都有异常向量表,当异常发生,cpu会自动动作(PC跳转到异常向量处理异常)
- 异常处理机制
1.异常产生时
拷贝CPSR到SPSR
设置适当CPSR位(改变处理器状态ARM态,改变处理器进入相应异常模式,设置中断禁止相应中断)
保存返回地址到LR_<mode>
设置PC为相应的异常向量地址。
2.返回时
从SPSR恢复CPSR
从LR_<mode>恢复PC