DSP库中的函数怎么指定运行地址在DSP L1P RAM
比如DSPF_sp_fftSPxSP函数,想要放在DSP L1P RAM中运行,要怎么设置。
在DSPF_sp_fftSPxSP.s文件中,有.sect ".text:optimized"但是更改后运行不了。
Shine:
之前有客户问过类似的问题,可以看一下。
e2echina.ti.com/…/106479
user3688025:
回复 Shine:
L1P与L1D除了可以当Cache,还有什么其他的用法么?
L1P当程序cahce时,是不是会提高程序的运行效率?
Tony Tang:
回复 user3688025:
Cache的原理都是一样的:
user3688025:
回复 Tony Tang:
1、如果L1P设置为程序的cache,那么是哪些程序cache了,可以确定么?
2、如果不用于cache功能,那么是不是L1P与L1D就是无用 的了?3、以下帖子中的问题是不是bug
e2echina.ti.com/…/429567
Tony Tang:
回复 user3688025:
user3688025如果L1P设置为程序的cache,那么是哪些程序cache了,可以确定么?
可以确定。用cache freeze 功能。
user36880252、如果不用于cache功能,那么是不是L1P与L1D就是无用 的了?
理论上在不用作cache时,L1P可以放程序,L1D可以放数据。但是L1P/L1D默认是使能的。那么在启动时,是不能作为程序,数据空间的。只能通过memory overlay方式,在启动后,将L1 Cache disable,再将程序搬到L1P去。
需要注意的是,在不用作Cache时:L1P只能放程序,L1D只能放数据。
user3688025:
回复 Tony Tang:
1、cache freeze 功能是CCS的功能么?如何使用?
2、默认使能是在不使用函数CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K );进行配置时,也是使能的么?
那么禁用是通过哪个函数,或是什么方式。3、
memory overlay方式如何使用,L1D与L1P应该不能按地址访问吧4、
可以将程序搬到L1P,将数据搬到L1D中,那么之后的程序运行与数据的读写更新是通过什么方式,按问题3来将不可以按地址访问的、
Tony Tang:
回复 user3688025:
user36880251、cache freeze 功能是CCS的功能么?如何使用?
最终在芯片上运行的,肯定与CCS无关,Freeze指的是Cache的配置。
关于Cache的寄存器说明,见下面文档,所有Cache的操作都是通过这几个寄存器来实现的,其实很简单。
关于Cache操作的几个模式,见下面文档(文中的关于CSL函数就不要追究了,这些函数是根据以前的DSP带的CSL库来的,现在的芯片没有这种CSL库了)
user36880252、默认使能是在不使用函数CacheEnable(L1PCFG_L1PMODE_32K | L1DCFG_L1DMODE_32K );进行配置时,也是使能的么? 那么禁用是通过哪个函数,或是什么方式。
禁用就看有没有一个CacheDisable的函数,或者直接用配置上面文档里的寄存器
user3688025memory overlay方式如何使用,L1D与L1P应该不能按地址访问吧
Disable cache功能后就是RAM了,就可以按地址访问了。
user3688025可以将程序搬到L1P,将数据搬到L1D中,那么之后的程序运行与数据的读写更新是通过什么方式,按问题3来将不可以按地址访问的、
参考下面文档的 memory overlay和copy table.
最后问一下,为什么要将L1用作RAM?
user3688025:
回复 Tony Tang:
首先感谢你的回复与细心指导。
1、使用L1为RAM的原因:
起初是想把程序中的主要算法放在内部RAM中,有DSP库的汇编FFT函数,还有自己写的几个其他算法函数,Freeze模式只是可以把缓冲的程序固定在cache(不知道理解的对不对)而无法指定特定的几个函数一直在L1P中运行,或是在Freeze之前cache程序无法指定。
再加上项目中的数据量是比较大的,L2已经被占用的差不多,程序无法放到L2中,只能是打L1的主意了。
是不是我对cache的功能不够了解,是不是在使能cache的情况下,可以指定特定几个函数在L1P中运行,或是指定数据在L1D中。我在cmd中试过,也更改过FFT的汇编,都是无效的,应该是这种方式都是会按地址访问的,所以无法运行。
2、
我在如下wiki地址找到了你说的rcsl库,不知道 是不是你说的这个库,也是好久没的更新过了。processors.wiki.ti.com/…/QuickStartOMAPL1x_rCSL另外,在最新的processor_sdk_rtos_omapl138_4_02_00_09这个软件包中,找到了一个csl的库,这个库是使用makefile进行管理的,而不是CCS软件。..\pdk_omapl138_1_0_3\packages\ti\csl
Tony Tang:
回复 user3688025:
user3688025是不是我对cache的功能不够了解,是不是在使能cache的情况下,可以指定特定几个函数在L1P中运行,或是指定数据在L1D中。我在cmd中试过,也更改过FFT的汇编,都是无效的,应该是这种方式都是会按地址访问的,所以无法运行。
再看一下cache freeze和memory overlay,这两个是不同的方法。你直接在cmd里改到L1,当然不行了,连boot都起不来。默认是Cache,你boot时往Cache空间搬数据,这时连地址都没有,当然不会成功。
user3688025我在如下wiki地址找到了你说的rcsl库,不知道 是不是你说的这个库,也是好久没的更新过了。processors.wiki.ti.com/…/QuickStartOMAPL1x_rCSL另外,在最新的processor_sdk_rtos_omapl138_4_02_00_09这个软件包中,找到了一个csl的库,这个库是使用makefile进行管理的,而不是CCS软件。..\pdk_omapl138_1_0_3\packages\ti\csl
这个跟当前Cache使用问题无关。我说了忽略文内对CSL API调用的相关部分,关注Cache工作原理。
user3688025:
回复 Tony Tang:
在cmd中先把程序指定在DDR2中。 .text > DDR2
程序运行后,先disable L1D、L1P、L2
把程序通过copy_in从DDR2中搬运到L1P中,这里copy_in函数的参数COPY_TABLE是在cmd文件中的UNION中的table创建的吧?
在编译应用程序时,已经生成了map文件,每个函数的地址已经是固定的了,在搬运后运行进,是如何运行L1P中的函数而不是原有的DDR2中的程序的呢?
在cmd的编译过程中有几个警告,是什么原因?
在对应的C文件中使用copy_in函数。
请问,这样使用对不对?
但运行到这几个数学函数后,程序就会跑飞。