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.

[参考译文] TMS320F28379D:执行一行代码后的变量变化

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1084879/tms320f28379d-variable-change-after-executing-one-line-of-code

部件号:TMS320F28379D

您好,

我在执行此代码行时有一个奇怪的行为:

div = (float)(ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV << 1);

当我越过这条线时,变量 div 为4.0

当我在之后执行此代码行时

sysclkToInClkError = ((mult / div) - ((float) ctr1 / (float) dTMR2_INP_CLK_CTR));

div 发生变化,它必须保持不变,但 div =8.93...

请您找出问题所在。

完整内容如下:

        mult = (float) (pCfg->kCC.u16SysPllMult_Imult) + (float) (pCfg->kCC.u16SysPllMult_Fmult) / 4;

        if (!ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV)
        {
            div = 1;
        }
        else
        {
            div = (float)(ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV << 1);
        }

        /* compute the error */
        sysclkToInClkError = ((mult / div) - ((float) ctr1 / (float) dTMR2_INP_CLK_CTR));

此致,

S.Tarik

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

    你(们)好
    您使用的优化级别是什么? 是否可以将其设置为“OPT=OFF”并尝试隔离问题?  

    您能否分享这部分代码的反汇编?  

    山塔努

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

    我正在使用优化级别0-Register 优化。

    当我禁用优化时,它看起来很好,

    我将与大家分享优化组合:

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

    你(们)好
    由于它适用于“选择关闭”,我认为这不是您的代码实施或 FPU32本身的问题。 看起来更像是编译器问题。 将相应地重新分配。

    山塔努

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

    请将编译器构建选项更改为导致问题的编译器构建选项,包括--opt_level=0。  就在现在,忽略 div 的意外变化。  运行到该功能的末尾。  该函数计算的所有最终结果是否正确?

    对于包含有问题源代码行 的源文件,请按照本文“如何提交编译器测试用例”中的说明进行操作。

    谢谢,此致,

    乔治