学习地址

2.1 基础概念

机械计算
图灵 :一个计算的问题一定可以拆解为有限个计算的集合(可计算性) 01
冯诺依曼结构:运算器、控制器、存储器、输入设备、输出设备
模拟信号 连续 数字信号 离散 量化成若干个值 也会失真
一般通过电压高低标识01
ascll 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0)
学习氛围->认知不清

2.2 基础概念从晶体管到CPU

所有的东西都数字化
电压幅值代表0和1 逻辑 晶体管



逻辑->加法 加法本身就是减法(补码)

计算机中的记忆元件由触发器组成,而触发器只有两个状态。即“0”态和“1”态,所以每条信号线上只能传送一个触发器的信息。如果要在一条信号线上连接多个触发器,而每个触发器可以根据需要与信号线连通或断开,当连通时可以传送“0”或“1”,断开时对信号线上的信息不产生影响,就需要一个特殊的电路加以控制,此电路即为三态输出电路,又称为三态门。
加一个三态门 做成取地址的操作


控制流量

组合逻辑 时序逻辑

锁存器 存储 串联移位 乘除法


边沿触发器




概念CPU:16条指令 4bit位宽的CPU原型

助记符(mnemonic)是便于人们记忆、并能描述指令功能和指令操作数的符号,助记符是表明指令功能的英语单词或其缩写。汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

编程的本质:指令集的集合

2.3 概念CPU、微控制MCU和嵌入式系统





2.4 八卦计算机史和创新

摩托罗拉
6502 乔布斯 任天堂 CPU 指令集
68001 32位
C80

2.5不同领域不同系列的嵌入式








2.6 ARM的历史与MKL25Z128MCU


powerPC IBM 摩托罗拉 苹果联合设计的 高性能 特别是高网络吞吐量和高性能汽车主控设备
6800后代 coldfire 军工 电表





苹果 飞机 单片机



3.1 CPU的基本结构和运行





ALU的四要素

flag标志位在哪里?

操作数哪里来

操作数在哪里?


运算结果放在哪里?

运算结果存在哪里?

谁掌控这一切的运行?

获取指令:一个完整的CPU

存储在存储器 时钟 时序电路的驱动下 挨个将指令放在控制单元
PC 程序计数器 保持下一条将要执行指令的地址

这些任然是图灵机的高度抽象


3.2.1 堆栈的概念



堆栈指针寄存器

C语言的编译器会帮我们使用堆栈

a completely cpu

数:寄存器 片外存储器
指令解析产生逻辑控单元
PC指针的指引下从程序的存储地址空间 一条一条拿来 解析控制数据的流向和来源 以及要做的运算内容
函数调用 嵌套调用 跳转 堆栈

堆栈溢出

用户程序进入内核火获得不应该有的权限

指令集 寄存器


总线

3.2.2 头脑体操


NOP 汇编语言的助记符
SP 堆栈指针寄存器
PC pc指针寄存器 读取下一条指令的地址
AB 片内的数据寄存器组

堆栈的初始化

压栈

JSR 跳转到一个子函数SubFunc

跳转 下一条指令的地址

堆栈会覆盖,不会销毁

RTS从子函数返回



交换 1微妙不到就可以完成

3.3.1 ARM的体系架构



R0-R12 通用
R13 堆栈
R14 函数调用 子函数 返回地址
R15 PC 程序指令地址

xPSR 保持各种CPU的设置状态 便于读写
PRIMASK 中断的开和关的
CONTROL CPU的工作模式
FAULTMASK 不可屏蔽中断的开和关 BASEPRI 按优先级关闭中断(M3 M4才有)

32bit 程序状态寄存器 各种状态指令跳转的依据

优先级控制寄存器

CPU的状态 用户态还是特权态

堆栈寄存器指向两个区域:操作系统内核 用户程序 任务跑飞的时候不会使操作系统崩溃

进程模式:mian函数
句柄模式:进中断出中断
M3/M4 分用户态 内核态

3.3.2 头脑体操

32bit

movs r4,#18 把18存到r4寄存器 #代表十进制





一级调用堆栈没有用 LR:末位为0 切换到38指令集 末位为1切换到arm指令集 返回0810(偶数有效)及下一位指令所在地址


pop 弹出一个置给r4寄存器
堆栈的特性 用来做数据交换

3.4.1 中断的概念和机制


中断和轮询

什么是中断


中断的允许/禁止控制

中断的标志位 IF

控制中断的开关

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

中断的工作流程

中断的堆栈占用


中断来后,CPU自动将这些寄存器压入堆栈
效率的平衡 可以手动压

3.4.2中断子程的概念和编程


中断向量表

中断优先级

中断嵌套

中断嵌套时的堆栈

对内存比较大的开销,又可能发生堆栈溢出,嵌套有限。

中断的潜在风险

中断是独立的,为外部元素所触发的函数,快速实时响应一些事情,并且可能由硬件的通知打断任意位置的main函数,依赖堆栈保留现场,但内存里面全局变量是不会被改写的。

3.5 复位、时钟、存储器和总线


中断向量表

0000:堆栈指针向量 ARM厂商 堆栈指针CPU内部寄存器初始地址 SP
0004:开发工具的入口地址填写在这,上电后CPU自动从这里加载,入口函数最后一条指令就是main PC




RAM堆栈 返回地址 临时变量

内部总线接口

CPU内部的寄存器通过指令就可以实现
CPU按地址看外面的

3.6 小结:MCU的总体架构

CPU除了独立的时钟和复位用电路连接外,通过总线以地址的视角看待

区别CPU内部寄存器通过指令访问,而是在外部寄存器通过地址访问,电路与编程的接口



ARM微控制器与嵌入式系统 基础知识相关推荐

  1. 清华大学视频:ARM微控制器与嵌入式系统

    清华大学视频课件:ARM微控制器与嵌入式系统(2017) 本课程课程要求学生具备C语言编程基础,在课程中逐步讲解ARM微控制器(单片机)与嵌入式系统,面向实践安排教学,鼓励动手实践和自由创新,适合想参 ...

  2. 课程笔记 -- 《ARM微控制器与嵌入式系统》

    "人生是如此简单,而又是这般辉煌." 村上春树 --<如果我们的语言是威士忌> 推荐 最近看了清华大学曾鸣老师的嵌入式开发入门课程<ARM微控制器与嵌入式系统&g ...

  3. 清华大学视频课件:ARM微控制器与嵌入式系统

    清华大学视频课件:ARM微控制器与嵌入式系统(2017春) 直接点击博客网页连接就可以进入下载页面,因为是免费分享,点击后可能会有广告,请量解,点击普通下载. 将网址复制粘贴到浏览器地址栏,因为是免费 ...

  4. 复位、时钟、存储器和总线————————ARM微控制器与嵌入式系统清华大学慕课记录

    复位 初始化微控制器内部电路 将所有寄存器恢复成默认值 确认MCU的工作模式 禁止全局中断 关闭外设 将IO设置为高阻输入状态 等待时钟趋于稳定 从固定地址取得复位向量并开始执行 中断向量表 中断向量 ...

  5. ARM微控制器与嵌入式系统

    文章目录 图灵机 编码Encoding ASCII编码 从晶体管到概念CPU 通用CPU 微控制器MCU ARM Cortex-M指令集 图灵机 可计算性(calculability)是指一个实际问题 ...

  6. ARM Cortex -M 体系结构————————ARM微控制器与嵌入式系统(清华大学慕课记录)

    ARM的发展过程 对于ARM公司来讲,ARM公司只做CPU设计,采用出售IP的方式运营,半导体产商无需自己设计CPU,是生产关系的革命,提高了生产力.下面这张图ARM核的多个系列,我们可以看到ARM从 ...

  7. CPU的运行机制——————ARM微控制器及嵌入式系统(清华大学慕课记录)

    MCU的架构 MCU的架构主要包含三部分,CPU,存储器以及外设. 其中对于CPU的学习,主要需要掌握如下几个方面: 寄存器组 指令 栈 中断 时钟 CPU的一个总体架构图: 在上图中,可以清晰地看到 ...

  8. 清华大学-曾鸣-《ARM微控制器与嵌入式系统》I2C总线(二)

    I2C(Inter IC Bus)的通讯数据帧: SCL线无方向区分,SDA线上有数据的流动方向.上图中灰色的代表的是主机向从机发送数据,此时SDA线的电平控制权由主机掌控,从机只能监听该线上的电平状 ...

  9. 清华大学-曾鸣-《ARM微控制器与嵌入式系统》I2C总线(一)

    I2C是一种双向2线制同步串行通讯接口,是一类非常经典的串行总线通讯,理解好I2C通讯会帮助理解USB通讯.以太网通讯中的握手.数据帧等环节. I2C的发展历史: SPI串行通讯主要是由MOTOROL ...

最新文章

  1. php制作标记图,PHP使用JPGRAPH制作圆柱图的方法详解
  2. [转]在ITunes播放中前进、后退五秒的快捷键
  3. python 二维数组赋值_python日常注意小知识集锦
  4. request,logging,ConfigParser——接口框架
  5. 【python】self cls
  6. 【NLP】如何在文本分类任务中Fine-Tune BERT
  7. java如何从方法返回多个值
  8. java repaint 重画图形,学习笔记:WINDOWS的图形重绘基础
  9. sql语句中查询出的数据添加一列,并且添加默认值
  10. AngularJs学习的前景及优势
  11. 查看win10的产品密钥过期时间
  12. 闰年python的月份判断_C 判断闰年及指定月份有几天
  13. C# 从Excel复制数据粘贴到DataGridView的实现
  14. SNIP算法详解(极端尺寸目标检测)
  15. Scikit-learn的六大功能
  16. 贴纸UI效果如何制作,4个做贴纸效果的小技巧
  17. 红米手机TWRP读不了刷机包成功解决记录
  18. 创造与魔法java语言_创造与魔法 | 最新魔法使用大全
  19. UDAL - DBProxy internal error问题解决
  20. python 设置时区_python时区设置的两种方式

热门文章

  1. matlab的输入输出
  2. 基于iproute命令集配置Linux网络(ip命令)
  3. NTP And System Clock Maintenance
  4. 使用 Roslyn 分析代码注释,给 TODO 类型的注释添加负责人、截止日期和 issue 链接跟踪
  5. JAVA的对象list参数的校验
  6. Diagonal Scaling
  7. 台式电脑怎么锁定该计算机,教大家电脑整个键盘锁了怎么办
  8. 数据结构之二叉树 一
  9. Unity3D和UE4游戏开发引擎哪个是游戏开发者最爱?
  10. 使用Excel生成sql脚本