打印

SDRAM“内存管理”,有没有高手能够启发一下我?

[复制链接]
1948|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Isara|  楼主 | 2012-11-27 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
其实远没有“内存管理”这么高端,但是我又不能用一个词总结...
具体的需求就是希望对SDRAM中一段区域进行内存动态分配,比如10M的空间,分成10个区,每区1M;先存入10段1M的数据到各个区,然后比如1,3区用完后释放,接着需要存入2M的一段数据,但是没有连续的2M空间,就需要对数据重新整理,留出2M的连续空间存储新的数据。
我的思路大体是使用地址指针来做,但是这样的话每次释放出间隔的区域,其他区域的地址都要跟着变化才能把间隔的区域拼在一起...感觉方法挺笨的,搞不好还容易出错,见笑了

相关帖子

沙发
highgear| | 2012-11-28 00:26 | 只看该作者
可以使用数据移动来保证数据区的连续性,这种
或者
使用虚拟地址的方法,用软件来模拟数据区的地址,即读写用特殊的函数通过地址映射表进行

使用特权

评论回复
板凳
Isara|  楼主 | 2012-11-28 10:54 | 只看该作者
2# highgear
谢谢你的提示!那这么说只有这两种办法了?我想的那种应该是你所说的数据移动。
虚拟地址是不是指实际的内存区域不变?可是现在需要存wave数据,必须要物理内存是连续的。
如果要移动数据,如何移动比较高效呢?往前对齐空出后面?还是向两头对齐空出中间?

使用特权

评论回复
地板
Tinnal| | 2012-11-28 13:24 | 只看该作者
用MMU管理吧。也就是采用虚拟地址。因为如果你直接对数据进行移位,一单程序大了,你是非常难保证持有已分配数据的指针都得到更新的。对于大型程序来说,基本等于不可能。
通过MMU,你可以把不连续的物理页面映射成连续的虚拟地址空间。当前,你也可以把原来的物理页面进行移动,而保持它们的虚拟地址不变。

因此:
如果你存在DMA,需要连续的2M来进行WAVE内存数据到声卡的传输,则可以移动1和3的物理页,腾出2M的连续物理空间。

如果你只是想在应用程序看来有2M连续的空间,供你存放你的WAVE数据。那你可以直把2、4通过MMU映射成连续的。

使用特权

评论回复
5
Tinnal| | 2012-11-28 13:26 | 只看该作者
如果真要拷贝,最快的方式就是采用汇编写代吗,很多CPU都会有特定的指令予以支持的。

使用特权

评论回复
6
Isara|  楼主 | 2012-11-28 13:47 | 只看该作者
4# Tinnal
谢谢,谢谢
硬件平台不带操作系统,看来只有用汇编硬搬了...

使用特权

评论回复
7
Tinnal| | 2012-11-29 09:00 | 只看该作者
不带系统也能用MMU呀,谁说MMU一定只能操作系统使用。而且,像2410,你想用cache,就必须开MMU。难道你不想用cache?

使用特权

评论回复
8
Isara|  楼主 | 2012-11-29 16:31 | 只看该作者
7# Tinnal
哎,可是公司说要能在高低档产品上推广

使用特权

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

本版积分规则

7

主题

67

帖子

0

粉丝