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.

[参考译文] RM57L843:如何使用 NMPU 模块来检测堆栈下溢故障

Guru**** 2535750 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1218542/rm57l843-how-to-use-nmpu-module-to-detect-stack-underflow-fault

器件型号:RM57L843
主题中讨论的其他器件:HALCOGEN

您好!

您能否说明如何使用 NMPU 模块来检测堆栈下溢故障? 非常感谢。

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

    您是指 MPU 还是 NMPU?

    MPU 用于 CPU、而 NMPU 用于诸如 DMA 的其它主控。 堆栈仅供 CPU 使用。  

    堆栈是 LIFO (先进先出)  线性数据结构。 入 栈和出栈是堆栈的基本操作。

    。   操作会将新项添加到堆栈的顶部。 如果堆栈已满并且没有足够的空间容纳指定的项目、堆栈被认为处于一个溢出状态。

    弹出 操作从堆栈顶部删除项目。 如果堆栈为空、那么它进入  下溢状态  (这意味着堆中不存在要移除的项目)。

    您可以使用 MPU 子区域或覆盖区域进行堆栈保护、请参阅 ARM Cortex-R TRM。

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

    您好、QJ:

    我在 TRM 中找到 NMPU。 MPU 在哪里?如何获取有关"用于堆栈保护的 MPU 子区或叠加区域"的介绍?

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

    您好!

    ARM TRM 中描述了 MPU:

    Cortex-R5技术参考手册 r1p2 (arm.com)

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

    您好、QJ:

    如何使用 MPU 子区域或叠加区域进行堆栈保护?

    是否有任何可用的 API 函数?

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

    我们没有 API 来配置 MPU 区域以实现堆栈保护。 HALCOGen 为 MPU 区域操作生成多个 API (SET、GET 等)。

    如何使用 MPU 子区或覆盖区域来保护堆栈?

    请参阅 ARM Cortex-R TRM 的7.1.2

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

    您好、QJ:

    我在 HALCOGen 程序中找不到与 MPU 相关的操作、只有 NMPU。

    您能否直接告诉我、我们是否可以在诊断程序中检测 RM57 CPU 的堆栈下溢?

    如果是、如何做到? 非常感谢。

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

    您可以使用子区域或重叠区域进行堆栈溢出或堆栈下溢保护:

    1.溢出

    •为区域1分配所有栈的适当大小
    •分配给区域2的最小区域大小、32字节、并对其进行定位 入栈操作 输入和输出曲线
    •将区域2访问权限设置为无访问权限。

       堆栈区域:0x20 ~ 0x4000

    2.下溢

    •为区域1分配所有栈的适当大小
    •分配给区域2最小区域大小、32个字节以及刚好位于栈区域上方的位置  (0x3FE0~0x4000) 输入和输出曲线
    •将区域2访问权限设置为无访问权限。

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

    您好、QJ:

    根据我的理解、 如果我们 将区域2访问权限设置为"无访问"、则必须导致权限故障。

    在执行本测试的"将区域2访问权限设置为无访问权限"步骤之前、前两个步骤的目的是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    据我 所知,如果我们 将区域2的访问权限设置为"无访问权限",则必须引发权限故障。

    您是对的。 堆栈溢出或下溢时将生成权限故障。

    执行此测试的"将区域2访问权限设置为无访问权限"之前的前两个步骤的目的是什么?

    当堆栈已满时、入栈操作会将数据推送到区域2并生成权限故障。

    当堆栈为空时、来自区域2的弹出操作也会生成权限故障。

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

    您好、QJ:

    明白了。 谢谢。

    问题在于我们如何在应用程序中得到访问权限错误。 终止您的 CPU 呢?

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

    它生成 CPU 异常中断。