我正在为ARM Cortex M3(NXP LPC1769)微控制器开发软件。目前,我正在寻找一种机制来检测我的函数是否在中断服务程序(ISR)中被调用。我假设我需要检查一个寄存器。根据这些信息,我想调用一些复杂的函数。
我已经查阅了参考手册,看是否有包含所需信息的寄存器。
例如,我尝试通过“中断活动位寄存器”(IABR)来检测是否从ISR中调用(我使用了SysTick-ISR)。如果ISR处于活动状态,该寄存器的值应该不等于0。但是该值为0x00000000,这意味着没有中断处于活动状态。除了这个测试之外,我还在参考手册中检查了NVIC和SC寄存器,寻找包含所需标志的寄存器,但是没有找到。
有人知道适合我问题的合适寄存器/机制吗?
我已经查阅了参考手册,看是否有包含所需信息的寄存器。
例如,我尝试通过“中断活动位寄存器”(IABR)来检测是否从ISR中调用(我使用了SysTick-ISR)。如果ISR处于活动状态,该寄存器的值应该不等于0。但是该值为0x00000000,这意味着没有中断处于活动状态。除了这个测试之外,我还在参考手册中检查了NVIC和SC寄存器,寻找包含所需标志的寄存器,但是没有找到。
有人知道适合我问题的合适寄存器/机制吗?
os_evt_set
和isr_evt_set
。在编写可重用代码时,未必总能预测未来可能在哪些上下文中使用它,因此可能创建一个通用的evt_set
包装器,可在任何地方使用。此外,如果意外调用了错误的API,则操作系统会表现不正确,因此运行时选择更安全,但会带来一点小的开销。 - Clifford