主题中讨论的其他器件:HALCOGEN
您好!
您能否说明如何使用 NMPU 模块来检测堆栈下溢故障? 非常感谢。
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.
您是指 MPU 还是 NMPU?
MPU 用于 CPU、而 NMPU 用于诸如 DMA 的其它主控。 堆栈仅供 CPU 使用。
堆栈是 LIFO (先进先出) 线性数据结构。 入 栈和出栈是堆栈的基本操作。
。 按 操作会将新项添加到堆栈的顶部。 如果堆栈已满并且没有足够的空间容纳指定的项目、堆栈被认为处于一个溢出状态。
。 弹出 操作从堆栈顶部删除项目。 如果堆栈为空、那么它进入 下溢状态 (这意味着堆中不存在要移除的项目)。
您可以使用 MPU 子区域或覆盖区域进行堆栈保护、请参阅 ARM Cortex-R TRM。
您好!
ARM TRM 中描述了 MPU:
是否有任何可用的 API 函数?
我们没有 API 来配置 MPU 区域以实现堆栈保护。 HALCOGen 为 MPU 区域操作生成多个 API (SET、GET 等)。
如何使用 MPU 子区或覆盖区域来保护堆栈?
请参阅 ARM Cortex-R TRM 的7.1.2
您可以使用子区域或重叠区域进行堆栈溢出或堆栈下溢保护:
1.溢出
•为区域1分配所有栈的适当大小
•分配给区域2的最小区域大小、32字节、并对其进行定位 入栈操作 输入和输出曲线
•将区域2访问权限设置为无访问权限。
堆栈区域:0x20 ~ 0x4000
2.下溢
•为区域1分配所有栈的适当大小
•分配给区域2最小区域大小、32个字节以及刚好位于栈区域上方的位置 (0x3FE0~0x4000) 输入和输出曲线
•将区域2访问权限设置为无访问权限。
据我 所知,如果我们 将区域2的访问权限设置为"无访问权限",则必须引发权限故障。
您是对的。 堆栈溢出或下溢时将生成权限故障。
执行此测试的"将区域2访问权限设置为无访问权限"之前的前两个步骤的目的是什么?
当堆栈已满时、入栈操作会将数据推送到区域2并生成权限故障。
当堆栈为空时、来自区域2的弹出操作也会生成权限故障。