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.

[参考译文] CODECOMPOSER:如果输入的语句没有满足条件,则输入该语句

Guru**** 2554160 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1079825/codecomposer-if-statement-entered-without-condition-being-met-to-enter-it

部件号:CODECOMPOSER

我想我会变得疯狂...

 当 IF 条件不满足时(所有变量都全局定义为 UINT32_t),如何可能触发此断点?

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

    您好,戴尔,

    此设备在哪个 TI 设备上运行?

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

    cc2640f128和一个 progam,已经运行多年,我只是添加了一小部分代码

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

    结果,我最近不得不提高编译程序的优化级别,以适应我的可用内存。

    在较高的优化级别,似乎并非所有“允许”在代码行上设置断点的情况都会导致代码在代码的该点实际中断(WOW)。

    我通过在 IF 语句之后放置一个断点来解决这一问题,然后在这第二个断点处断开后,很明显,如果 IF 语句事实上没有设置为零,那么在我的主体中设置为0的两个变量就会被设置为零。 因此,执行从未真正进入这种状况。

    是否有人知道代码行可以放置在我的代码中的任何位置,以保证可以在该代码行上设置断点;如果断点在该行上触发,则代码执行实际上就在那里 (不仅仅是“粉碎”在那里破碎 ,也不像我的情况那样真正在那里破碎:) ?

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

    这不是确定性的,但下面的代码可以帮助我找到一个在满足条件时实际中断的断点:

    函数断点()简单返回 tdif+1,因此6个添加的行不会更改 tdif 的值。

    只有一个 tdif=断 点()-1;行 无法获得真正的断点,因此我尝试了其中的6个,它运行正常,我没有时间隔离此解决方案。

    编辑:我刚刚找到了另一种方法来使代码在那里正确断开。

    我在变量'expectingbackfromexion'上写了一个'hardware watchpoint'。

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

    我可以对可能发生的事情有所了解。  考虑这个有争议的例子……

    int fxn(int arg)
    {
       if (arg)
       {
          return 10;
       }
       else
       {
          return 20;
       }
    }

    我使用 TI ARM 编译器来构建它。  但是,就本例而言,这种细节并不重要。  其他编译器 可以 生成类似的代码。  这是在这种情况下生成的装配体代码...

    fxn:
    ;* --------------------------------------------------------------------------*
            CMP       A1, #0                ; [DPU_V7M3_PIPE] |5|
            ITE       NE                    ; [DPU_V7M3_PIPE]
            MOVNE     A1, #10               ; [DPU_V7M3_PIPE] |5|
            MOVEQ     A1, #20               ; [DPU_V7M3_PIPE] |5|
            BX        LR                    ; [DPU_V7M3_PIPE]

    由于 IT 指令 的使用方式,此代码中没有条件分支。  所有这些指令都将执行。  根据传入的 arg 值, 其中一个 MOV 指令不起作用。  假设您在其中一个 return 语句上设置了断点。  你会成功的。  但是,与这种回报相关的条件在特定时刻可能不会激活。

    这是优化如何导致调试困难的示例。  有关此问题的详细信息,请参阅“ 调试与优化权衡”一文。

    [引用用户 ID="294404" url="~ë/support/tools/cod-composer-studio -group/CCCS /f/code-composer-studio -forume/1079825/codecodposer-if-status-enter-without condition-bee-enter-it/3996562#3996562"]代码行中的任何人都可以知道代码的行/断点,并且可以在我的代码行中设置中,如果代码行中的任何人都能在代码行上,且代码真的可以在代码行中被放置在断点处[

    保证?  不是。 但我可以提出一个建议,它会经常发挥作用,值得尝试。  添加执行 nop 的 ASM 语句...

    int fxn(int arg)
    {
       if (arg)
       {
          asm(" nop");
          return 10;
       }
       else
       {
          asm(" nop");
          return 20;
       }
    }

    一般而言,避免使用 ASM 语句。  我认为您只能临时使用它们,作为一种帮助调试的方法。  在这种情况下,我认为 ASM 语句正常。  生成的代码执行您所期望的分支。  您可以在 ASM 语句上设置断点。  这就是它将在很多时间内得到解决的方式。  但没有人能保证它始终有效。

    [引用 userid="294404" url="~ë/support/tools/code-composer-studio -group/CCCS /f/code-composer-studio -forume/1079825/codecodposer-if-status-enter-abus-condition-bean-enter-it/3996656#3996656"我将变量/预期值写在“备份”上。

    我认为这是一个比使用 ASM 语句更好的解决方案。  尽管如此,了解多种方法是很好的。

    谢谢,此致,

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="4373”url="~ë/support/tools/cod-composer-studio -group/CCCS /f/code-composer-studio -forume/1079825/ codif-ex-status-entered-without condition-bean-enter-it/3998132#3998132"]添加语句[引用该语句]

    太棒了!! 我认为这将是我 在调试战争后将其撤回时从新的断点库部署的第一个断点武器。

    谢谢,