Sei*_*oni 4 c microcontroller arm microprocessors iar
我目前正在使用 IAR Embedded Workbench 为 NXP LPC2378 micro 进行开发。我想我遇到了问题,因为 CPU 不断崩溃,我的 IRQ 和 CSTACK 需要更大,我注意到这些区域会“渗入”到周围的内存区域。我想我真的不明白这些和其他内存区域的用途是什么?我使用了一个 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 所需的值。