加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cortex M0不支持CPSID i汇编指令

发布时间:2020-12-16 07:17:16 所属栏目:百科 来源:网络整理
导读:我正在使用FreeRTOS开发Cortex M0的代码,使用AC6插件开发 eclipse.在我的任务结束时,我使用断言来确定我的任务的水印是否大于指定的任务大小.我用于我的断言的宏看起来像这样: #define HMI_DBG_ASSERT(x) if ((x) == 0) {taskDISABLE_INTERRUPTS(); HAL_G
我正在使用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标志不存在.要将构建配置重置为默认值:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读