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.
部件号:LAUNCHXL-F2.8377万S
工具/软件:TI C/C++编译器
您好,
我正在尝试加快C代码的速度。 所以我试着在汇编器中写一个函数来计算我的控制单元的操作变量。 我还用c代码计算了它,并用示波器比较了计算的时间。 实际上,我认为汇编器代码比C代码快,但在我的情况下,C代码的速度更快。
首先,为什么编译器会更改我在函数中编写的assmebler代码? (我是以拆分方式查看的)
其次,是否有可能通过更改编译器的设置或类似的任何操作来使C代码仍然更快?
拆分样式中的每一行是否需要SYSCLK的1个周期,例如SYSCLK =200MHz (=5ns),而10行汇编程序代码需要50 ns? (是否有方法查看热化所需的时间?)
我需要哪些选项才能更快地获取代码?
这是我比较的代码:
C代码:
//仅定义,不是比较 float uk_1的一部分= 1.1 3.3 4.4 6.6 7.7 ; float e_k = 2.2 ; float e_k1=ASM; float e_k2=ASM; float 5.5 ; float Q1=ASM; float test_q2; //比较代码 test_asm = uk_1 +e_k*Q0+e_k2*Q1+e_a;Q1;
这是assmebler代码
// still in c extern float asmfunc_Regler_PID_1 (float uk,float e_k,float e_k1,float e_k2,float q0, 浮点Q1,浮点Q2);
//比较部件 test_asm = asmfunc_Regler_PID_1 (1.1 ,2.2 ,3.3 ,4.4 ,5.5 ,6.6 ,7.7); .global _asmfunc_Regler_PID_1 _asmfunc_Regler_PID_1: MOV32 R5H,*-SP[4];最大浮点,Wert堆栈, YF32 R5EK;5H
MOV32 R6H,*-SP[6];liest vorletzen übergabewert aus stack MPYF32 R6H,R6H,R2H;Q1*EK1 ADDF32 R5H,R5H,R0H;uk1 + Q0*EK parallel add MOV32 R7H,*-SP[8];liest vorzen übergabewert R3H stack ,R3Q2*R3H ADDF32 R6H,R6H,R5H;(uk1 + Q0*EK)+ Q1*EK1 无操作 ADDF32 R0H,R7H,R6H;((uk1 + Q0*EK)+ Q1*EK1)+ Q2*ek2| R0H ist der Rückgabewert LRETR
我的编译器设置是:
-v28 -ml -mt --float_support=fpu32 --cla_support=cla1 --vcu_support=vcu2 --tmu_support=tmu0
--opt_for speed=2 --include_path="C:/bugy/ti/ccsv6/tools/compiler/ti-CGT-C2000_C2000_SX.4.LTS/include"<xmt-block0>2000 15.12 --
include_path="C:/bugy/ti/xdctools_3_32_01_22_core/packages"--include_path="C:/bugy/ti/controlSUITE/PowerSuite/v_1_06_00_00/packages"--
include_path="C:/bugy/ti/controlSUITE/libs/app_libs/digital_POWER/f28x7x_v 1.0 /C_macros"--
include_path="C:/bugy/ti/controlSUITE/libs/app_libs/digital _power /f28x7x_v 1.0 /include"--
include_path="C:/bugy/ti/controlSUITE/libs/app_libs/sfra/v1_10_00_00/Float/include"--
include_path="C:/bugy/ti/controlSUITE/libs/matics/IQmatht/V160/include"--
include_path="C:/bugy/ti/controlSUITE/device_support/F2837xS/V130/F2837xS_headers/include"--2837--
include_path="C:/bugy/ti/controlSUITE/device_support/F2837xS/V130/F2837xS_common/include"--2837--
advances:performance=all -g --define=CPU1 --define=arm_Math_CM4 --define=_LAUNCHLX_F2.8377万S --display_error_number --diag_warning=225 -k --ASM_listing
您好,Jonas:
编译C代码时,编译器将生成同名的.asm文件;例如,编译"fred.c"将生成"fred.asf"。 如果您编辑"fred.asf",则重新编译"fred.c",将会创建一个新的装配体文件,覆盖您所做的任何更改。 不确定这是否在您的第一个问题后面。
编译器设置表示您要求优化器优先于代码大小,但我看不到正在调用优化器。 要执行此操作,您需要指定-o编译器选项,其中包含一个表示优化级别的数字。 有5个级别可供选择,还有一些其他选项。 最佳资源是C编译器用户指南(spru514)中的第3章,此处...
通常,手工编码的组件将不执行生成的C代码。 如果您打算实施一个简单的差异公式或PID (如代码中所暗示的那样),您可能需要检查C2000Ware中的新数字控制库,它包含F2.7377万x兼容C和汇编版本。
我希望这能有所帮助。
此致,
Richard