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