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,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标志不存在.要将构建配置重置为默认值:
右键单击文件夹 – >资源配置 – >重置为默认 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |