基本上此函数最终会调用
__attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_IPSR(void)
{
uint32_t result;
__ASM volatile ("MRS %0, ipsr" : "=r" (result) );
return(result);
}
我的汇编器有点生锈。但是,如果我做对了,这将读取称为IPSR的某些核心寄存器的内容?! 根据ARM支持文档: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CHDBIBGJ.html 如果该寄存器的值为0,则我处于线程模式,否则我处于IRQ处理程序中。
为什么我需要汇编程序的东西才能读取该寄存器,为什么我不能以与访问所有其他寄存器相同的方式访问该寄存器?
/* Determine whether we are in thread mode or handler mode. */
static int inHandlerMode (void)
{
return __get_IPSR() != 0;
}
我可以使此功能为非静态(也可以公开可见)吗,还是有充分理由使CMSIS成员将此功能设为私有?