IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 000-初步认知嵌入式计算机体系架构 -> 正文阅读

[嵌入式]000-初步认知嵌入式计算机体系架构

硬件结构

从本质上讲,目前无论是PC还是嵌入式开发板,所有计算机无外乎是两种硬件架构。一种是冯诺依曼架构体系、一种是哈佛架构体系。这两种架构体系对于仅仅从事驱动开发的嵌入式开发者是透明无感的,因此不需要掌握它俩的区别,感兴趣的话可以自行在网上搜索相关内容。
但如论是哪种架构体系计算机都是由以下基本硬件构成的:cpumemorystoragebusperipheral。 它们之间的关系如下图:
在这里插入图片描述

  • CPU
    CPU为中央处理器,有常识的人都应该懂,这里就不再罗嗦了。但有一点要提一下,CPU虽然很复杂,但是本质上它与其他电器(比如灯泡)没有区别,就是通电就工作。它的工作就是从memory中取指令,并执行执行。而指令需要的数据可能来自memory,也可能来自bus。虽然不太准确,但是这么理解通常是没有问题的,就是CPU只能直接与MEMORY和BUS进行沟通,而不能直接与peripheral、storage沟通。
  • memory
    memory中文通常被翻译成“内存”,指令只有存放在内存中才能被CPU读取和执行。memory分两种一种是RAM(随机访问内存),断电后信息会消失。另一种是sRAM(静态随机访问内存),断电后信息不消失。
  • bus
    bus被翻译成总线,总线的种类有很多,比如I2C,SDIO,USB总线,GPIO等。可以将总线想象成家里的插排,不能与CPU直接沟通的所有外设都要插到总线接口上。每种总线都有其对应的总线控制器,在编程时我们是通过CPU去操作总线控制器来控制各种外设,因此在编程中提到总线无特殊说明,一般指的就是总线控制器。
  • peripheral
    peripheral被翻译成“外设”,如键盘、鼠标、SD/TF卡、显示器。这些都属于外设,它们没法直接与CPU沟通,只能被插到合适的bus上。
  • storage
    storage被翻译成“存储器”。本质上它也是一种外设,只不过通常来说一个完整的计算机通常都会包含一个storage才能正常工作,因为计算机大量的信息在断电后,都需要存储在存储器上。PC上的存储器主要是硬盘;而嵌入式系统中常见的存储器有SD卡、eMMC、NAND等

CPU的工作流程

对于嵌入式软件工程师来说,初期不需要指导CPU复杂的工作原理,只需要CPU的工作只有两步。

  • 第一步:根据地址从memory中取指令。
  • 第二步:执行指令。

详细但不准确的来说。CPU有一个寄存器,叫IP寄存器,这个IP寄存器保存着CPU要取的下一条指令在memory中的地址。CPU会根据IP寄存器中的地址去memory中取指令,然后执行。
如果执行的指令不是跳转指令,IP寄存器会自动更新成紧挨着的下一条指令的地址。这样CPU执行完当前指令后就会去取下一条指令并执行。
如果当前指令是跳转指令,则当前执行的跳转指令会设置IP寄存器的值,这样当CPU执行完当前跳转指令后,就会跳到指定的地址去取下一条指令并执行。

软件构成和启动流程

在这里插入图片描述
嵌入式软件开发,要开发的主要是上图三类软件。

  • bootloader
    bootloder是CPU通电后自动执行的。每种CPU都会有一个初始的IP寄存器值,该值是固定的由硬件决定。CPU一通电就会去这个地址取指令执行。由上面对硬件结构的介绍也可知道,CPU开机默认地址一定是指向SRAM的,因为只有SRAM在断电的情况下还能保存信息,并且可以与CPU直接沟通。因此bootloder一定是被保存在SRAM上的。bootloader的关键作用是将kernel加载到内存中,并将CPU的IP寄存器的值修改成kernel第一条指令的地址。
    为什么要有bootloader? 关于这个问题网上的答案一般都是说bootloader需要做一些初始化工作。但这并没有说到点子上。因为初始化工作完全可以直接由kernel来完成。需要bootloader的根本原因是SRAM的空间很小,不能把整个kernel及启动需要的数据全部保存下来。因此必须设计一个小而精的程序,它既能保存到SRAM上,又能初始化一些必要的硬件和提供一些服务。使得可以将kernel加载到RAM。
    举个例子,现在SRAM只有512K,而kernel有1G。因此kernel不能直接存到SRAM上。这时我们可以将kernel存到storage上。然后编写一个小于512K的bootloader,保存到SRAM上。而这个bootloader只需要作三件事情:1.完成RAM的初始化。2.从storage上将kernel加载到RAM上。3.将IP寄存器指向kernel的第一条指令的地址。
  • kernel
    kernel是整个操作系统的核心,负责整个系统的资源分配,任务(线程)调度,提供设备驱动框架等。作为驱动开发者主要工作就是要修改kernel中设备驱动相关的代码。
  • application
    application即应用程序,他是直接面向用户的程序。application会调用操作系统提供的API。它是由操作系统加载到RAM上并执行的。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:56:38  更:2021-10-08 11:57:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:00:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码