首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[转帖]嵌入式系统内存结构分析

[转帖]嵌入式系统内存结构分析

内存结构:
学习新系统执行环境的第一步都是相似的,就是系统如何使用内存。下图粗略的描述了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之间另外一些空白内存区域的地址中的。

 

 

我的博客:http://blog.eccn.com/u/qianmin/index.htm
静静等待春天的到来! 
好帖啊!
返回列表