前言:
在上一篇博客(https://blog.youkuaiyun.com/Boooooots/article/details/86635228)的附录中提到了代码是下载到flash中的,且代码段是放在flash中的,那么为什么可以在flash中运行代码呢?能运行代码的必要条件是什么?CPU是如何处理这些二进制代码的?cpu是处理数据和指令,那么谁来管理和组织储存设备和外设呢?cpu与外部是通过什么来进行交互的?种种疑问,均需要逐步去分析和掌握,知其然,还要知其所以然!
1.STM32F7xxxx系统架构
带着整体的框架结构去看问题、分析问题会清晰一些,首先了解一下系统结构:
图1.1
2.nor flash为什么可以运行代码?
这句话分解一下有三点:什么是运行?什么是nor flash? 为什么可以运行?
2.1.先了解下什么是运行?
这里的运行并不是指真正的“执行”的概念,cpu执行代码的过程是流水线(pipeline)的,采用流水线的工作方式主要是为了提高计算机的运行性能(提高性能的设计方式还有并行、预测,并行的概念在总线矩阵中有应用)。三级流水线指的是:取指、译码、执行,后两步其实都是在cpu核心(cortex-m7)中动作的,也就是arm公司的内部技术。这里着重分析一下取指令的过程:取指令是需要与外部交互的,arm公司也是留了接口出来,以供其他芯片厂商使用。如图1.1中,cortex-m7留的接口有AXIM、AHBP、DTCM、ITCM、AHBS,这些总线接口就是CPU与外部连接的通道,当然有取指令的通道。
说到这里,就很有必要深究一下总线到底是怎么把各个模块联系上的,任何cpu能