【发布时间】:2013-05-15 10:08:22
【问题描述】:
我正在为 ARM Cortex M3 (NXP LPC1769) 微控制器开发软件。目前我正在寻找一种机制来检测我的函数是否在 ISR 中被调用。我想我必须检查登记册。根据这些信息,我想调用困难函数。
如果有包含必要信息的寄存器,我已经检查了参考手册。
例如,我尝试根据“中断活动位寄存器”(IABR) 寄存器检测是否从 ISR(我使用 SysTick-ISR)调用了我。如果 ISR 处于活动状态,则该寄存器应为 != 0。但值是 0x00000000。这意味着没有中断处于活动状态。除了这个测试,我在参考手册中检查了 NVIC 和 SC 寄存器,寻找包含必要标志的寄存器,但我没有找到。
有人知道我的问题的合适寄存器/机制吗?
【问题讨论】:
-
为什么不能简单地让 ISR 调用一个函数,而让程序的其余部分调用不同的函数?
-
是的……你必须非常小心,尤其是对任务执行者。不过,它是嵌入式的,祝你好运!
-
@Lundin 也许是为了简化 RTOS 界面。例如 Keil 的 RL-RTX 有独立的中断和线程上下文 API,例如
os_evt_set和isr_evt_set;在编写可重用代码时,可能并不总是可以预测将来可能会使用哪些上下文,因此您可以创建一个通用的evt_set包装器,它可以在任何地方使用。此外,如果意外调用了错误的 API,操作系统也会出现错误的行为,因此运行时选择更安全,但开销很小。