打印

内存怎么处理?

[复制链接]
6257|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2011-4-10 20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在单片机,程序和数据被保存在FLASH中,在执行时,会把数据复制到内存中。好像是有的芯片只把数据复制到内存中,有的还会把程序也放到内存中去执行。
所以,关于内存,一般是怎么处理的呢?比如怎么把不同的程序段对应到内存中去的呢??????还有虚拟内存是怎么解决程序内存不够用的呢???????
感觉涉及到内存的处理,还有好的一般人都不了解的地方!!!!!!

相关帖子

沙发
chunyang| | 2011-4-10 22:23 | 只看该作者
MCU中程序不是加载在内存中执行的,也不存在虚拟内存,建议楼主去看看单片机原理等教材,弄清楚基本概念,不要将MCU和PC平台、操作系统弄混。

使用特权

评论回复
板凳
免证入网| | 2011-4-10 22:28 | 只看该作者
楼主好像不是搞单片机,而是搞电脑去了,要不怎么内存虚拟内存呢。单片机的操作系统也没你说的那样高深啊。

使用特权

评论回复
地板
chunyang| | 2011-4-10 23:28 | 只看该作者
这个不是高深,不同的系统资源不同,适用的解决方法也不同。

使用特权

评论回复
5
原野之狼| | 2011-4-10 23:47 | 只看该作者
传统的MCU程序是在ROM里运行的
后来的32位单片机比如ARM体系采用统一编址技术 程序既可以在FLASH里运行也可以在RAM里运行
虚拟存储技术这个说起来就比较复杂了 可以找点资料来看看
例如PC平台INTELX86体系的DATASHEET
INTEL 80386
PROGRAMMER'S REFERENCE MANUAL
1986


或者ARM体系的DATASHEET 上ARM的官网找吧

使用特权

评论回复
6
areshan|  楼主 | 2011-4-11 08:34 | 只看该作者
恩,ARM可以把程序放在RAM里的!就是想知道他是怎么处理的,还有操作系统怎样分配RAM的。因为RAM就是一个地址对应一个数据,它一定要被分成不同的功能块的。

使用特权

评论回复
7
areshan|  楼主 | 2011-4-11 08:37 | 只看该作者
ARM寻址是4G(32位),这4G就是虚拟的,可以把FLASH挂到0-X的地址处,起点也可以不是0,但是一个虚拟的地址还是要对应到一个FLASH的实际地址上去的!

使用特权

评论回复
8
原野之狼| | 2011-4-11 09:23 | 只看该作者
LZ,先把我推荐的资料看看,你不摄入一定的素材是难以理解内存管理机制的。

使用特权

评论回复
9
dqyubsh| | 2011-4-11 10:28 | 只看该作者
就单片机来说,一般不叫虚拟内存,一般它的寻址空间固定大小,比如51就是64K,大过64K的空间要分页。有了分页技术,程序空间和数据空间都可以超过64K了。

FLASH烧写速度慢,但读出速度还不错。所以,现在单片机多半就用FLASH用做程序存储器了。比如AVR等。

如果对指令要求速度高,那就把FLASH的数据搬到RAM里。一般DSP这么干。为了进一步提高指令命中几率,DSP增加了L1/L2之类的CACHE。这个当年486、586微机的CACHE是一个目的,当时DOS有个Smartdrv.exe之类的程序就是干这个的。

虚拟内存,是把硬盘空间开辟一块当作一个文件,作为物理内存的扩展。一般Windows系统才这样说。

使用特权

评论回复
10
xiaowei1234| | 2011-4-11 10:38 | 只看该作者
学习了

使用特权

评论回复
11
yan2005| | 2011-4-11 11:07 | 只看该作者
to 1楼:
CPU的基本功能有3个,取指、译码和执行。只有取到正确的指令,CPU才能进行后面的译码和执行操作。

感觉你问了3个问题:
1. CPU如何从存储器中获取指令,这是和CPU的具体实现的硬件结构有关系的。根据芯片内硬件实现的不同,可以从ROM, flash, ram等地方取指。
2. 程序段和内存的对应关系,是你在链接的时候用链接脚本指定的。不同的链接器有不同的脚本格式。这个对应关系确保CPU取指取到的是正确的指令,而不是随意乱取。
3. 虚拟内存通常是用低速存储器来模拟高速存储器。通常按照速度排序, 寄存器>Cache>SRAM(Flash)>DRAM>硬盘。速度越快的存储器,通常越贵,所以通常配置的容量越小。当小容量的高速存储器不够用的时候,可以使用虚拟内存来模拟。实际上就是加了个内存管理单元来做,内存管理单元可以用硬件或者软件是来实现。这东西一般在操作系统的书里面,内存管理部分会有讲述的。

使用特权

评论回复
12
areshan|  楼主 | 2011-4-11 11:55 | 只看该作者
谢谢大家的回复,我对单片机,对ARM的理解还不是很深刻,我会看原野之狼推荐的资料的,谢谢yan2005,你说的好像是ARM7的处理方法,我也看过ARM7的有关资料,不过都没有深入的讨论到数据和程序是怎样在内存中被识别的,可能要涉及到和编译器连接器有关的知识!

使用特权

评论回复
13
xlsbz| | 2011-4-11 12:15 | 只看该作者
谢谢大家的回复,我对单片机,对ARM的理解还不是很深刻,我会看原野之狼推荐的资料的,谢谢yan2005,你说的好像是ARM7的处理方法,我也看过ARM7的有关资料,不过都没有深入的讨论到数据和程序是怎样在内存中被识别的 ...
areshan 发表于 2011-4-11 11:55


浮云啊 你理解的都是浮云

使用特权

评论回复
14
areshan|  楼主 | 2011-4-11 13:02 | 只看该作者
此话怎讲?那什么不是浮云呢?????? 13# xlsbz

使用特权

评论回复
15
原野之狼| | 2011-4-11 13:03 | 只看该作者
没事 多看看书就能把浮云编程真金白银的:lol

使用特权

评论回复
16
原野之狼| | 2011-4-11 13:04 | 只看该作者
没事 多看看书就能变成真金白银的:lol

使用特权

评论回复
17
accelink-yy| | 2011-4-11 14:37 | 只看该作者
LZ,作为一个尚未毕业的学生,最近跟你有相同的困惑,现在感觉学的东西太多太杂,很多概念都混淆了,很是迷茫!但是既然我们选择的走技术这一条路线,我们现在要做的,就是脚踏实地好好学习,以一颗平常心去面对一切挫折~迷茫也是我们走向强大的一个过程,只要我们不要在迷茫中迷失自己就可以了!一起共勉吧,加油~

使用特权

评论回复
18
mbutterfly| | 2011-4-11 16:10 | 只看该作者
本帖最后由 mbutterfly 于 2011-4-11 16:40 编辑

:)原野之狼不知道可以修改自己已经说过的话?哈哈

使用特权

评论回复
19
原野之狼| | 2011-4-11 16:29 | 只看该作者
回蝴蝶MM:我知道的,修改完之后系统提示帖子被删除,所以我只好再发一帖。
这个得问二姨家的WEB工程师是咋回事。

使用特权

评论回复
20
mbutterfly| | 2011-4-11 16:40 | 只看该作者
我修改了,看~,多了个笑脸

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝