MCU构成及其运行原理

1. MCU概念

MCU,微控制单元(Microcontroller Unit) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器CPU(Central Processing Unit)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。

2. MCU构成

MCU一般有以下几个部分组成:

  • CPU
  • Memory(Flash/RAM)
  • Bus
  • Peripheral

3. 头脑风暴 - 模拟MCU运行

3.1 准备工作

和图灵机类似,我们在模拟MCU运行时,需要做一些前期准备工作。

(1)准备一段程序,程序存储在memory中

(2)准备一组数据,数据同样存储在memory中

(3)设置PC指针,指向Address 0处

MCU中CPU的Control Unit控制单元,负责取指(Fetch)、译码(Decode)、执行(Excute)这样的循环运行。

CPU从memory取得指令,进行译码识别指令的需要,并执行对应的操作,为了CPU能够识别我们写的操作,进行如下规定:

指令 Instruction 指令描述 Description 操作码 Opcode 操作数 Operand
xxxx-00-01 从Address中加上数据到寄存器0中 LOAD: 01 Register_0: 00
Address: xxxx
xxxx-01-01 从Address中加上数据到寄存器1中 LOAD: 01 Register_1: 01
Address: xxxx
NN-01-00-11 将Register_0和Register_1中的数据相加,
得到的结果保存在Register_0中
ADD: 11 Register_0: 00
Register_1: 01
xxxx-00-10 将Register_0中的值存储到Address中 STORE: 10 Register_0: 00
Address: xxxx

3.2 MCU模拟运行

根据上一节的准备工作,MCU当前状况如下图所示:

(1)取指

此时,PC指针指向Address 0处,取得指令01000001

(2)译码

根据上一节的规定,01000001指令代表的含义为:从将Address 4中的数据取出存放到Register 0中

(3)执行

根据指令译码的结果,将Address 4中的数据00000010存放到Register 0 中

接着执行下一条指令,重复上面的操作,每步执行如下:

PC 指向Address 1,取得指令01010101,译码执行,将address 5中的数据存放到Register 1中。

PC 指向Address 2,取得指令00010011,译码执行,将Register 0 和 Register 1 中的数据相加,结果存放到Register 0中。

PC 指向Address 3,取得指令01100010,译码执行,将Register 0中的数据存放到Address 6中。

至此,MCU完成了一段程序的执行,计算了3+2,得到的结果5保存在Memory中。

:::tip

顺利完成了MCU的模拟运行,其中的一些问题还需要思考:

  • 程序中的指令是我们自己定义的,而目前实际MCU产品中运行的都是什么样的指令?
  • 程序中都是0和1这样的数据,实际编程开发中,是写0、1这样的数据吗?
  • 当前程序是从Address 0、Address 1、Address 2、Address3这样依次执行的,实际应用中,会不会一直是这样顺序执行呢?

:::

MCU构成及其运行原理的更多相关文章

  1. iis6.0与asp.net的运行原理

    这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...

  2. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  3. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  4. 场景9 深入RAC运行原理

    场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新   —>   Data Guard   —>    RAC(Real Ap ...

  5. Camel运行原理分析

    Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...

  6. Web程序的运行原理及流程(一)

    自己做Web程序的开发也有两年多了 从最开始跟风学框架  到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来  我当时第一次做WEB项目看 ...

  7. Asp.net WebPages框架运行原理浅析(转)

    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...

  8. ASP.NT运行原理和页面生命周期详解及其应用

    ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用.  ...

  9. jsp学习--JSP运行原理,九大隐式对象和JSP常用标签

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  10. Linux X Window System运行原理和启动过程

    本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...

随机推荐

  1. 交叉熵损失CrossEntropyLoss

    在各种深度学习框架中,我们最常用的损失函数就是交叉熵,熵是用来描述一个系统的混乱程度,通过交叉熵我们就能够确定预测数据与真实数据的相近程度.交叉熵越小,表示数据越接近真实样本. 1 分类任务的损失计算 ...

  2. MySQL索引相关知识学习心得

    你知道的越多,你不知道的也就越多 -- 芝诺曾 一.MySQL索引学习 MySQl主要有两种类型的索引:哈希索引.B+树索引 1.哈希索引 哈希索引可以以O(1)的时间复杂度进行查找,但是这样查找导致 ...

  3. Word 设置页眉、页脚、页码

    页眉:在 Word 文档中,每个页面的顶部区域为页眉.常用于显示文档的附加信息,可以插入时间.图形.公司微标.文档标题.文件名或作者姓名等. 页脚:页脚与页眉的作用相同,都可以作为显示文档的附加信息, ...

  4. 基于C++的OpenGL 02 之着色器

    1. 概述 本文基于C++语言,描述OpenGL的着色器 环境搭建以及绘制流程可参考: 基于C++的OpenGL 01 之Hello Triangle - 当时明月在曾照彩云归 - 博客园 (cnbl ...

  5. Postgresql动态共享内存类型

    一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...

  6. Kronecker convolution 克罗内克卷积理解

    在了解空洞卷积时候发现了Kronecker convolution是对空洞卷积的改进,于是学习了一下 ,原文连接:1812.04945v1.pdf (arxiv.org) 个人理解如下: 首先,对于一 ...

  7. fields设计与测试

     菲尔兹管理用例 一.向开发找到需求ID 需求设计文档ID 二.在fields的需求列表中,填入ID,创建计划 1.状态:测试接手 2.日期:冒烟日期,测试日期 3.可能遇到的问题: * 搜不到ID ...

  8. for循环当中的 var let区别

    首先要了解这里代码执行顺序: for循环同步:setTimeout异步: js在执行代码的过程中,碰到同步代码会依次执行,碰到异步代码就会将其放入任务队列中进行等待,当同步代码执行完毕后再开始执行异步 ...

  9. Day 13 13.1 refer反爬

    Referer 一.referer是什么: 图片防盗链的技术应该还有其他的,目前了解到的是浏览器的referer,其实这是错误的拼写,正确是应该是referrer.不过现在可以看到Chrome的开发者 ...

  10. Redis入门级简单安装使用

      最近突然就想学一下Redis,于是就各种找教程,前两天实际操作了一下,也不是想象中的很难 但是今天想写一个使用Redis的demo,突然就不会使用Redis了,在网上也是查找了半天,还是想起来了点 ...