MCU构成及其运行原理
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构成及其运行原理的更多相关文章
- iis6.0与asp.net的运行原理
这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...
- ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...
- 场景9 深入RAC运行原理
场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新 —> Data Guard —> RAC(Real Ap ...
- Camel运行原理分析
Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...
- Web程序的运行原理及流程(一)
自己做Web程序的开发也有两年多了 从最开始跟风学框架 到第一用上框架的欣喜若狂 我相信每个程序员都是这样过来的 在大学学习一门语言 学会后往往很想做一个实际的项目出来 我当时第一次做WEB项目看 ...
- Asp.net WebPages框架运行原理浅析(转)
在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...
- ASP.NT运行原理和页面生命周期详解及其应用
ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用. ...
- jsp学习--JSP运行原理,九大隐式对象和JSP常用标签
一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...
- Linux X Window System运行原理和启动过程
本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...
随机推荐
- 交叉熵损失CrossEntropyLoss
在各种深度学习框架中,我们最常用的损失函数就是交叉熵,熵是用来描述一个系统的混乱程度,通过交叉熵我们就能够确定预测数据与真实数据的相近程度.交叉熵越小,表示数据越接近真实样本. 1 分类任务的损失计算 ...
- MySQL索引相关知识学习心得
你知道的越多,你不知道的也就越多 -- 芝诺曾 一.MySQL索引学习 MySQl主要有两种类型的索引:哈希索引.B+树索引 1.哈希索引 哈希索引可以以O(1)的时间复杂度进行查找,但是这样查找导致 ...
- Word 设置页眉、页脚、页码
页眉:在 Word 文档中,每个页面的顶部区域为页眉.常用于显示文档的附加信息,可以插入时间.图形.公司微标.文档标题.文件名或作者姓名等. 页脚:页脚与页眉的作用相同,都可以作为显示文档的附加信息, ...
- 基于C++的OpenGL 02 之着色器
1. 概述 本文基于C++语言,描述OpenGL的着色器 环境搭建以及绘制流程可参考: 基于C++的OpenGL 01 之Hello Triangle - 当时明月在曾照彩云归 - 博客园 (cnbl ...
- Postgresql动态共享内存类型
一.简介 linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型. 在Postgresql中可以使用dy ...
- Kronecker convolution 克罗内克卷积理解
在了解空洞卷积时候发现了Kronecker convolution是对空洞卷积的改进,于是学习了一下 ,原文连接:1812.04945v1.pdf (arxiv.org) 个人理解如下: 首先,对于一 ...
- fields设计与测试
菲尔兹管理用例 一.向开发找到需求ID 需求设计文档ID 二.在fields的需求列表中,填入ID,创建计划 1.状态:测试接手 2.日期:冒烟日期,测试日期 3.可能遇到的问题: * 搜不到ID ...
- for循环当中的 var let区别
首先要了解这里代码执行顺序: for循环同步:setTimeout异步: js在执行代码的过程中,碰到同步代码会依次执行,碰到异步代码就会将其放入任务队列中进行等待,当同步代码执行完毕后再开始执行异步 ...
- Day 13 13.1 refer反爬
Referer 一.referer是什么: 图片防盗链的技术应该还有其他的,目前了解到的是浏览器的referer,其实这是错误的拼写,正确是应该是referrer.不过现在可以看到Chrome的开发者 ...
- Redis入门级简单安装使用
最近突然就想学一下Redis,于是就各种找教程,前两天实际操作了一下,也不是想象中的很难 但是今天想写一个使用Redis的demo,突然就不会使用Redis了,在网上也是查找了半天,还是想起来了点 ...