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.

[FAQ] [参考译文] [常见问题解答] C28x CPU - IF 语句的调试

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/713970/faq-c28x-cpu---debug-of-if-statements

在调试 if 语句时、为什么会始终执行"if"中的语句?

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

    如果您正在调试具有"if"语句的 C2000代码、则无论条件的计算结果如何、"if"语句似乎总是被执行。 例如、考虑以下代码:

    void foo (int *p)
    {
    if (x =*p)
    {
    执行操作...}
    
    } 


    在这种情况下、无论"if"条件评估为什么、"do st填 充"都可能始终执行。

    要了解这里发生的情况、请仔细查看 CCS 调试器中的汇编指令或编译器生成的汇编文件。 如果有一个 MOVB 指令、那么这是一个条件指令、所以只有在条件为真时才会发生移动-因此指令本身会检查"if"语句。

    例如、考虑指令 MOVB *-SP[3]、#0x10、EQ
    MOVB 指令中的第3个操作数是条件(EQ、NEQ、GT 等)。 仅当条件相等时、该指令才会将值0x10移动到堆栈。

    所以指令本身将一直执行(这就是为什么在调试器中单步执行代码时看起来会令人困惑)、但是指令的结果取决于条件。 如果条件为真、则移动发生、否则不发生。

    这个指令是单周期的、比使用一个分支更加高效。

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