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.

[参考译文] MSPM0L1305:设置优化功能后、无法正常工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1393177/mspm0l1305-after-setting-the-optimization-functionality-is-not-working

器件型号:MSPM0L1305

工具与软件:

嗨、团队:

我们有2种状态、一种是活动状态、另一种是休眠状态。 在设置任何优化之前、它是从睡眠模式唤醒到活动模式。 然而、设置优化级别后、我无法从睡眠模式唤醒、无论优化级别是什么。 请帮助我尽快解决此问题。

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

    您好、Sowmya、  

    您使用哪种 IDE? 如果您使用 CCS、则可以参考此文档以了解每种编译器优化的具体信息。 默认级别为2、级别为2时您的项目是否可以工作? 有时、当您设置更高的优化级别时、编译器甚至会修改指令的执行顺序。 因此、更好的方法是调试代码、并查看"Disassembly"窗口(即 汇编语句)。

    https://software-dl.ti.com/codegen/docs/tiarmclang/rel2_1_0_LTS/compiler_manual/using_compiler/compiler_options/optimization_options.html

    此致、

    Janz Bai

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

    如果确实是这样、则表示编译器存在错误。 我建议您在 CCSSTUDIO 论坛上提出这个问题。 在那里他们会要求您发送工作和非工作版本。

    e2e.ti.com/.../code-composer-studio-forum

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

    你(们)好

    在睡眠模式下、我们将配置32kHz 时钟。 我们将使用 ADC 和计时器。 计时器根据 LFCLK (低频时钟)运行、但 ADC 需要高频时钟、因此我将使用16 MHz 时钟。 它在没有优化的情况下运行、但在优化级别-2时、ADC 无法正常工作。 有人可以帮助我解决这个问题吗?

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

    您好、Sowmya、

    理论上、修改编译器优化级别不会影响外设的使用、因为 SDK 中的示例工程默认为级别2。 最可能的原因是某些变量未正确优化、因此我建议您调试代码并查看"Disassembly"窗口(即 汇编语句)。 顺便说一下,你是否使用诸如"while (1或其他条件语句){;}"(在 while 循环中没有任何内容)?

    此致、

    Janz Bai

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

    尊敬的 Janz:

    感谢您的答复

    我们发现优化后 ADC 不工作的原因是 FET 在这个过程中未启用。 优化会影响启用 FET 的时序。

     

    delay_cycles (800);->如果我使用此函数进行 delay、将需要多少微秒、如果时钟为32MHz、如何计算它

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

    对于库函数、 在32MHz 处"delay_cycles (800);"将延迟至少(800/32)=25usec。 预先编译的、则无需进行优化。

    如果你写自己的,它将受到优化,甚至可能完全消失。 此外、这是最小延迟、例如中断可以扩展它。

    您认为延迟太短还是太长?

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

    Bruce、您好!

    非常感谢您的回复、

    我在我的源代码中添加了函数 delay_cycles (800)、并且 ADC 正在工作。 但是、我在同一个通道上有5个开关、其中一个开关的 ADC 值与预期不匹配、我不确定有什么问题。 我希望使用优化级别-s 来实现

    您能在这方面帮助我吗

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

    在"不稳定"的问题之后,下一个优化风险是程序流中的竞争--优化不会产生这些问题,但会使它们变得更糟。

    我假设开关打开某种激励电路、那么当开关准备就绪时、您可以从 ADC 中读取数据、中间的代码恰好发生(没有-O)所需的时间量正确(比如25usec)、但现在(使用-O)所需的时间较少。 然后 delay_cycles()填充间隙。 这到底是发生了什么?

    a)您是否有任何指示器可用于判断激励何时准备就绪? 还是纯粹是经过一段时间的东西?

    b) 25us (800个时钟)是从哪里来的? 这是有效果的最短时间、还是您尝试了一些设置? 一个励磁源是否可能只需要稍长一点?

    我看到过使用计时器输出来(1)触发激励开关[第1个边沿](2)触发 ADC 的代码(已知/可调)晚于[第2个边沿];作为一个额外的好处、它(3)为 ADC 采样提供了固定速率。 这可能比您现在想要做的要多、但这种设计不受优化的影响。