您好!
我对 ARM 架构有些陌生、并有一些小问题。 几十年来、我在 ARM 上进行了 C/C++编程、但主要在 Linux 或某些 RTOS 上、因此不必处理一些更晦涩的问题。
我的直接问题是关于 CPSR。 根据某些文档、当进入 FIQ 处理程序时、I (IRQ)位被置位(以屏蔽 IRQ)。 但是、我看到 F (FIQ)位仍然清零。 这似乎表明 FIQ 仍然可能发生(堆栈式中断)、但我很确定不会发生 FIQ 堆栈。 有人能向我澄清这种行为吗?
我拥有的代码是:
uint32 _mask_IRQ_FIQ ()
{
_asm ("\tmrs r0、CPSR");
_asm ("\tand r0、r0、#0xc0");
_asm ("\tlsr r0、r0、#6");
}
在 FIQ 处理程序(通知处理程序)中...
uint32 intmask =_MASK_IRQ_FIQ ();
intmask 为0x2。
谢谢。

