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_Size
uVision。ISR_Stack_Size
或等价物应该是前五个的总和。
请记住,堆栈溢出会使坏事发生。你很可能需要让你的堆栈更大,但就像我说的,你可能需要查看最小值。CMX 所需的值。