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.
工具/软件:Code Composer Studio
我有一个应用程序使用CLA对未签名的32位值(计时器/计数器捕获事件)进行大量处理。 基于CLA的拆卸和使用仿真器逐步执行代码,CCS似乎使用CLA的MCMP32指令不正确。 文档显示,MCMP32指令比较了两个32位带符号整数,但CCS生成的代码无法正确处理无符号32位值以正确使用带符号的比较。 下面是CLA源代码,后面是一些反汇编视图。 我测试了多个值的组合,如果未能正确比较无符号32位值,则使用有符号比较会产生什么结果。
我正在使用CCS版本DSP.DSP 0.0.0013万 和7.2 的一个示例。
源代码:
//Test1 = 3,Test2 = 2147483652; 是(测试失败,不正确的无符号32位比较)
//测试1 = 3,测试2 = 2147483651; 是
//测试1 = 3,测试2 = 2147483650; 否 (测试通过,纠正无符号32位比较)
//测试1 = 3,测试2 = 2147483649; 否
//测试1 = 2,测试2 = 2147483651; 是
//测试1 = 2,测试2 = 2147483650; 是
//测试1 = 2,测试2 = 2147483649; 否
//测试1 = 2,测试2 = 2147483648; 否
//Test1 = 1,Test2 = 4294967295; 是
//Test1 = 1,Test2 = 4294967294; 是
//测试1 = 1,测试2 = 2147483651; 是
//Test1 = 1,Test2 = 2147483650; 是
//测试1 = 1,测试2 = 2147483649; 是
//测试1 = 1,测试2 = 2147483648; 否
//测试1 = 1,测试2 = 2147483647; 否
UINT16_t测试0;
UINT32_t测试1;
UINT32_t测试2;
__mdebugstop();
Test0 = 0;
test1 = 1;
test2 = 2147483649;
IF (Test1 > Test2)
{
Test0 = 1; //这只是一个故障指示器;它不会影响问题。
}
__mdebugstop();
使用添加的备注拆分Test1 = 1和Test2 = 2147483649:
0000b5d0: 7F60万 MDEBUGSTOP
0000b5d2: 7FA0万 MNOP
0000b5d4: 7FA0万 MNOP
0000b5d6: 7FA0万 MNOP
0000b5d8: 7FA0万 MNOP
0000b5da: 7840万 MMOVIZ MR0,#0x0 // Test0 = 0。
0000b5dc: 75C09D50 MMOV16 @0x9d50,MR0
0000b5de: 7840万 MMOVIZ MR0,#0x0 // Test1 = 0x0.0001万 = 1。
0000b5e0: 7880.0001万 MMOVXI MR0,#0x1
0000b5e2: 74C09D4C MMOV32 @0x9d4c,MR0
0000b5e4: 7840.8万 MMOVIZ MR0,#0x8000 // Test2 = 0x8000.0001万 = 2147483649。
0000b5e6: 7880.0001万 MMOVXI MR0,#0x1
0000b5e8: 74C09D4E MMOV32 @0x9d4e,MR0
0000b5ea: 7842.8万 MMOVIZ MR2,#0x8000
0000b5ec: 7841.8万 MMOVIZ MR1,#0x8000
0000b5ee: 7CA0.0004万 MXOR32 MR0,MR1,MR0 // MR0 = Test2 XOR 0x800万 = 0x0.0001万。
0000b5f0: 73D09D4C MMOV32 MR1,@0x9d4c,UNCF
0000b5f2: 7CA0.0019万 MXOR32 MR1,MR2,MR1 // MR1 =测试1 XOR 0x8000000000 = 0x8000.0001万。
0000b5f4: 7F20.0004万 MCMP32 MR0,MR1 //根据0x0.0001万 - 0x8000000001设置标志,设置NF = 1。
0000b5f6: 7FA0万 MNOP
0000b5f8: 7FA0万 MNOP
0000b5fa: 7FA0万 MNOP
0000b5fc: 7983.0012万 MBDCNDD 0x12,GEQ // Test1 > Test2? BRANCH (分支),如果NF = 0,则不采用BRANCH (参见上文)。
0000b5fe: 7FA0万 MNOP
0000b600: 7FA0万 MNOP
0000b602: 7FA0万 MNOP
0000b604: 7840万 MMOVIZ MR0,#0x0 // Test0 = 1。 未正确执行比较。
0000b606: 7880.0001万 MMOVXI MR0,#0x1
0000b608: 75C09D50 MMOV16 @0x9d50,MR0
0000b60a: 7FA0万 MNOP
0000b60c: 7FA0万 MNOP
0000b60e: 7FA0万 MNOP
0000b610: 7FA0万 MNOP
0000b612: 7FA0万 MNOP
0000b614: 7F60万 MDEBUGSTOP
使用添加的备注拆分Test1 = 2和Test2 = 2147483649:
0000b5d0: 7F60万 MDEBUGSTOP
0000b5d2: 7FA0万 MNOP
0000b5d4: 7FA0万 MNOP
0000b5d6: 7FA0万 MNOP
0000b5d8: 7FA0万 MNOP
0000b5da: 7840万 MMOVIZ MR0,#0x0 // Test0 = 0。
0000b5dc: 75C09D50 MMOV16 @0x9d50,MR0
0000b5de: 7840万 MMOVIZ MR0,#0x0 // Test1 = 0x0.0002万 = 2。
0000b5e0: 7880.0002万 MMOVXI MR0,#0x2
0000b5e2: 74C09D4C MMOV32 @0x9d4c,MR0
0000b5e4: 7840.8万 MMOVIZ MR0,#0x8000 // Test2 = 0x8000.0001万 = 2147483649。
0000b5e6: 7880.0001万 MMOVXI MR0,#0x1
0000b5e8: 74C09D4E MMOV32 @0x9d4e,MR0
0000b5ea: 7842.8万 MMOVIZ MR2,#0x8000
0000b5ec: 7841.8万 MMOVIZ MR1,#0x8000
0000b5ee: 7CA0.0004万 MXOR32 MR0,MR1,MR0 // MR0 = Test2 XOR 0x800万 = 0x0.0001万。
0000b5f0: 73D09D4C MMOV32 MR1,@0x9d4c,UNCF
0000b5f2: 7CA0.0019万 MXOR32 MR1,MR2,MR1 // MR1 =测试1 XOR 0x8000000000 = 0x8000000002。
0000b5f4: 7F20.0004万 MCMP32 MR0,MR1 //根据0x0.0001万 - 0x8000000002设置标志,设置NF = 0。
0000b5f6: 7FA0万 MNOP
0000b5f8: 7FA0万 MNOP
0000b5fa: 7FA0万 MNOP
0000b5fc: 7983.0012万 MBDCNDD 0x12,GEQ // Test1 > Test2? BRANCH (分支),如果NF = 0,则将采用BRANCH (参见上文)。
0000b5fe: 7FA0万 MNOP
0000b600: 7FA0万 MNOP
0000b602: 7FA0万 MNOP
0000b604: 7840万 MMOVIZ MR0,#0x0 // Test0 = 1已跳过。
0000b606: 7880.0001万 MMOVXI MR0,#0x1
0000b608: 75C09D50 MMOV16 @0x9d50,MR0
0000b60a: 7FA0万 MNOP
0000b60c: 7FA0万 MNOP
0000b60e: 7FA0万 MNOP
0000b610: 7FA0万 MNOP
0000b612: 7FA0万 MNOP
0000b614: 7F60万 MDEBUGSTOP
请按照如何 提交编译器测试用例一文中的说明提交测试用例。
谢谢,此致,
-George
e2e.ti.com/.../cla_5F00_hv_5F00_task.pp.txt
TMS320C2000连接器PC v 16.9 3.
****为项目OBC DSP原型软件构建配置调试****
"C:\\ti\\ccsv7\\utils\\bin\\gmake "-k -j 8 Source/CLA/CLA_hv_task.obj -O
'正在构建文件:../Source/CLA/CLA_hv_task.CLA'
'调用:C2000编译器'
Oc:/ti/Ccsv7/tools/compiler/ti-CGT-C2000_VCU_support=v28 16.9 -ml -mt --CLA_support=cla2 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu0 -ooff --opt_for _cla_support=fu32 --sp_applic/spdspds/trunplate/spdspd/srack/frack/ds原型软件-应用程序基线/spdps=7.7627万/spdspdsp/dsp/dsp/dps-spdsp/spdspdsp/f12 include_path="D:/projects/P0.7627万板载充电器/SVN/Apple/Trunk/OBC DSP软件/OBC DSP原型软件/Source/Comm"--include_path="D:/projects/P0.7627万板载充电器/SVN/TRUN/OBC DSP软件/OBC DSP原型软件/Source/Comm"--include_path=O0.7627万 DSP软件/OBC/SO/SO/STUND/原型充电器-SVN/SVDBC/OBC原型DSP原型DSP软件/ODB/ODBS-电路板应用程序/O0.7627万 include_path="D:/projects/P0.7627万板载充电器/SVN/Apple/Trunk/OBC DSP软件/OBC DSP原型软件/Source/TI系统"--include_path="C:16.9 /ti/C2000/C2000Ware_1_00_01_00/device/f2800_cla_scla_scla_headers/include_path="-dav_scn_scla_scla/pre-f_scla_scn_scn_scl/scl_scl_scl_scla/sp_scl_background-f_crack_scl_scl_scl_scl_scl_scl_zh_/f_comb_scl_scl_scl_/crack_scl_scl_background-/f_scl_scl_crack_scl_/f_background-/f_scl_crack_scl_crack_scl_background-/f_scl_scl_scl_scl_scl_background-/f_scl_</s>2000 2800
'完成的建筑:../Source/CLA/CLA_hv_task.CLA'
''
****构建已完成****
感谢您提交测试案例。 我在 SDOWP系统中提交了CodeGen-3721以对此进行调查。 请随时使用我签名中下面的SDOWP链接进行关注。
谢谢,此致,
-George