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.

[参考译文] TM4C123GH6PM:使能总线故障异常

Guru**** 2526700 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1122456/tm4c123gh6pm-enable-bus-fault-exception

器件型号:TM4C123GH6PM

您好!

我将 TI-RTOS 与我的 TivaC 配合使用。 我想知道如何在 TI-RTOS 下启用总线故障"tirtos_tivac_2_16_01_14"。 因此、每当总线故障发生时、它将直接跳转到总线故障、而不是硬故障。

谢谢、

穆罕默德

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

    您好!

     总线故障为5、而硬件故障为3。 另请注意您可能看到的故障升级。  

    通常情况下、异常优先级与异常屏蔽寄存器的值一起决定
    处理器是否进入故障处理程序、以及故障处理程序是否可以取代另一个
    故障处理程序,如第101页的“异常模型”所述。
    在某些情况下、优先级可配置的故障被视为硬故障。 这个过程被调用
    优先级升级、故障被描述为升级为硬故障。 升级至硬故障
    在以下情况下发生:
    ■故障处理程序引起的故障与它正在处理的故障类型相同。 这种升级到困难
    故障发生是因为故障处理程序不能取代自身、因为它必须具有相同的优先级
    作为当前优先级。
    ■故障处理程序引起的故障优先级与它所处理的故障相同或更低。 这种情况
    出现这种情况是因为新故障的处理程序不能取代当前正在执行的
    故障处理程序。
    μ■异常处理程序产生的故障的优先级等于或低于当前的优先级
    正在执行异常。
    ■发生故障、且该故障的处理程序未启用。
    如果在进入总线故障处理程序时在堆栈推送期间发生总线故障、则总线故障不会发生
    升级至硬故障。 因此、如果堆栈损坏导致故障、则故障处理程序甚至会执行
    但处理程序的栈推送失败。 故障处理程序运行、但堆栈内容为
    损坏。

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

    谢谢 Charles、

    但我知道为什么会发生升级。 我需要了解的是、如何更改 TI-RTOS 配置以直接跳转到总线故障处理程序?  

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

    换言之、我的其中一项任务中包含以下行

    void (* f趣味_ptr)(void)= 0;

    FACY_PTR();

    这将导致总线故障、而是跳转到强制类型的硬故障。 而它应该进入总线故障。 因为我认为总线故障被禁用。 那么、如何从 TI-RTOS 配置.cfg 中启用总线故障?

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

    要获得这种效果、您需要设置 SCB->SHSR (也称为 SYSHNDCTRL)中的 BUSFAULTENA 位。 看起来 TivaWare 会将其提供为"IntEnable (FAULT_BUS);"。

    我认为写入该寄存器需要特权模式;我不知道这在 TI-RTOS 中是否容易实现。

    [编辑:更正了拼写错误。]

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

    在我看来、您的示例(调用到0)比总线故障更有可能生成 UsageFault (无效指令)。 为此、您需要 IntEnable (FAULT_USAGE);"。 还有 MemManage (FAULT_MPU)、尽管我认为位置0是可执行的。

    [编辑:interrupt.c 位于此处:

    https://dev.ti.com/tirex/explore/node?node=AGi52D8FGr8.qMQiFH7NEg__mic1X5.__LATEST

    ]

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

    您好!

     我没有听到你的反馈。 我希望您已通过 Bruce 的建议解决了这个问题。 我现在将关闭该线程。 如果您有一些更新、您只需写回此帖子、该主题将自动重新打开。