4

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

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

4

1 回答 1

5

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

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

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

我不熟悉 IAR,但如果这些是尺寸,那么它们相当于UND_Stack_Size, SVC_Stack_Size, ABT_Stack_Size, FIQ_Stack_Size, IRQ_Stack_Size, 和USR_Stack_SizeuVision。ISR_Stack_Size或等价物应该是前五个的总和。

请记住,堆栈溢出会使坏事发生。你很可能需要让你的堆栈更大,但就像我说的,你可能需要查看最小值。CMX 所需的值。

于 2012-11-09T01:58:59.103 回答