TI中文支持网
TI专业的中文技术问题搜集分享网站

在使用DSP6748的时候遇到一个奇怪的问题,请大家帮忙解决一下

查看手册可知DSP内部RAM的分配如下:

DSPL2RAM         o = 0x00800000  l = 0x00040000   /* 256kB L2 Internal RAM */
SHDSPL2RAM   o = 0x11800000  l = 0x00040000   /* 256kB L2 Shared Internal RAM */
SHRAM                o = 0x80000000  l = 0x00020000   /* 128kB Shared RAM */

所以在编写程序的时候,可以在cmd文件中将程序中的各个段(例如stack、.text、.bss、.data、.far、.switch、.const、.pinit、.cinit )配置在上面的RAM的任意区域,只要保证该区域有效即可。但是现在项目中却遇到这样的一个奇怪的问题,为了防止将所有段都放在一个RAM区导致RAM空间不足的问题,我将上面的几个段平均的分配给上面的三个段的RAM里面,实验证明,当程序较小的时候,程序确实可以正常运行,但是在实际工程中,随着程序量的增大,就会出现问题,现象如下:程序并没有奔溃,程序依然运行着,但是不正常,某些调用的函数根本就不执行了,一些中断服务函数也进不去了!除非把程序的所有的段都放在SHDSPL2RAM  里面,否则任何搭配都会导致程序运行不正常(注意,是不正常不是不能运行,也就是说某些功能实现不了)

Tony Tang:

PU HUDSPL2RAM         o = 0x00800000  l = 0x00040000   /* 256kB L2 Internal RAM */SHDSPL2RAM   o = 0x11800000  l = 0x00040000   /* 256kB L2 Shared Internal RAM *

这两块是同一个地址空间,删掉一个。0x11800000是系统地址空间,0x00800000是DSP的地址空间,从DSP程序的角度,这是同一个地址空间,如果是其它master如EDMA之类的,就从0x11800000来访问这片L2 RAM。

而CMD文件是给代码link用的,所以从0x00800000访问就行了。

PU HU:

回复 Tony Tang:

1.同一个地址空间是什么意思?难道是说同一段内存,有两个不同的地址?外设访问时用第二个地址,DSP核访问时用第一个地址,是这个意思吗?2.如果上面说SHDSPL2RAM和DSPL2RAM指向同一段内存的话,我就知道为什么把程序分配在SHDSPL2RAM和DSPL2RAM两个段里面会出错了。但是那为什么我在CMD中把地址分配在SHDSPL2RAM和SHRAM这两个地址的时候程序也还是会出现问题呢,放在SHDSPL2RAM和SHRAM这两个段的时候,程序能运行,但是过一段时间后某些功能就实现不了了,比如说中断服务函数进不了了。3.我之前还发帖提过一个问题,但是别人解答的时候我有点没懂,麻烦您也帮我看一下,因为每次你都能一语中的http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/115195.aspx

Tony Tang:

回复 Tony Tang:

对,是同一段内存,如下面memory map,这两段都是L2 RAM. 

PU HU:

回复 Tony Tang:

谢谢你,每次遇到问题发帖,都是你的回答给了我思路!

赞(0)
未经允许不得转载:TI中文支持网 » 在使用DSP6748的时候遇到一个奇怪的问题,请大家帮忙解决一下
分享到: 更多 (0)