一 cpu和mcu的区别
对于STM32 来说 我们平时说的最多的是 CPU MPU ..等等 他们区别在哪里呢
CPU 不带外围器件 MCU 带外围元器件.可能你们对着这个概念比较模糊。
就好比 MCU 在外围集成了 FLASH 和RAM 来存储数据和程序。对于我们个人的PC
就好比分别对应 硬盘和内存条。
所以 他们最大的区别就能很明显体现出来了.不过 他们是可以通用的.可以把MCU理解成是CPU的升级版本。
1 cpu的组成部分
他们四部分组成
1 寄存器 :可以用来存放指令 数据处理等等
2 控制器:负责把指令读到寄存器当中
3 运算器:运算送入的数据
4 时钟:发出时钟信号 cpu 才能工作
2 程序是如何被cpu运行的
大概的过程
编译------链接----生成执行文件 ======= 才到cpu
编译大家都知道
拿一个代码举例
我们来说连接的过程
链接—》》》生成可执行文件的过程
#include <stido.h> #:表示链接 include:表示包含 stdio.H:表示输出输入
所以 : #include <stido.h> 表示 链接包含输出输入的h文件进来
#deinfe aa 123 同时替换 AA 为123
最后生成了可执行文件
比较细致的过程
在cpu执行之前 他们得到一个可执行的程序,可执行程序其实就包换了系列的指令和数据 我们就拿上面的代码来讲解
指令就是输出输入命令 数据就是实实在在得到的值。cpu能够识别他的指令和数据 那么就可以运行了
二 cpu的工作流程
了解一个器件的原理 我们先从原理图开始入手
我们把大概分成了 两大部分
1 CPU :寄存器组, 控制器 ,时钟 ,运算器 四部分组成
2 外设 :数据存储器 (2先了解大概)
注意 数据存储器 并不属于 cpu的组成部分
1逻辑运算单元和寄存器组
我们 先讲寄存器组和控制单元之间的关系
OP 表示 指令要执行的操作 ALU:表示运算单位 flag3s 表示标志位 Result :数据
alu可以进行一些简单运算。
可以看出 运算的指令来源 寄存器组 经过 ALU(运算单位)得到两个数据 一个是 标志位 一个是数据
这里的标志位指的是 两个操作数运算后 标志位是否为0 是否为负数.
用 fputc 举例
int fputc(int ch, FILE *f)//Öض¨Ïò
{
USART_SendData(USART1,(int16_t)ch);
while( USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
//拿到寄存器组的两个标志位 并且一直P判断是否为0 如果是就一直执行 如果非0 就跳出了循环
//并且会返回数据
return (ch);
}
拿到寄存器组的两个标志位 经过 ALU 并且一直P判断是否为0 如果是就一直执行 如果非0 就跳出了循环
并且会返回数据
另外寄存器除了 可以给运算单位提供数据 他还可以存储数据
2 逻辑运算单元和数据寄存器
之后 加入了数据寄存器 cpu可以进行复杂的运算
我们在介绍寄存器的时候 他可以作为存储和提供数据 同时呢 数据寄存器也是有 和 同样的功能
再次提醒 数据寄存器并不是 cpu的其中一部分 ,他是外设存储器。
数据寄存器和寄存器的区别
我举一个例子 :好比 你在做数字试卷的填空题 你会得到一些中间的结果 但是你不会马上写进去 但是他是进行下一步的条件 如此循环多次 最后的到答案。
寄存器好比是存储 中间的结果的一个器件 ,数据存储器是存储最终答案的器件。
寄存器强调是 过程 数据存储器 强调的 结果
3 控制单元
我们的数据 有可能是 数据存储器提供的 或者是寄存器组提供的
这时我们就需要一个控制单元来约束他们的工作状态。
控制器的大概功能
指令分析 :分析指令 需要什么操作
确定 数据流向:确定该指令用到的操作数和产生结果的去向.
4 获取指令
上面讲了从寄存器或者从数据存储器获取指令
那么指令又从哪里来呢 我们往下看
图上我们可以看出 在寄存器获取指令 ,那么就需要指令有序运行,那么现在就需要到PC指针 寄存器
PC指针寄存器是存放下一个指令的地址.每次地址被更新 ,PC指针都会马上指向下一个地址 ,不管怎么样
他都会保证 地址是多一位的,这样就保证了 程序的有序稳定。
总结
我们从 PC 指针寄存器 得到指令 控制寄存器从其获取到了指令 并对其指令进行分析 判断他的工作目的 再根据
他的操作数的来源和逻辑运算的单位结果存储位置,从而完成指令要求的cpu执行运算。