This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于dm6467的DSP侧代码优化的问题



我想用DSP侧的4字节指令来优化下我的代码,用到_mem4( ),把_mem4()当左值使用时,如

_mem4(pdst) = _subabs4(_mem4_const(p1), _mem4_const(p2) );

在linux上用cg6x编译不过,错误如下:

error: lvalue required as left operand of assignment

我是参考着tms320c6000 programmer guide来的

  • 根据提示,_mem4( )不能作为左值使用

  • 你好,你的结论从哪里得来?guide里没有说啊,另外如果_mem4( )不能作为左值使用的话,用什么办法来做每4个字节的内存修改?

  • 调这些算法最好在CCS中测试吧。另外尽量对齐,能用_amemXX就不要用_memXX。

  • 你好,首先dm6467的dsp核实c64x+的,不支持_amem4,另外ccs是调试算法的正确性,最后还要移到linux上编译a64p和x64p文件啊,我觉得ccs里的调试工作应该是可以放在linux上作的。

  • 而且我在ccs里也试过了,也是编译不过,错误为:

     error: expression must be a modifiable lvalue

  • 那就是你自己哪里设置的问题。C6000都支持_amem4,更不要说C64x+了。我一直都用DM6446,这指令用的好好的。你说不支持,请问是从哪里看到的?


  • 我在tms320c6000 program guide里看到的,c6000确实有支持,但c64x+就不支持了,以下是截图:

    抑或是我理解有问题,两张表是并集的关系?

     

  • 你好,你的意思是说编译器的设置有问题吧?我也觉得可能是这方面的原因,但不知道该去哪里找相关的文档,呵呵。想请教下!

  • 说实话,直接使用CCS自带的最基本的“Hello World”的例程,就可以正常编译了,这真没什么好说的。

  • 你好,这个问题我又研究了下,是这样的:

    1. 在ccs上,用dsp的c64x+的核,编译是ok的;

    2. 在linux中,编译算法的codec分为两部分:用cl6x和arm_v5t_le-gcc分别把源文件编译为.a64p和.av5t,用cl6x编译也是ok的,但用arm_v5t_le-gcc编就不行了;

    我理解双核平台开发时,ccs只是一个仿真和验证的工具吧,最终代码还是要在linux上集成的,在我们集成codec时,如果要用_mem4这些intrinsic,应该怎么办?希望得到您的指教,谢谢!

  • DSP端的算法只需用cl6x来编译,arm_v5t_le-gcc是用来编译ARM端的APP的。你用arm_v5t_le-gcc去编译DSP的算法当然会出错,而且也是没有意义的。

  • 你研究过linux中codec的编译吗,我发现编codec时arm和dsp的编译器都要参与,即arm_v5t_le-gcc和cl6x都要编一下源文件。这里我没有改编译的脚本,应该是编codec时本身就这样子。你可以试着在linux下编编codec中的例程试试,下面是编译log:

    # clv5T videnc_copy.c ...
    /opt/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc -c -MD -MF package/lib/lib/videnc_copy/videnc_copy.ov5T.dep -x c  -fPIC -Wunused -Wall -fno-strict-aliasing  -march=armv5t -Dfar=  -Dxdc_target_name__=GCArmv5T -Dxdc_target_types__=gnu/targets/arm/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_4_2_0 -O2  -I. -I/home/xieliyin/work/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/xieliyin/work/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/bios_5_33_03/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/xdctools_3_10_03/packages -I../../../../../..  -o package/lib/lib/videnc_copy/videnc_copy.ov5T videnc_copy.c

    cl64P videnc_copy.c ...
    /home/xieliyin/work/dvsdk_2_00_00_22/cg6x/bin/cl6x -c  -qq -pdsw225 -pden -pds=195  -mv64p -eo.o64P -ea.s64P  -Dxdc_target_name__=C64P -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_7_3_5 -O2  -I. -I/home/xieliyin/work/dvsdk_2_00_00_22/codec_engine_2_23_01/examples/ti/sdo/ce/examples/codecs/videnc_copy/../../../../../.. -I/home/xieliyin/work/dvsdk_2_00_00_22/codec_engine_2_23_01/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/xdais_6_23/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/dsplink-1_61_03-prebuilt/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/linuxutils_2_23_01/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/framework_components_2_23_01/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/biosutils_1_01_00/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/bios_5_33_03/packages -I/home/xieliyin/work/dvsdk_2_00_00_22/xdctools_3_10_03/packages -I../../../../../.. -I/home/xieliyin/work/dvsdk_2_00_00_22/cg6x/include -fs=./package/lib/lib/videnc_copy -fr=./package/lib/lib/videnc_copy -fc videnc_copy.c

    有问题欢迎交流,tel:15349237537

  • 如图,其中.av5t是arm侧编译器编出来的东西,a64p是cl6x编译出来的

  • 编译器的配置文件是可以修改的,基本的原则就是我前面的说的那样。你不要把ARM端和DSP端混在一起。这么说吧,在CCS中都可以直接生成codec和server,根本不需要任何linux的任何东西。

  • 谢谢,在linux上的编译只是一个集成工作吧?dsp 算法的开发还是需要放在ccs上来进行吧?我之前是做linux的,没做过双核平台,总想着绕过ccs,直接在linux上调试dsp算法,最近才感觉这条路好像走不通,才转到ccs上来搞。但是还有一个问题,以前在linux上调,视频处理的流程是这样的:input-> arm -> codec engine -> dsp -> codec engine -> arm-> ouput ,我可以直观的看到输出视频的处理结果以验证算法对不对,但在ccs上单调dsp核,应该怎么搞,算法的输入输出分别是什么?

  • DSP也是可以访问输入输出的,否则像DM642这些单DSP的芯片就没法使用了,基本方法应该就是CCS+仿真器。你先在CCS上实现视频的loopback,其它的就好办了。