多语言展示
当前在线:1427今日阅读:142今日分享:25

关于内存分页重叠的解决方法

关于内存分页重叠的解决在对MP3解码程序从16位定点C算法移植到FD216 16位定点DSP过程中,我发现代码和数据数量很大,无法放置在一页内存中,必须进行内存分页。要正确进行内存分页,首先我们来了解FD216的内存结构。FD216的整个内存由Program-Code Memory(CM)、Program-Data Memory( PM)、Data Memory (DM)和I/O存储空间四部分组成。1、Program-Code Memory(CM):存储DSP程序代码。24k*24片内CM内存,其中分为两部份:1个8k字页(0x0000~0x1fff);4个4k字重叠页(0x2000~0x2fff),使用pmovlay寄存器的第3位~第0位来选择使用哪一CM重叠页。2、Program-Data Memory( PM):存储数据变量。8k*16片内PM内存,分为2页重叠页,另外4个4k*16片外PM字重叠页,地址空间均为0x3000~0x3fff,使用pmovlay寄存器的第7位~第4位来选择使用哪一PM重叠页。3、Data Memory (DM):存储数据变量和内存映射寄存器。片内有1个8k*16字页,片外有4个8k*16字重叠页,地址空间为0x0000~0x1fff。4、IO存储空间:用于DSP和外围器件的连接,不涉及分页问题。本系统不使用I/O内存空间。具体分页过程使用fd2ln –groupgroupfile来进行分页,并生成可烧录到flash中的.EXE文件。groupfile例子:main 需要链接的文件-a fd216指定系统结构文件名为fd216.sys-e page0生成page0.exe可执行文件-g产生后缀.sym的符号表文件-x产生后缀.map的内存映射文件-endfile1-a fd216-e page1-g-x-endfile2-a fd216-e page2-g-x-endtable0-a fd216-e page3-g-x-endtable1-a fd216-e page4-g-x-end用fd2osplt -v-m page查看程序、数据在RAM中的分页放置情况。发现分出了多个DM、PM、CM重叠页,检查page*.map文件,各个模块的全局DM变量都从0x0地址开始分配,由于各个模块都有自己的全局变量,所以fd2ln –group groupfile时自动对DM分页。改进:把C程序中所有的全局变量都定义在同一个文件main.c中,需要调用它的文件用extern说明。重新make。修改后的groupfile如下。但这样处理后,虽然DM只占了一页,但检查page0.map文件,发现有些外部变量没分配绝对地址
推荐信息