从在学校到后来的实习工作,讲真,对于处理器的冯诺依曼结构和哈佛结构不大在意,印象中只知道它是数据存储器和程序存储器相关。
昨天在STM32程序中,把全局变量的定义成const属性时,发现它所处的位置是在STM32内置的FLASH而非内置的SRAM中。顿时让我觉得十分奇怪,程序不都必须在RAM中运行?即使在静态常量区不也应该放在SRAM中?
原因?这得从处理器的冯诺依曼和哈佛结构说起了。
1. 哈佛结构和冯诺依曼结构
哈佛结构,指的是数据存储器和程序存储器在物理是是分离的,以51单片机为例,数据存储器是单片机的RAM,程序存储器是单片机的ROM。在数据存储器中上不允许存储指令,同理,在指令存储器上不允许存储数据。
图为网上哈佛结构示意,数据存储器和程序存储器分别使用独立的两条总线,控制单元能够同时与程序存储器、数据存储器通信,实现软件系统功能。ARM采用的就是哈佛结构。(严格来说,很多高级ARM芯片已经采用哈佛结构和冯诺依曼结构的结合了)
冯诺依曼结构,通用计算机采用就是这种结构,数据和程序存储器不分离: