嵌入式基本知识梳理

一、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指针是确保程序能够正确管理和使用栈空间的关键步骤。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1538220.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?

问题:我将同事给我的xml文件迁移到盗梦数据库,xml文件大约2G,在导入过程中,总是导入一半都不到就失败了。 原因:我的原因是我的电脑的系统的运行内存是16G的,后来我发现在没导入之前,其他进程已…

MODIS/Landsat/Sentinel下载教程详解【常用网站及方法枚举】

⛄前言 在当今快速发展的地球观测时代,遥感技术作为获取地球表面及其环境信息的重要手段,正以前所未有的广度和深度改变着我们对自然界的认知与管理方式。MODIS(Moderate-resolution Imaging Spectroradiometer,中分辨率成像光谱…

Cloud Removal in Remote Sensing Using Sequential-BasedDiffusion Models论文翻译

MDPI 2023 论文名称:基于序列扩散模型的遥感云去除 摘要: 通过太空光学卫星收集的光学观测数据大多受到云层或雾霾的干扰,这限制了地球观测的进一步应用;因此,探索一种理想的去云方法至关重要。在本文中,我们提出了一…

电脑监控如何多画面显示?3个妙招分享,第一个你学会了吗?

电脑监控实现多画面显示,可以通过多种方法实现,以下是三个妙招的分享: 1. 使用专业监控软件 方法概述: 专业监控软件如安企神等,提供了强大的多画面显示功能。 这些软件通常支持自定义画面布局,如4分屏、…

鸿蒙Harmony应用开发,数据驾驶舱页面的实现

先来看看我们要实现的驾驶舱的页面是什么样的 对于这种 响应式布局的页面构建,我们的脑子里面要有一个概念,就是"分而治之"。我们把这个页面进行分割,分割成不同的块然后再来逐个实现. 不难发现,我们可以将这个看到的效…

【研发日记】嵌入式处理器技能解锁(六)——ARM的Cortex-M4内核

文章目录 前言 背景介绍 指令集架构 ARM起源 ARM分类 Cortex-M4 内核框架 指令流水线 实践应用 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(…

数据结构与算法(Python)

引入 先来看一道题: 如果 abc1000,且 a^2b^2c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? 枚举法: # 如果 abc1000,且 a^2b^2c^2(a,b,c 为自然数),如何求出…

ROS和ROS2借助智能大模型的学习和研究方法

机器人相关知识的本身和价值-CSDN博客 知识本身在智能时代毫无价值,需要基于知识应用和创新才有价值。 学历报废并非来自扩招,而是智能模型的快速发展。-CSDN blink-领先的开发者技术社区 2024年中秋,智能模型实力已经如此,但还…

Modbus_tcp

目录 一:modbus起源 1.起源 2. 分类: 3. 优势: 4. 应用场景: 5.ModbusTCP特点(掌握): 二、 ModbusTCP的协议 1. 报文头 2. 寄存器 1. 线圈(Coils) 2. 离…

栈和队列OJ题C语言版

前情提要: 本次OJ题需要能够独立实现栈和队列,如果对栈和队列还不熟悉可以参考一下:栈和队列(C语言版)-CSDN博客 一、循环队列 1.题目 2.循环队列的概念 循环队列也是一种线性的数据结构,其操作表现基于先进先出的特性&#xff…

npm切换为淘宝镜像源

要切换 npm 的镜像源,您可以使用以下几种方法: 前言 然而,由于众所周知的网络环境问题,直接使用npm官方源下载依赖包时,常常会遇到速度慢甚至下载失败的情况。因此,使用更稳定、更快速的国内镜像源就显得尤…

JS基础:数组for循环年龄案例

<script>let eage1 []//定义一个空数组接受年龄for (let i 1; i < 5; i) {let eage prompt(请输入第${i}个年龄)//每次循环输入if (eage > 0 && eage < 100) {//满足0-100eage1.push(eage)//放入数组}}//1、依次打印数组输入进去的年龄document.writ…

开源项目 face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet

开源项目 - face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet 人像分割 开源项目地址&#xff1a;https://gitcode.net/EricLee/faceparsing 包括开源数据集 和 预训练模型 咨询合作 DataBall 项目&#xff0c;欢迎加以下微信。 助力快速掌握数据集的信…

裁员,延迟退休,到处都是绝望的中年人,一定要发展一项自己的小事业,哪怕很小

“今年真的好难啊”&#xff0c;这是我今年听到最多的一句话。 裁员&#xff0c;失业&#xff0c;大环境不好&#xff0c;35岁年龄危机&#xff0c;延迟退休&#xff0c;一件件噩耗接踵而来&#xff0c;真的发现遍地都是绝望的中年人。 成年人的世界&#xff0c;从来没有容易…

STM32 芯片启动过程

目录 一、前言二、STM32 的启动模式三、STM32 启动文件分析1、栈 Stack2、堆 Heap3、中断向量表 Vectors3.1 中断响应流程 4、复位程序 Reset_Handler5、中断服务函数6、用户堆栈初始化 四、STM32 启动流程分析1、初始化 SP、PC 及中断向量表2、设置系统时钟3、初始化堆栈并进入…

Python 课程16-OpenCV

前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个广泛使用的开源计算机视觉库&#xff0c;旨在为实时图像处理提供高效的计算工具。它提供了数百种算法和函数&#xff0c;用于处理图像和视频。OpenCV 在工业、学术研究和个人项目中应用广泛&…

vue scoped解析

不加scoped 加上scoped 从上面的图可以看出&#xff0c;给style加上scoped之后&#xff0c;会给这个模块的所有元素都加上一个自定义属性data-v-xxxx&#xff0c;这个xxxx就是这个文件的相对路径加上文件名生成的hash值&#xff0c;这样就能保证自定义属性独一无二 给所有元…

【C语言进阶】动态内存与柔性数组:C语言开发者必须知道的陷阱与技巧

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言动态内存管理 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言动态内存管理 &…

数据结构入门学习(全是干货)——树(中)

数据结构入门学习&#xff08;全是干货&#xff09;——树&#xff08;中&#xff09; 1 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09; 1.1 二叉搜索树及查找 二叉搜索树&#xff08;Binary Search Tree, BST&#xff09; 是一种特殊的二叉树…

【Delphi】实现接收系统拖动文件

在 Delphi 中&#xff0c;可以通过以下步骤来实现将文件夹中的文件拖动到 Form 上&#xff0c;并在拖动时显示文件类型的光标。我们可以利用 VCL 中的 Drag and Drop 机制来处理拖动操作&#xff0c;以及自定义光标显示。 以下是详细的步骤和代码示例&#xff1a; 实现步骤&a…