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.

[参考译文] RTOS/EK-TM4C1294XL:'Dynamic&#39的时钟模式;导致 MCU 崩溃。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/774869/rtos-ek-tm4c1294xl-clock-mode-to-dynamic-results-in-mcu-crash

器件型号:EK-TM4C1294XL

工具/软件:TI-RTOS

您好!

我的应用的主要目标是在几毫秒内以高采样率读取一组 SPI 传感器、并对这些数据做出决定。

我已经在硬件中断发布的任务中实现了这一点、并且通常我的传感器读取循环每扫描以~15uSec 的速度运行。

由于我的总体传感器读取持续时间(10ms)长于我的时钟节拍周期、时钟模块会中断、增加~35us (默认情况下每个时钟节拍或1ms)


如果我将"节拍"模式设置为"不必要的时钟周期将被抑制"、我的应用程序会短暂工作、但 MCU 会在短时间后停止工作。

我在 HWI 或任务中看不到栈溢出

-没有任何 HWI 例外

-HeapTrack 未显示任何问题

执行分析显示程序进入"未知"状态。 我看到的最接近的提示是程序的暂停、其中信标计数溢出看起来已经发生、 信标计数在 ROV 中为0或1。 有时、在 ROV 窗口中、BIOS 选项卡"CAN for errors"将显示、  
  'Viewinit 代码中捕获到异常:"c:/ti/tirtos_tivac_2_16_00_08/products/uia_2_00_05_50/packages/ti/uia/loggers/LoggerStopMode.xs、第231行:无法从 null 读取属性"enabled"。'

如何解决此类错误? 用于 MSP430处理器/wiki 的 SYS/BIOS 具有我找到的有关时钟周期抑制的最多信息、似乎表明可以抑制的最长周期小于1个周期持续时间? 如果我也将时钟节拍模式设置为动态、则会在"empty" TI-RTOS 新项目中发生此问题。

使用'Clock_tickStop();'和'Clock_tickStart();'在我第一次尝试时不起作用,但重新安装 CCS 后,他们现在似乎起到了作用。 使用时是否有注意事项? 是否存在忽略滴答的限制、如果是、它是累积的?  我是否应该尝试增加节拍持续时间并仅捕获节拍之间的数据、或者我是否从根本上以另一种方式退出了我的方法?

对于愚蠢的问题和其他新的错误、我深表歉意、感谢您抽出宝贵的时间。

RTOS:2.16.0.08
XDCtools:3.32.0.06

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

    我正在使用 TIRTOS 2.16.00.08中的"empty"示例在本地重现您的问题。 我将在调试该问题时进行跟进。

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

    谢谢 Derrick、
     忘记将其包含在"empty" RTOS 示例中、似乎 MCU 会在大约2^32个 CPU 周期(120MHz 时钟)的同时停止运行检测信号功能。 或~35.8秒。
    Johnathan

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

    事实证明、Tiva 平台上不支持动态 Tick 模式。

    在10ms 传感器读取周期内出现的时钟节拍是否会影响数据的有效性(即您有严格的截止时间)?

    Derrick
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Derrick、
    是的、时钟节拍的附加计时在我们的应用中不起作用。 正如我所看到的、我们的选择是:

    1) 1)设置大于10ms 的时钟周期、并确保我们的读取周期包含在周期之间。 这不会显著降低此项目的影响、但会使在内部为其他项目销售系统变得更困难。

    2) 2)在读取周期的开始和结束时继续使用'Clock_tickStop();'和'Clock_tickStart();'、我不确定这是推荐的还是稳健的。

    3)尝试使用零延迟中断(这会使我们感到混淆和匹配)。

    4) 4)放弃 RTOS。

    我们还将 NDK 用于非时间关键型通信。 RTOS 非常出色、我们更愿意继续采用这种方法。 您能否具体评论备选案文2、欢迎并感谢您提出的任何其他建议。

    再次感谢您、
    Johnathan

    P.S. 低优先级、但是当发生 clock_tick 模式动态错误时、是否有更好的方法来对错误进行故障诊断?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Johnathan、

    您如何访问 SPI 外设以进行多次读取? 您使用的是 TI-RTOS 驱动程序还是仅使用 driverlib? 如果您使用的是 driverlib、您是使用中断还是仅轮询 SPI 外设?

    如果您只是轮询、另一种想法是仅禁用中断。 这是一个有点重的手、但简单快捷。 我认为时钟节拍将自校正(例如、如果延迟3个节拍、定时器外设将在您启用中断后立即运行3次)。 这一切都只是想大声,需要更多的思考...我会把它留给 Derrick:)

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

    在继续执行备选案文[2]之前,我对你对 Todd 的最新评论的答复感兴趣。 我认为他关于禁用中断的建议最好。 您可以使用 Hwi 模块来实现这一点。 (Hwi_disable()和 Hwi_restore()函数)。

    如果这不是您的选择、我认为我们应该研究启动和停止时钟周期。

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

    我可以将此线程标记为已解析吗?

    Todd