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.

[参考译文] 编译器/TMS320F2.8379万D:GPIO引脚控制-代码优化

Guru**** 2562120 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/592681/compiler-tms320f28379d-gpio-pin-control---code-optimization

部件号:TMS320F2.8379万D

工具/软件:TI C/C++编译器

我有一个以400 kHz运行的例程,它可以切换多个IOS。

我已经了解到,中断进入和退出需要10个以上的周期,因此我需要优化中断中的实际代码。

以下代码需要多次循环。  可以采取哪些措施来减少循环次数?  每个指令/周期为5 ns,但在400 kHz时,它是CPU总时间的0.2 %。

#define Z_write  GpioDataRegs.GPADAT.bit.GPIO11

430        Z_write = enc_emu.z_VEC[enc_emu.which _vector][enc_emu.counter_10kHz][1]

       C$L23:

0085a9:  761F0445   MOVW        DP,#0x445

0085ab:  2D03       MOV         T,@0x3

0085ac:  8F4110A3   MOVL        XAR5,#0x0110a3

0085ae:  3550       MPYB        ACC,T,#80

0085af:  56.01万A5   附加        @XAR5,符合

0085b1:  3B01       SETC        SXM

0085b2:  761F0442   MOVW        DP,#0x442

0085b4:  5603.012万   MOV         ACC,@0x20 <<1.

0085b6:  07A5       Addl        ACC,@XAR5

0085b7:  8AA9       MOVL        XAR4,@符合

0085b8:  761F01FC   MOVW        DP,#0x1fc

0085ba:  CD00F7FF   和         AH,@0x0,#0xf7ff

0085bc:  92CC       MOV         AL,*+ XAR4[1]

0085bd:  9001       ANDB        AL,#0x1

0085be:  FF8A       LSL         AL,11

0085bf:  CAA8       或          AL,@AH

0085c0:  9600       MOV         @0x0,AL

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果性能不够好,则应确保已启用优化。  编译器生成选项是--opt_level=number,其中number可以是0到4。  数字越高,意味着优化越多。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的帮助。

    启用-o2优化在周期数方面对输出组件几乎没有任何作用。

    让我重提我的问题:这是否是写发言的最有效方式? 例如,简单的1-d数组是否比我的2-array快(尽管数组大小为[2][40])。 是否存在与访问结构元素相关的周期罚分?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    考虑原始源代码...

    [报价用户="Tomas Sadilek1"]

    #define Z_write  GpioDataRegs.GPADAT.bit.GPIO11

    430        Z_write = enc_emu.z_VEC[enc_emu.which _vector][enc_emu.counter_10kHz][1]

    [/引述]

    使事情更快的一个好方法是将变量驻留在寄存器而不是内存中。  虽然编译器可以将结构成员放在寄存器中,但它更有可能将局部变量放在寄存器中。  因此,请尝试重写此代码以使用尽可能多的局部变量(甚至函数参数)。  我不能保证这会改善。  但这是值得尝试的。

    谢谢,此致,

    -George