gpt4 book ai didi

c - 不了解 ARM 硬件堆栈(使用 IAR)

转载 作者:行者123 更新时间:2023-12-01 12:49:57 24 4
gpt4 key购买 nike

我目前正在使用 IAR Embedded Workbench 为 NXP LPC2378 micro 进行开发。我想我遇到了问题,我的 IRQ 和 CSTACK 需要更大,因为 CPU 不断崩溃,我注意到这些区域会“渗入”到周围的内存区域。我想我真的不明白这些和其他内存区域的用途是什么?我使用了一个 RTOS (CMX),它为 ISR 保留了 RAM,但这似乎是为了不同的东西。

当我使用 RTOS 时,IRQ_STACK、CSTACK、SVC_STACK、FIQ_STACK、UND_STACK 和 ABT_STACK 用于什么,或者它们是完全独立的东西?

最佳答案

LPC23XX 有几种不同的模式。每种模式都有自己的堆栈。中断之类的事情涉及通过在切换到不同模式之前保存上下文寄存器(我相信到当前模式的堆栈)来切换模式,等等。

您使用的是 RTOS 并不会改变这些堆栈的用途,但有时 RTOS 可能对它们有要求(您可能需要查找 CMX)。

  • IRQ_STACK - 中断 (IRQ) 模式堆栈。
  • CSTACK - 用户和系统模式堆栈。这是大多数时候用于代码执行的常规堆栈。
  • SVC_STACK - 主管模式堆栈。有些指令只能在 SVC 模式下运行。 IIRC CPU 以这种模式启动,并在初始设置完成后退出。
  • FIQ_STACK - FIQ 中断模式堆栈。快速中断 (FIQ) 可能在 IRQ 期间发生 - 它们就像更高优先级的 IRQ。在 FIQ 中时,FIQ 和 IRQ 被禁用。
  • UND_STACK未定义指令模式堆栈。
  • ABT_STACK中止模式堆栈,用于数据中止等。 (您可以设置处理程序在触发中止时运行。)

  • 我不熟悉 IAR,但如果这些是大小,那么它们相当于 UND_Stack_Size , SVC_Stack_Size , ABT_Stack_Size , FIQ_Stack_Size , IRQ_Stack_Size , 和 USR_Stack_Size在 uVision 中。 ISR_Stack_Size或等价的应该是前五个的总和。

    请记住,堆栈溢出会导致不好的事情发生。你很可能需要让你的堆栈更大,但就像我说的,你可能需要查找最小值。 CMX 所需的值。

    关于c - 不了解 ARM 硬件堆栈(使用 IAR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13300427/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com