Cortex M0不支持CPSID i汇编指令

时间:2016-08-12 17:02:37

标签: c eclipse assembly freertos cortex-m

我正在使用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版尝试使用宏并且工作正常......我开始认为它是另一个奇怪的日食问题。

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

1 个答案:

答案 0 :(得分:1)

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

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