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 - Debug of if statements

While debugging an if statement, why is the statement within the "if" always executed?

  • If you are debugging C2000 code that has "if" statements, it may seem like the "If" statements are always executed, no matter what the condition evaluates to. For example, consider this code:

    void foo(int *p)
    {
       if(x == *p)
       {
          do stuff ...
       }
    }


    In this case, it may seem like "do stuff" is always executing no matter what the "if" condition evaluates to.

    To understand what is happening here, look closely at the assembly instructions either in the CCS debugger or the assembly file generated by the compiler. If there is a MOVB instruction, then this is a conditional instruction, so the move will only happen if the condition is true - and thus the instruction itself does the check for the "if" statement.

    For example, consider the instruction MOVB *-SP[3], #0x10, EQ
    The 3rd operand in the MOVB instruction is the condition (EQ, NEQ, GT etc). This instruction will move the value 0x10 to stack only if the conditional equal is true.

    So the instruction itself will always execute (which is why things may look confusing when stepping through code in the debugger), but the outcome of the instruction is dependent on the condition. If the condition is true, then the move occurs, otherwise it does not.

    This instruction is single cycle, and much more efficient than using a branch.