gpt4 book ai didi

Cortex M0 不支持 CPSID i 汇编指令

转载 作者:太空狗 更新时间:2023-10-29 15:40:11 25 4
gpt4 key购买 nike

我正在使用 FreeRTOS 和带有 AC6 插件的 eclipse 为 Cortex M0 开发代码。在我的任务结束时,我使用断言来确定我的任务的水印是否大于指定的任务大小。我用于断言的宏如下所示:

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

任何人都可以阐明我遇到的问题吗?

最佳答案

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

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

关于Cortex M0 不支持 CPSID i 汇编指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com