CMSIS inHandlerMode()函数

时间:2018-11-21 22:20:42

标签: cmsis

我正在STM32上使用CMSIS。我偶然发现了一个似乎可以检测到我是处于IRQ处理程序还是“正常”线程模式的函数。

基本上此函数最终会调用

__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成员将此功能设为私有?

0 个答案:

没有答案