内存结构:
学习新系统执行环境的第一步都是相似的,就是系统如何使用内存。下图粗略的描述了Motorola 68K系列通用微处理器的内存映象,很具有代表性。
系统空间 代码空间 ROM数据空间 I/O空间 …………. RAM数据空间 堆 栈
0x00000000 0xFFFFFFF
嵌入式系统内存一般为线性内存,不需要段页式管理,物理地址等于逻辑地址,所能寻址空间即为物理地址空间大小。
I/O空间左边的都可以用ROM实现,而右边的可以用RAM实现。
系统空间:
MOTOROLA 68K系列通用微处理器为异常保留向量表的1024字节内存空间9256个长字)。异常向量是硬连线地址,处理器用其标识出在系统遇到中断或其他异常时将运行哪段代码。由于68K中每个向量都设为4字节长,所以他可以支持256个异常向量。
代码空间:
在系统空间之上的代码空间存放着指令。一般要把系统和代码空间存放在同一个物理ROM设备中,使它们紧紧挨在一起是非常有意义的。
数据空间:
在代码空间之上,ROM数据空间存放常量数值,如错误信息或其他字符串。
在数据空间之上内存结构没有绝对严格的规则,而更多依赖于硬件设计时的定义。因而,图中的内存模型仅是个例子,并不意味着要按这种方式来做。
RAM的三个基本区域需要标明:栈、自由内存(RAM数据空间)和堆
栈:
栈用来保存当前运行状态和所有暂停运行的进程上下文。因此,栈包含所有的活动局部或自动变量以及函数和中断的返回地址。只有提供栈空间,程序才能进行中断服务和函数调用。
栈一般位于内存的高端,这是因为68K系列以递减内存设置栈,也就是栈按从上向下的方向增长。把栈放在RAM右端意味着栈的逻辑底在RAM地址的最高处,它被赋予内存空间的最高值并向下增长。
自由内存(RAM数据空间):
所有静态分配的读写变量都放在自由内存中。全局变量是最常见的形式,C语言中的“static”型变量也放在这里。
堆:
所有动态分配的(使用new或malloc)的对象和变量都放在堆中。
无效内存空间:
图中的省略部分表示无效的地址空间,但不能指向任何内存。
I/O空间:
最后的内存组成部分是映射到内存的外部设备。图中,这些设备放在I/O空间区域。68K不为设备分配单独的地址空间,这些I/O设备被认为是存在于RAM和ROM之间另外一些空白内存区域的地址中的。
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |