嵌入式发展历史

MPU、MCU、SoC、Application Processors

在一个电子系统中,处理器占据最重要的位置,被称为中央处理器单元(CPU:Central Processing Unit)。它从IO设备读取数据,处理,然后输出。

CPU的发展历史有两个:MPU、MCU。

  • MPU只是一个处理器,需要搭配内存等非常多的外设才可以构成一个系统。
  • MCU内部有处理器、内存、Flash及其他模块,仅仅需要搭配少量外设就可以构成一个系统。

MPU这一路线,在上世纪80年代非常流行,那时的微型计算机、游戏机都是使用MPU。比如Motorola公司的68000芯片就是一款主流的微处理器(MPU)。
后来MPU逐渐没落,可以认为MPU到现在只剩下了intel、AMD公司x86系列CPU。这类CPU也越来越复杂,称之为“微处理器”似乎不恰当了。在个人电脑领域,可以看到类似下图的主板。主板上插上CPU、内存条、声卡等等就构成了一台计算机。这个主板体积庞大、制造复杂。
在这里插入图片描述

MCU就是把CPU、内存、Flash都集中在一个芯片上,再搭配其他外设备,就可以构成一个完整的系统。
MCU的发展历史经过8位8051单片机、16位AVR单片机、32位STM32单片机等等。

在这里插入图片描述
我们使用的51单片机、STM32单片机,一般都只是处理比较简单的事物,应用场景比较单一。
我们使用的手机,里面的主芯片更加复杂,它既含有CPU,也含有用于数据处理的DSP,用于图形显示的GPU,使用这类主芯片设计出来的电路板更加复杂,它的性能甚至不弱于个人电脑。
在这里插入图片描述
为了与个人电脑区分,这些使用含有MPU电子产品,被称为嵌入式系统、嵌入式板卡、嵌入式产品。
嵌入式板卡就是一台形状不一样的电脑,跟电脑相比,可以引入几个概念:

  1. CPU:在PC机它是一个独立的芯片。在嵌入式系统中,它是芯片的一个单元,跟其他模块比如USB、UART、音频组成一个芯片。
  2. MPU:微处理器单片,其作用等同于PC上使用的CPU,它也仅仅只是一个处理器,需要配合内存、Flash等外设才可以使用。现在除了个人电脑,基本上找不到MPU。并且我们一般不把电脑上的CPU当做MPU,毕竟它不再微小。
  3. MCU:微控制器单元,有时又称为单片机。MCU内部集成了处理器和各类模块,比如USB控制器、UART控制器、内存、Flash等等。只需要外接少量的器件,就可以搭建一个电子系统。C51芯片、STM32等芯片,都是MCU。MCU芯片内部的内存或Flash,容量在几KB、几百KB、几MB的量级,一般不再需要外接内存或Flash。
  4. Application Processors:手机中的主芯片跟MCU类似,也是集成了处理器和各类模块。但是它的性能已经极大提升,可以外接几GB的内存、几GB的Flash。在手机中,这个主芯片一般用来处理显示、输入,运行用户的程序,所以称它为“Application Processors”。

在手机电路板中,可用空间非常小。Application Processors还需要搭配内存芯片才可以使用,于是发展出了一种名为package-on-package (PoP)的工艺:在电路板上先焊接Application Processors,在Application Processors上面再焊接内存芯片,即2个芯片叠在一起。

MCU上一般不运行操作系统,或是运行一些资源耗费较小的小型实时操作系统(RTOS)。
MCU一般用来处理实时性要求高的事情,处理一些比较简单的事情。
Application Processors基本上都会运行比较复杂的操作系统(比如Linux),在操作系统上运行多个APP。

哈佛架构与冯诺依曼架构

在这里插入图片描述
CPU架构可以分为哈弗架构与冯诺依曼架构。哈弗架构中指令与数据分开存放,CPU可以同时读入指令、读写数据。冯诺依曼架构中指令、数据混合存放,CPU依次读取指令、读写数据,不可同时操作指令和数据。

ARM公司的芯片,ARM7及之前的芯片都是冯诺依曼架构,ARM7之后使用“改进的哈弗架构”。
在这里插入图片描述
在改进的哈弗架构里,指令和数据在外部存储器中混合存放,CPU运行时,从指令cache中获得指令,从数据cache中读写指令。

指令集:CISC和RISC

CISC(Complex Instruction Set Computers,复杂指令集计算机)和RISC(Reduced Instruction Set Computers,精简指令集计算机)是两大类主流的CPU指令集类型。

其中CISC以Intel、AMD的x86CPU为代表,而RISC以ARM、IBM Power为代表,开源的RISC-V也是RISC指令集。

RISC的设计初衷针对CISC CPU复杂的弊端,选择一些可以在单个CPU周期完成的指令,以降低CPU的复杂度,将复杂性交给编译器。

举一个例子,下图是实现这样的乘法运算:a = a * b。它需要4个步骤:读出a的值、读出b的值、相乘、写结果到a。
在这里插入图片描述
使用CISC提供的乘法指令,只需要一条指令即可完成这4步操作。当然这一个指令需要多个CPU周期才可以完成。

而RISC不提供“一站式”的乘法指令,需调用4条单CPU周期指令完成两数相乘:内存a加载到寄存器,内存b加载到寄存器,两个寄存器中数相乘,寄存器结果存入内存a。

按照此思路,早期的设计出的RISC指令集,指令数是比CISC少些。后来,很多RISC的指令集中指令数反超了CISC。因此,应该根据指令的复杂度而非数量来区分两种指令集。

当然,CISC也是要通过操作内存、寄存器、运算器来完成复杂指令的。它在实现时,是将复杂指令转换成了一个微程序,微程序在制造CPU时就已存储于微服务存储器。一个微程序包含若干条微指令,执行复杂指令时,实际上是在执行一个微程序。
这也就带来两种指令集的一个差别,微程序的指令是不可被打断的,而RISC指令之间可以被打断,理论上RISC可更快响应中断。

区别

  1. 指令能力:CISC的指令能力强,但多数指令使用率却增加了CPU的复杂度,指令是可变长格式。RISC的指令大部分为单周期指令,指令长度固定,对内存只有LOAD/STORE操作,数据的运算都是在CPU内部实现。
  2. 寻址方式:CISC支持多种寻址方式;RISC支持的寻址方式少。
  3. 实现方法:CISC通过微程序控制技术实现;RISC增加了通用寄存器,硬布线逻辑控制为主,采用流水线方式执行。
  4. 研发周期:CISC的研制周期长;RISC硬件简单,需要优化编译器。

ARM公司的芯片都使用RISC指令集,对内存只有load/store操作,数据的处理是在CPU寄存器上进行。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA Services工具栏运行不显示端口问题解决

问题 如Spring Boot服务启动时,端口不显示。 解决 1、 清理所有缓存 2、 关闭IntelliJ IDEA后,到C:\Users\(你自己的用户名)\AppData\Local\Temp路径把所有文件都删除,因为时一个缓存,不影响其他软件…

网络爬虫的实战项目:使用JavaScript和Axios爬取Reddit视频并进行数据分析

概述 网络爬虫是一种程序或脚本,用于自动从网页中提取数据。网络爬虫的应用场景非常广泛,例如搜索引擎、数据挖掘、舆情分析等。本文将介绍如何使用JavaScript和Axios这两个工具,实现一个网络爬虫的实战项目,即从Reddit这个社交媒…

SAP-MM-定义计量单位组

业务场景: 有些物料的计量单位是相同的,为了快速维护物料的计量单位的转换关系,可以创建计量单位组,输入转换关系时,输入组就可以直接转换,不需要单个维护 SPRO-后勤常规-物料主数据-设置关键字段-定义计…

MySQL数据库入门到大牛_02_MySQL环境搭建、演示使用、图形化管理工具、一二章练习

文章目录 1. MySQL的卸载步骤1:停止MySQL服务步骤2:软件的卸载步骤3:残余文件的清理步骤4:清理注册表(选做)步骤5:删除环境变量配置 2. MySQL的下载、安装、配置2.1 MySQL的4大版本2.2 软件的下…

性能优化之懒加载 - 基于观察者模式和单例模式的实现

一、引入 在前端性能优化中,关于图片/视频等内容的懒加载一直都是优化利器。当用户看到对应的视图模块时,才去请求加载对应的图像。 原理也很简单,通过浏览器提供的 IntersectionObserver - Web API 接口参考 | MDN (mozilla.org)&#xff0c…

【漏洞复现】typecho_v1.0-14.10.10_unserialize

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 漏洞利用GetShell 下载链接:https://pan.baidu.com/s/1z0w7ret-uXHMuOZpGYDVlw 提取码:lt7a 首页 漏洞点:/install.php?finish 漏洞利用 …

解决SpringBoot项目端口被占用的问题

问题描述: 在Window环境下,运行SpringBoot 项目时,出现端口被占用的问题: 解决方案: 1. 查看对应端口的进程号 netstat -ano | findstr 80802. 查看对应进程号的信息 tasklist | findstr 477963. 根据进程号 kill 进程…

掌握文件批量改名的技巧:实现跨文件夹文件统一命名及编号的实用方法“

在日常工作中,我们经常需要处理大量的文件,而这些文件的名字可能各不相同,给我们的管理工作带来了很大的不便。为了解决这个问题,今天我们为您推荐一款全新的文件批量改名工具,它可以帮助您在不同文件夹里的文件进行统…

nodejs express uniapp 图书借阅管理系统源码

开发环境及工具: nodejs,mysql5.7,HBuilder X,vscode(webstorm) 技术说明: nodejs express vue elementui uniapp 功能介绍: 用户端: 登录注册 首页显示轮播图&am…

Qt利用VCPKG和CMake和OpenCV和Tesseract实现中英文OCR

文章目录 1. 开发平台2. 下载文件2.1 下载安装 OpenCV 库2.2 下载安装 Tesseract-OCR库2.3 下载训练好的语言包 3. CMakeLists.txt 内容4. Main.cpp4.1 中英文混合OCR 5. 在Qt Creator 中设置 CMake vcpkg5.1 在初始化配置文件里修改5.2 在构建配置里修改 说明:在Q…

PYTHON学习

元组不可修改: 元组支持下标索引。 字符串也是容器,不支持修改。 容器转换,alt鼠标点击

限制LitstBox控件显示指定行数的最新数据(3/3)

实例需求:由于数据行数累加增加,控件加载的数据越来越多,每次用户都需要使用右侧滚动条拖动才能查看最新数据。 因此希望ListBox只加载最后10行数据(不含标题行),这样用户可以非常方便地选择数据&#xff…