TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] 编译器/LAUNCHTXL-F2.8377万S:汇编器与C代码|编译器设置

Guru**** 2046970 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/574703/compiler-launchxl-f28377s-assembler-vs-c-code-compiler-settings

部件号: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