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**** 1689980 points
Other Parts Discussed in Thread: BQ79616
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1393498/codecomposer-bug-optimizer-incorrectly-changing-compiler-behavior

器件型号:CODECOMPOSER
主题中讨论的其他器件:BQ79616

工具与软件:

您好、CCS 开发人员:

我在 CCS 中遇到了与优化器有关的错误。 我正在使用 TI 的 BQ79616示例代码、使用优化器时、调试器会重复 代码行、最终代码会被毁、因为这非常依赖于时间。 我提供的第一个剪辑是使用级别3的优化器(这是我遇到问题时的默认设置)。 第二段内容是关闭优化器、说明 编译器的行为方式。

e2e.ti.com/.../WithOptimizer.mp4e2e.ti.com/.../WithoutOptimizer.mp4

在没有优化器的视频中、可以看到调试器没有跳回。 我不知道什么原因这种行为,但 Ki 建议我做了一个单独的帖子为它。

谢谢、

Jeremy

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

    Jeremy、您好!

    感谢观看视频。 请注意、优化越高、对源代码级调试的负面影响越大。 优化级别3较高。

    请访问 https://dev.ti.com/tirex/explore/node?node=A__AEm7LJjS34iFPa5fpT7ttQ__ccs_devtools__FUz-xrs__LATEST

    [quote userid="613497" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1393498/codecomposer-bug-optimizer-incorrectly-changing-compiler-behavior 最终毁了代码,因为它非常依赖于时间

    现在、如果不考虑源码行步进、代码是否实际上会按预期运行? 这是一个更大的问题。

    谢谢

    Ki

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

    优化器开启时、代码未按预期运行。 此函数是评估板的唤醒过程、但该板未唤醒。 是的、级别3为高电平、但它也是 CCS 的默认值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    优化器开启时、代码未按预期运行。 [报价]

    好的、感谢您的澄清。 我将该线程提请编译器专家注意。

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

    通过 C 代码、您可以控制事件发生的顺序。  但您无法控制时序。  那么、事情是按错误的顺序发生的吗?  或者、它们是否按正确的顺序发生、但时间不正确?   

    谢谢。此致、

    -George.

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

    事情正在以错误的顺序发生。 正如您在 优化视频中看到的、 调试器跳回一行、然后完全退出。

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

    这个...

     调试器跳回一行

    调试优化代码时并不罕见。  单靠这一点并不意味着代码执行顺序错误。   

    然后完全退出即可

    这是什么意思?  也许该函数会返回、但从未发生过。  这就是您的意思吗?

    一般而言、如果某项在优化和非优化的构建之间以不同的顺序执行、则需要按顺序清楚地确定该差异。

    谢谢。此致、

    -George.

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

    这样、函数应该会像这样运行。 我单击下一行、它转到下一行。 实现的。 我单击下一行、它返回一行。 我单击下一行、它转到下一行。 当我尝试再次单击下一行时、下一行将变灰。 我认为这在视频中很容易看到。 可能不清楚。 左侧的视频是优化器、右侧的视频没有优化器。  

    这两个视频的功能完全相同,区别在顺序是相当清楚的! 我点击同一个按钮、会发生不同的事情。

    当我说它完全退出时、调试器... 停止? 我不是一名编码专家、这是德州仪器(TI)提供的代码、作者是 Vince Toledo。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="613497" url="~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1393498/codecomposer-bug-optimizer-incorrectly-changing-compiler-behavior/5330844 #5330844"]。 我单击下一行、它返回一行。 我单击下一行、它转到下一行。 当我尝试再次单击下一行时、下一行将变灰。 我认为这很容易在视频中看到。

    同样、请参阅我之前引用的链接:

    https://dev.ti.com/tirex/explore/node?node=A__AEm7LJjS34iFPa5fpT7ttQ__ccs_devtools__FUz-xrs__LATEST

    具体而言、这句话是:"单步执行是否会按照编写的准确方式执行代码? 或者、它是否以看似随机的顺序跳过"

    您在视频中针对优化情况所展示的是尝试对高度优化的代码进行源代码行调试时遇到的问题的示例。 基本上、由于优化代码的性质、调试器在这方面会存在问题。  

    代码优化得越多、调试器准确显示源码行调试信息的能力就越差。 这是已知和预期的折衷。

    上面链接中引用的另一句话: 基本问题是编译器为了使代码运行得更快(优化)而做的事情可能同时使代码更难调试

    禁用优化时、源码行调试效果很好、正如您在视频中证明的那样。 当您打开优化时、它看起来是一个螺丝、因为优化的代码会在源码行调试方面使调试器混淆。 但这并不意味着代码未正确运行

    基本上、当代码按这种程度进行优化时、您就不必依赖源代码行调试。 所以请忽略它。 请勿打扰源步进。 因此忽略您的第一个视频。 实际上、视频中的行为是预期行为。

    专注于程序是否正常运行-没有源步进或查看变量。  

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

    好的、很酷。 很高兴没有错误。  

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

    我不能肯定地说没有错误。 但我可以说、您在视频1中展示的内容不一定是优化代码的错误。

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

    好的、如果您想进一步探索、我只使用 BQ79616示例代码  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、如果您想进一步了解、我刚刚使用的是 BQ79616示例代码 

    我对这段代码的了解不多、无法对其进行评论。  

    忽略针对优化代码的源级调试(因为无法按预期可靠地调试)、否则您如何确定代码运行不正确?

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

    概括来说、代码使 BQ79616评估板正常工作。 它是一个测量电池电压的芯片。 我知道代码不起作用、因为评估板无法唤醒/开启。 如果没有优化器、电路板会按照设计唤醒和读取电池电压。

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

    感谢您的澄清。 这超出了我的专业领域。 我将遵从器件专家讲述。

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

    Jeremy、您好!

    这似乎是 SCI 问题。 根据优化设置、SCI 发送器的行为有所不同。 如果这不正确、请告诉我。

    当在示波器上启用和禁用优化时、您是否能够观察来自 C2000器件的 SCI 消息?  您是否注意到了任何差异? 如果 SCI 引脚不可能出现、可以模仿 F28器件其他引脚(您可能能够探测)上引脚的行为。

    谢谢!

    Luke

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

    抱歉、Luke、我无法再为这个问题分配时间。  

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

    Jeremy、您好!

    我要关闭这个线程。

    谢谢!

    Luke