工具/软件:Starterware
你(们)好
对于我自己的项目、我将优化级别更改为关闭、程序运行到故障 ISR 中、重新编译到优化级别2、运行良好。 有什么想法吗?
为什么默认为 O2、速度与尺寸之间的权衡设置如何? 我应设置什么编号?
此致!
Ping
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.
工具/软件:Starterware
你(们)好
对于我自己的项目、我将优化级别更改为关闭、程序运行到故障 ISR 中、重新编译到优化级别2、运行良好。 有什么想法吗?
为什么默认为 O2、速度与尺寸之间的权衡设置如何? 我应设置什么编号?
此致!
Ping
[引用 USER="Ralph Jacobi">我提出的问题是、这与我可以想到的任何其他情况都是向后的... 通常情况下、打开优化是问题的原因、切勿将其关闭、我可以回忆起。
哦、我遇到了关闭优化会导致明显的错误行为的情况。 更改优化可以揭示错误(特别是 heisenbugs),而不管您是"增加"还是"降低"优化级别**。
在大多数情况下、这些是应用程序中的潜在错误(我在商业应用程序中看到过、可能是经过高度测试的应用程序)、只有少数情况下是编译器错误。
因此、我认为您应该这样做
Robert
并且很少进行调试。 如果无法在发布优化级别进行调试、则需要更改发布优化或学习更好的调试技术。
**实际上,增加和减少是错误的术语
***类似***
这些恼人的“heisenbugs”证明-通常-非常不确定... (仅文字就值得(不恰当地禁止))
克鲁的工作人员(当然)会(现在)迅速声称,"海因虫"是他们的"海因人!" (查看您的入门内容、Robert?)
BTW -我的调查结果/信念与供应商 Ralph 的调查结果(很大)相同...
海报必须意识到"现在发现问题(尤其是故障)-而不是以后发现问题"是"非常需要的"、应导致更清洁、更稳健的代码...
[引用 user="Ralph Jacobi">我想知道、出于 Robert 列出的确切原因、其他优化级别是否进行了大量测试(如果有) (尽管我觉得我们可以辩论一下、对于驱动程序库、由于交付范围的性质、此做法可能不如最终应用程序那样有效。)。[/引述]
我同意 Ralph、我认为您可以提出一个很好的论点、即库应该在多个优化设置下进行测试(也许可以指示测试的执行级别)。 我可以理解为什么这种情况不常见、变化的数量会很大。
Robert
[引用用户="Ping Wang "]我仍在尝试了解哪个代码位导致进入"fault ISR"-这很难、在某些函数期间似乎只有(发生)。[/quot]
您已经观察到的情况。 该供应商提供了详细的应用手册、其中介绍了可让您深入了解 MCU 故障(实际)原因的方法。 (最近(声称)的论坛"升级?" 忽略了任何使"查找此类关键文档"舒适、方便(上帝禁止)"快速、方便"的尝试、以供" LIKEless "客户用户使用!
论坛页面顶部的红色条纹(风格指南)提供(备受欢迎)"博客、小组、TI 培训"-并且(令人惊讶/失望)不是指向此类重要技术文档的单一链接! (已申请/LIKEless "升级吗?") 除了幻影之外、还能证明什么呢?
缺勤供应商的重要应用手册-您可以系统地删除"可疑函数"(您认为导致进入"故障 ISR"的函数)、并尝试发现引起代码事件。 最常见的是 A、" MCU 堆栈太小"-您对论坛搜索框(在论坛页面顶部)的使用应揭示过去的文章、该模型是"如何增加堆栈..."
[引用 user="12ve12pm]PC-Lint 是一款用于发现难以发现的错误的绝佳工具。 [/报价]
更好的方法是防止它们。
这不应该是问题的解决之后、而是应该是提供其他遗漏的内容的持续补充。
[引用 user="12ve12pm]\n 请注意,在尝试使用外设之前,它无法检测到错误,例如无法打开外设。 这将使您进入故障 ISR。[/报价]
我认为这可能是图书馆建设方面的一些预先考虑。 不确定是否值得、但我必须考虑一下。 您最终可能会得到更好的代码。
在这种情况下、我同意。 TDD 是更好的工具。
lint 首先测试,然后为目标编译。 如果在您到达编译器时仍有合法的编译器警告、则可能会出现问题。
[引用 user="12ve12pm"]但如果该选项不可用,
如果不是、您应该真正提供它。 它是一个重要的工具。
[引用 user="12ve12pm"]在发行版和调试版中,您可能使用不同的预定义符号集进行编译,或者与不同的库集进行链接[/quot]
从未有调试构建。 始终构建到发布。
Robert
[引用用户="Robert Adsett72"]
12时12分您可以在 Release 和 Debug 编译中使用不同的预定义符号集进行编译、也可以链接不同的库集
[/报价]
我想知道你对这个问题的技术原理是什么。 如果您始终构建到发布版本、那么您应该如何快速切换到包含调试信息的构建、以及在哪里可以实现源代码级单步执行? 或者、您是否非常好、以至于您永远不会使用调试器?
[引用 user="12ve12pm "]
Robert Adsett72.12时12分您可以在 Release 和 Debug 编译中使用不同的预定义符号集进行编译、也可以链接不同的库集从未有调试构建。 始终构建到发布。
想知道您对这个问题的技术原理是什么。 如果您始终构建到发布版本、那么您应该如何快速切换到包含调试信息的构建、以及在哪里可以实现源代码级单步执行?
[/报价]
这就是您不切换编译、调试生产版本的要点。 您可以具有包含调试信息的版本构建。 它们并不是相互排斥的。
如有必要、您还可以单步执行代码(单步执行被高估)。
[引用 user="12ve12pm"]或者您的状态是否良好、以至于您从未使用过调试器?
如果先执行 lint 操作,则使用单元测试,然后进行编译。 在运行代码时、有许多调试技术不需要调试器。 一些具有更少入侵、另一些具有更强的入侵能力。
您需要直接进入并观察代码行为的项目不会从单步执行中受益。
是的、我有时会逐步浏览优化的代码、但这种情况很少见。 观察和检查通常比偷东西更有效率。
当我开始时*,一个冰通常是5个或更多的数字(通货膨胀在这种情况下已经消失)。 即使适配器可能有四个图、它们也会焊接到电路板上、易碎且不可重复使用。 这不是一种可以轻易使用的资源。 因此、我可能已经学会了人们开始时不重视的技巧。 我还使用过您根本无法停止的系统**,尽管不像某些系统那样极端。
对于某些(至少)现代工具、可以轻松获取大量信息、而无需单步执行代码甚至设置断点。
Robert
我上次单步执行嵌入式应用是几年前启动汇编代码。 您甚至不需要符号信息。 我有单步 PC 应用程序、主要是因为对象模型没有很好地记录或完整记录。 尽管对于其中的一些日志来说、这将是最强大的调查工具。
**如果您停止代码,就会发生糟糕的情况