Cortex M0不支持CPSID i汇编指令

我正在使用FreeRTOS开发Cortex M0的代码,使用AC6插件开发
eclipse.在我的任务结束时,我使用断言来确定我的任务的水印是否大于指定的任务大小.我用于我的断言的宏看起来像这样:

#define HMI_DBG_ASSERT(x) if ((x) == 0) {taskDISABLE_INTERRUPTS(); \
                  HAL_GPIO_WritePin(ASSERT_LED_GPIO_Port, ASSERT_LED_Pin, GPIO_PIN_SET); \
                  for( ;; );}

我的任务看起来像这样:

for(;;)
{
    //some
    //code
    uxHighWaterMark = uxTaskGetStackHighWaterMark( NULL );
    HMI_DBG_ASSERT(uxHighWaterMark >= WDG_STACK_SIZE_WATERMARK_WORD);
}

这编译和完美!我的问题是我正在与另一个开发人员共同编写代码,他使用了一个几乎与我相同的宏:

#define CMN_DBG_ASSERT(x) if ((x) == 0) {taskDISABLE_INTERRUPTS(); \
                  HAL_GPIO_WritePin(ASSERT_LED_GPIO_Port, ASSERT_LED_Pin, GPIO_PIN_SET); \
                  for( ;; );}

当我调用此宏时,我的编译器返回以下错误:

selected processor does not support `cpsid i' in Thumb mode

“taskDISABLE_INTERUPTS();”宏由FreeRTOS定义,并调用以下汇编指令:

__asm volatile( " cpsid i " )

我觉得奇怪的是我的编译器没有抱怨我的其他宏,但有了这个.另外,我尝试在调用我的CMN_DBG_ASSERT的.c文件中使用我的HMI_DBG_ASSERT,我得到了同样的错误.我确保我的代码正确包含文件,并指定了eclipse中的包含路径.

Cortex-M wiki说“CPSIE和CPSID也不存在,因为Cortex-M缺少ARM指令集.其他CPS指令仍然存在于Cortex-M中.”

ARM的网站在其Cortex-M0文档中确实有CPSIE和CPSID的规范:

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/BABHBAAB.html

在任何情况下,之前已经调用过宏并且它工作正常,我的编译器现在只是在抱怨,这真的很奇怪.我的一位同事使用IAR Cortex-M版尝试使用宏,它工作正常…我开始认为它的另一个奇怪的日食问题.

任何人都可以对我遇到的问题有所了解吗?

最佳答案 解决了.不知何故,我的公共代码文件夹的构建设置与我项目中的其他文件夹不同,并且-mcpu标志不存在.要将构建配置重置为默认值:

右键单击文件夹 – >资源配置 – >重置为默认

点赞