嵌入式基本知识梳理

一、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)来确保数据完整性。
 四、ARM的七个基本模式
  1. user:非特权模式,大部分任务执行在这种模式
  2. FIQ:当一个高优先级(fast)中断产生时将会进入这种模式
  3. IRQ:当一个低优先级(normal)中断产生时将会进入这种模式
  4. Supervisor:当复位或软中断指令执行时将会进入这种模式
  5. Abort:当存取异常时将会进入这种模式
  6. Undef:当执行未定义指令时会进入这种模式
  7. 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指针是确保程序能够正确管理和使用栈空间的关键步骤。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值