cpu、flash、DDR(内存)、冯诺伊曼、哈佛之间的关系

 

程序首先躺在flash里面,分为3个段,代码段、数据段,bss段,控制器读取到CPU内部通用寄存器,cpu的机制会在内存中给他们各自分配好内存空间,比如代码段代码执行过程,CPU对内部IROM进行直接读取并解析指令后初始化部分DDR,指令会自动在内存上分配代码段(在内存上分配的还有其他4个段),将flash上的代码(如SD卡、nandflash等)cp到内存的代码段,然后cpu读取并执行解析代码,数据CPU的运算器会工作,在DDR的堆和栈中不断的存取数据,再根据解析下一行或下几行的代码的要求,访问指定地址的空间,去存放等操作。因为要处理数据,放入内存中运行时,会有多出2部分(堆和栈)用来处理数据,DDR和flash也是外设(实际的硬件),他们也需要一段代码去初始化他们的寄存器,使他们能被使用,所以一般会有一段启动代码在irom,CPU上电就会运行里面的代码,这是硬件设计好的。

两类寄存器:

通用寄存器:(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与)

SFR:(specialfunctionregister,特殊功能寄存器)不在CPU中,而存在于CPU的外设中,我们通过访问外设的SFR来编程操控这个外设,这就是硬件编程控制的方法。

 

 

         
冯诺依曼结构和哈佛结构


冯诺依曼结构是:数据和代码放在一起。
哈佛结构是:数据和代码分开存在。
在S5PV210中运行的linux系统上,运行应用程序时:这时候所有的应用程序的代码和数据都在DRAM,所以这种结构就是冯诺依曼结构;在单片机中,我们把程序代码烧写到Flash(NorFlash)中,然后程序在Flash中原地运行,程序中所涉及到的数据(全局变量、局部变量)不能放在Flash中,必须放在RAM(SRAM)中。这种就叫哈佛结构。

 

 

名词解释:

 代码段:(.text),又叫文本段,代码段其实就是函数编译后生成的东西

 数据段:(.data),数据段就是C语言中有显式初始化为非0的全局变量

 bss段:(.bss),又叫ZI(zero initial)段,就是零初始化段,对应C语言中初始化为0的全局变量。

 栈:栈是一种数据结构C语言中使用栈来保存局部变量。

解释:栈管理内存特点         先进后出

栈是有大小的,不同的开发板定义的栈的大小根据实际需要,如samsungS5PV210在uboot中,设置了栈,代码段,数据段,bss段堆的

大小。

 

堆:和栈一样也是一种管理内存的方式

 

 

 

 

 

 

 

 



 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值