《嵌入式发展简史及概念》

一、 MPU、MCU、SoC、Application Processors的概念

  • CPU:中央处理单元(处理器);
  • MCU:微小控制单元;
  • MPU:微小处理单元(处理器);
  • SOC:片上系统;
  • AP:应用处理器(Application Processors);

简言之:电脑级别(CPU、Window)、单片机系列(MCU、RTOS)、手机与Cortex-A 系列(Application Processors、Linux)。

二、 哈弗架构与冯诺伊曼架构

  •  哈佛架构:可同时读取指令和数据;
  • 冯诺依曼架构:不可同时读取;

ARM公司的芯片,ARM7及之前的芯片是冯诺伊曼架构,ARM7之后使用“改进的哈弗架构”。 

 

  •  在“改进的哈弗架构”里,指令和数据在外部存储器中混合存放;CPU运行时,从指令cache中获得指令,从数据cache中读写数据。
  • cache:高速缓冲存储器

 三、 指令集:CISC和RISC

  • CISC:Complex Instruction Set Computers,复杂指令集计算集(Inter、AMD)
  • RISC:Reduced Instruction Set Computers,精减指令集计算集(ARM、IBM Power)

 简言之:RISC是流水线操作(读、处理、写)、CISC是微程序(多条微指令、)

参考:

  • 术语:
  • Execute state: 执行状态
  • (1)、
  • ARMv8 架构与指令集.学习笔记 - 沉思 - CSDN博客.html
  • ARMv8 架构与指令集.学习笔记_sbfiz指令_你必须十分努力,才能看起来毫不费力的博客-CSDN博客
  • AArch32和AArch64之间的切换只能通过发生异常或者系统Reset来实现.(A32 -> T32之间是通过BX指令切换的)
  • (2)、
  • 一篇文章读懂Armv8 AArch64 - 简书.html
  • 一篇文章读懂Armv8 AArch64 - 简书
  • (3)、
  • CISC和RISC的区别
  • CISC和RISC的区别_risc和cisc的区别_gongxsh00的博客-CSDN博客
  • 四、嵌入式系统硬件组成

  •  嵌入式系统:支持多种设备启动
  • XIP:eXecute In Place,本地执行。可以不用将代码拷贝到内存里,而直接在代码的存储空间运行;
  •  XIP devices: Devices which are directly addressable by CPU;
  • ARM板子支持多种启动方式:XIP设备启动、非XIP设备启动等等。比如:Nor Flash、SD卡、SPI Flash, 甚至支持UART、USB、网卡启动。这些设备中,很多都不是XIP设备;

  • CPU可以从非XIP设备启动:上电后,CPU运行的第一条指令、第一个程序,位于片内ROM中,它是XIP设备。SO,处理流程是:执行必要的初始化(设置时钟、设置内存)、再从“非XIP设备”中把程序到内存、最后启动上程序(读到哪里由你决定:片内RAM或是片外的DDR);

  • ROM程序要做的事情:(这里其实很多疑问,01、不急着初始化;02、存在的 bin 文件(读、写、转换);03、这些问题的解决会在以后的篇章有所解决)

  1. 初始化硬件
  2. 初始化时钟,提高CPU、外设速度
  3. 初始化内存:DDR需要初始化才能使用
  4. 初始化其他硬件:看门狗、SD卡
  5. 从外设吧程复制到内存
  6. 选择某个设备
  7. 源、目的、长度(头部信息:指定了内存地址和长度)
  8. 程序在SD卡存储:原始二进制文件(raw bin)或者作为一个文件保存在分区里

五、理解升华 

  1. 要调用C函数必须先设置栈,一切的一切都设置到读写内存,栈的存在为了记录数据、地址
  2. Program counter,程序计数器,表示程序执行到了哪里(记录下一条程序的地址)
  3. Flash:存储代码,保存的是机器码 
  4. 在M3的异常向量表,也就是Flash的起点,也就是0x08000000地址处,存放异常向量表
  5. Reset Handle:第一条指令的位置(地址),设置SP指针,向下增长的!!!
  6. 我们编好的程序烧写在flash上
  7. 上电后CPU从Flash上读取指令、运行指令
  8. 从flash哪里读,由异常向量表决定,异常向量表保存在Flash的起始位置
  9. 异常向量表的第2个数据,就是程序启动后执行的第一条指令的位置
  10. 从PC指示的位置读,PC的初始值是什么?这由芯片决定

  11. 异常向量的位置,在芯片设计时,就定死了,Flash的开头数据是:0x00000000 0x080000A5 所以,CPU从0地址得到异常向量表后,从向量表的第2个数据得到0x080000A5,就从0x080000A4开始运行(意思是说PC = 0x080000A4),看不到内部的实现(以后再研究!!!(这由架构决定的,应该看不到!!!))

  12. M3物理上有两个SP寄存器:MSP, PSP。不同CPU模式下使用SP这个名字可以访问到MSP或PSP

  13. CPU一上电,从地址0处读到异常向量表,F103的0地址和0x08000000都指向Flash

  14. 1.CPU从0地址读到数据:

       0x00000000

       0x080000A5

    2.CPU使用第1个数据0x0000000赋给SP

    3.CPU使用第2个数据0x080000A4赋给PC

    4.CPU从0x080000A4执行机器码 0xF8DFD004, 是的SP等于0x20010000

    5.PC寄存器执行下一个位置0x080000A8(后加1,这跟LDR那些特殊指令有联系吧)

    6.CPU从0x080000A8执行机器码,调转执行main函数

  15. 在arm9、cortex A7架构里:

    1.如果直接给PC赋值addr,程序就跳转到addr去取指令、运行

    2.如果程序顺序执行,PC就是下下一条执行的指令的地址,注意:是下下条指令,不是下条指令

  16. ARM指令效率高,但是占据空间大,Thumb指令占据空间小,效率稍低,在单片机领域,都是thumb指令,也就是thumb2指令;

  17. 引出地址总线、数据总线:一系列信号线,nWE(写使能),nOE(读使能,很奇怪(Output)),读、写多少字节,由多少条信号线决定的;

  18. 系统总线 = 地址总线、数据总线、读信号、写信号、字节使能信号、片选信号

  19. CPU不知道要读写哪一个设备(内存控制器)

  20. 1.CPU发出的地址进入内存控制器

    2.内存控制器根据地址的范围来驱动某一个片选引脚

    3.这个片选引脚连接到某一个模块去

  21. 奇不奇怪?MCU与8080LCD连接竟然只接了一条地址总线,也就是说这个LCD,它里面只有两个地址,LCD跟内存不一样:我们发出不同的地址,用来访问内存里不同的空间,我们去操作这个LCD的时候:地址线等于0的时候从数据总线上表示传输的命令,比如用来控制LCD的开关,地址线等于一的时候,表示数据总线上传输的是“数据”,所以他用一条地址线就足够了

  22. 对于内存:写入什么数据再读出来仍然是什么数据

    对与GPIO:写有某些数据,可能是用来

    再去读同一个地址,得到了数据可能就不一样了:得到的数据反映的是引脚的当前电平

    对于RAM: CPU发出地址和数据,导致内存的某个空间被直接写入数据

    对于Flash:能够这样简单的写数据吗?

    如果flash也可以这样简单的写数据的话,你的程序很容易就把你的flash全都给破坏了

    所以:Flash能够像内存一样读出数据,要写数据到flash的话不能够直接

  23. 1.CPU是个大爷

    2.CPU要执行指令,是发出addr,得到数据,这个数据就是指令

    3.CPU发出的地址addr,可以从flash上读到数据,这个数据就是指令,然后执行

    4.CPU发出的地址addr,到达I2C控制器时,只能够用来读写里面的寄存器

    他无法直接从I2C控制器的寄存器里返回存储芯片的数据

    所以: CPU可以直接执行图中flash的程序

  24. 但是不可以直接执行I2C存储芯片里面的程序

    怎样才可以运行I2C存储芯片里面的程序?注意,我没有说“直接”

  25. Flash是有很多种接口

    有些flash的接口就是内存接口:不需要flash控制器

  26. Flash有很多种类型,内存类接口的flash可以像内存一样读任意地址

    Flash型号:nor flash内存接口、nand flash、I2C flash、SPI flash、EMMC flash等等

  27. 对于我只会记住核心: CPU能否直接访问到。(直接与间接,接口类型)

  28. 器件地址总线和CPU地址总线宽度不一致的时候应该怎么连接呢?由FSMC来解决:CPU想读32位数据,FSMC内部读2次,把2个16的数据组合位32位

  29. 硬件决定的,向量表的第1个4字,就是赋给SP;第2个4字赋给PC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值