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.8069万F:TI 16.9 .1.LTS -简单IF语句在特定优化下不起作用。

Guru**** 2558250 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/587350/compiler-tms320f28069f-ti-16-9-1-lts---simple-if-statement-does-not-work-under-particular-optimizations

部件号:TMS320F2.8069万F
主题中讨论的其他部件: MSP430F5529

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

您好,

刚发现我的应用程序有问题,经过检查,编译器似乎在做一些非常奇怪的事情。

器件为TMS320F2.8069万F,编译器为CCSV 7.1 .0.0.0016万 上的16.9 .1.LTS。 -O = 2

请注意,我的-O = 2。  这是InstaSPIN所必需的。

因此,代码始终将此特定IF语句的值计算为true:

为了参考,枚举值为:

EST_State_Idle = 0x01;

EST_State_MotorIdentified = 0x0C;

变量 sInstaSPIN.sStates.estState位于0x0.0008万CB3 (即0x008C40 + 0x73)

我可以设置-O =0,应用程序逻辑工作正常。

任何帮助都将是非常好的,谢谢。

太棒了!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    编译器已将IF语句的两个分支转换为条件指令。 请注意两个MOVB说明中的"EQ"和"NEQ"。 CPU将执行这两个指令,但根据状态寄存器的值,它将放弃其中一个指令的效果。 在调试器中逐步执行时,两个指令看起来都在执行中。 这是否与您看到的内容相符? 除了调试器中的奇怪行为之外,程序结果是否存在其他问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    因此,这个问题似乎也出现在其他设备上。  刚才我遇到了MSP430F5529的问题。  再次使用16.91 .LTS编译器。

    对于TMS320问题,我使用的是具有 -O=2的XDS100V2 +定制PCB + 7.1 .0.0.0016万

    对于MSP430,I正在使用 具有-O=0的MSPFET +定制PCB + 7.1 .0.0.0016万。

    这一次我给你们做了一个视频: https://youtu.be/Q5icRvfPqAE

    希望能顺利通过,以便看到大问题。

    谢谢

    太棒了!

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

    因此,此问题似乎也出现在其他设备上。  刚才我遇到 了MSP430F5529的问题。[/QUOT]

    MSP430 CPU没有任何条件指令。  所以你一定会看到一些不同的东西。

    这次我给你们做了一个视频: https://youtu.be/Q5icRvfPqAE

    感谢您制作视频。  很遗憾,我无法查看。  权限似乎存在问题。  我在下面附上一个屏幕截图。

    谢谢,此致,

    -George

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

    对此很抱歉,YouTube拒绝了我的链接。

    以下是新链接: https://youtu.be/J52MFIioTE4

    我想知道这是否更像是CCSV7问题而不是编译器问题?

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

    嗯,我怀疑这是编译器的问题。  该代码非常简单。  一切都是可能的。  但编译器在类似的代码上进行了大量测试。  多年来,它一直以同样的方式处理这种代码,没有任何问题。  

    可能是这样的情况,通过这些语句,u8Test2的值不在堆栈中,而是在寄存器中。  但调试器(CCS)会不断显示堆栈位置,而不是寄存器。  如果您在接近函数末尾时一直浏览代码,一切看起来是否合理?

    谢谢 ,此致,

    -George

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

    我在另一个TMS320项目中再次遇到这个问题。 我现在是100 % ,我确信它不是编译器,因为我们刚刚使用16.9 1对一个项目进行了重新鉴定,并且没有异常。

    我现在确定CCS的调试功能存在随机错误。

    我将关闭此问题,当我能够获得另一个良好的画面时,我将与CCS人员打开一个新问题。

    谢谢你们!

    太棒了!