一、CPU的组成
CPU:中央处理器-----》soc(片上系统)(描述的是一种芯片,这个芯片具有运算程序的能力)、
- UART: Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种广泛使用的串行通信协议,它允许设备通过两条线(TX和RX)进行全双工的异步通信。
- I2C:一种串行、半双工的总线
- LCD控制器: SOC的lcd控制器(集成在soc内部,受核的控制)
- APB :peripheral(高级外设总线)是一种用于连接微控制器和外围设备的总线协议,它支持低速外设,如UART、I2C、SPI和LCD等。APB总线通常用于那些对性能要求不高的场合,它具有低功耗和简单接口的特点。
- AHB :(高速外设总线)---- RAM ROM USB
- GPIO :是微控制器和其他集成电路上的通用输入输出引脚,它们可以被编程用于各种功能,如数字输入/输出、模拟输入/输出、通信接口(如I2C、SPI)等。
二、kernel的组
只有一个的称为(单核),(两个以上)多核
X86(桌面级)
ARM(低功耗、低体积、低电量)
CISC (complex instruction set computer)复杂指令集的计算机
RISC(Reduces instruction set computer) 精简指令集的计算机(便携)
R0~R15称为通用寄存器
lr(链接寄存器)
sp(堆栈指针)
cache(高速缓冲器)
Icache(指令高速)
ecache(数据)
MMU 内存管理单元
三、存储器
3.1、概念
存储器是计算机系统中的记忆设备,用来存放程序和数据。
3.2、分类
1、按存储介质
- 半导体材料
- 磁性材料
2、按存取方式分
随机访问
任何存储器单元内容都能被随机存取,且存取时间与物理位置无关
顺序访问
只能按某种顺序来存取,存取时间和存储单元的物理位置有挂
半顺序访问
沿磁道方向顺序存取,垂直半径的随机存取
3、按存储内容的可变性分ROM与RAM
RAM分类
动态和静态
1、动态存储依赖于电容来存储数据。由于电容会随时间慢慢放电,因此需要定期刷新(或再生)来保持存储的数据。这就是为什么它被称为“动态”的原因,因为它需要动态地维持数据。
2、静态存储使用触发器(如双稳态电路)或类似的稳定电路来存储数据,这些电路能够在没有电源的情况下保持其状态,因此不需要定期刷新。
掉电之后易丢失数据
- sram (静态ram)用晶体存储0、1.速度快,成本高,存储密度低,不需要进行数据刷新,6个晶体管构成一个bit位
- SRAM的集成度相对较低,这意味着在相同面积的硅片上,SRAM的容量比DRAM小,因此成本较高
- dram动态存储,用于电容充放电存储0,1。功耗大,需要外接刷新电路,读写速度低于sram,成本低,存储密度大。
- DRAM的每个存储单元只需要一个晶体管和一个电容,这使得在相同面积的硅片上可以制造出更大容量的存储器,因此DRAM的集成度较高。
- SDRAM增加了同步电路,提高dram的读写速度
- 它结合了动态存储器(DRAM)的高密度和静态存储器(SRAM)的快速访问能力,通过同步时钟信号来协调数据的读写操作,从而提高了内存的性能和可靠性。
- ddrram,为SDRAM的下一代。(上升沿和下降沿都在进行数据传输)
- iram 注意iram并非真正意义上的某种ram,通常iram就是SRAM,它通常存在于SOC内部,所以被称为iram
rom分类
掉电之后,数据不易丢失
- rom非易失性存储器,最早的rom在出场时写入数据,之后无法更改
- prom可编程rom,出场后能够让用户写入一次数据。
- EPROM可擦写prom,出场后可以擦除数据在此写入,但需要特殊设备,如紫外线。
- e2prom电可擦写可编程rom,无需专用设备就可以擦写,编程
- flash闪存,新一代非易失性存储器
- nor flash 可寻址
- 随机访问存储器,具有专用的地址和数据线,允许对存储器中的任何位置进行直接访问。
- 通常用于存储程序代码和少量数据,如BIOS、固件和启动代码。
- 读取速度快,写入和擦除速度相对较慢。
- 具有较高的耐久性,擦写次数可达10万次。
- 支持XIP(eXecute In Place),允许CPU直接从Flash执行代码,无需拷贝到RAM。
- 容量通常较小,成本相对较高。
- nand flahh 不可寻址
- 非随机访问存储器,没有专用的地址线,通过间接的I/O接口进行控制,通常以页为单位进行访问。
- 用于数据存储,如SSD、USB驱动器、存储卡等。
- 写入和擦除速度快,但读取速度较NOR Flash慢。
- 容量大,成本较低,适合大规模数据存储。
- 需要更复杂的管理算法,如FTL(Flash Translation Layer)和损耗均衡。
- 擦写次数可达100万次,但位翻转现象较NOR Flash更常见,需要ECC(Error-Correcting Code)来确保数据完整性。
- nor flash 可寻址
四、ARM的七个基本模式
- user:非特权模式,大部分任务执行在这种模式
- FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
- IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
- Supervisor:当复位或软中断指令执行时将会进入这种模式
- Abort:当存取异常时将会进入这种模式
- Undef:当执行未定义指令时会进入这种模式
- System:使用和User模式相同寄存器集的特权模式
Cortex-A特有模式:
Monitor:是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式
五、寄存器组织
不同的工作模式,有不同的栈区,每一个不同的栈区的指针都要做不同的初始化,所有的共用一个pc,cpsr,当前点额状态只有一个
system与usr是相同的,所以没有必要再开一个
六、SP指针初始化的原因
在嵌入式系统和操作系统中,栈指针(Stack Pointer,简称SP)的初始化是一个重要的步骤。SP是一个寄存器,它指向当前栈的顶部。初始化SP指针的原因包括:
1. **确定栈空间的起始位置**:在程序开始执行前,需要设置SP指向一个确定的内存地址,这样程序中的函数调用和局部变量分配才能知道在哪里分配栈空间。
2. **避免栈溢出**:如果SP没有正确初始化,可能会导致栈空间的误用,从而覆盖其他重要的内存区域,引起数据损坏和程序崩溃。
3. **任务隔离**:在多任务操作系统中,每个任务或线程通常都有自己的栈空间。初始化SP确保每个任务的栈是独立的,避免任务间的相互干扰。
4. **上下文切换**:在多任务环境中,当任务切换时,CPU的状态(包括SP)需要被保存和恢复。正确的初始化SP可以确保在任务切换时,每个任务都能恢复到正确的栈状态。
5. **异常处理**:当异常或中断发生时,处理器通常会将当前的SP等寄存器的值保存到一个安全的地方,以便异常处理程序使用。如果SP没有被初始化,就无法保证异常处理程序能够正确地访问栈。
6. **内存对齐**:某些架构要求栈指针指向的地址必须按照特定的边界对齐。初始化SP可以确保栈的对齐,从而满足硬件的要求。
7. **调试和维护**:初始化SP并设置栈空间可以使得程序的栈使用更加可预测和容易调试,也便于维护和理解程序的行为。
在实际编程中,SP的初始化通常在程序的启动代码(如启动时的汇编代码)中完成,或者在操作系统的调度器中为每个任务设置。初始化SP指针是确保程序能够正确管理和使用栈空间的关键步骤。