gpt4 book ai didi

c - IAR 汇编器 BKPT 立即数作为输入操作数

转载 作者:行者123 更新时间:2023-11-30 14:38:54 29 4
gpt4 key购买 nike

我正在为 Cortex M4 设备编写闪存加载程序,我想使用断点指令的立即值“返回”驱动 PC 应用程序的值。

虽然硬编码立即效果很好:

__asm("bkpt 0x70");
__asm("bkpt %0" : : "i" (0x70));

一旦我想“返回”依赖于运行时的东西,例如

uint8_t status = Flash_EraseAll();
__asm("bkpt %0" : : "i" (status));

编译失败

Error[Ta090]: Immediate operand is not constant

我尝试使用具有不同连接设置的预处理器宏,但无济于事。

有人知道如何将运行时相关状态标志输入到 __asm() IAR 中的 block 作为立即数?根据我读到的here ,这并不完全可能,但可能有一个聪明的 hacky 方法来做到这一点。

P.S.:是的,作为一种解决方法,我可以使用 switch 语句,在其中列出并硬编码每个可能的状态,但这只是丑陋且冗长。

最佳答案

我会将值压入堆栈,然后使用带有定义数字的 bkpt 指令,以便调试器可以在堆栈中查看此状态。

类似这样的东西(伪代码):

__asm("push %0" : : "i" (status));
__asm("bkpt %0" : : "i" (0x70));

当然,您不应该忘记事后清理堆栈。

由于 bkpt 仅使用立即数进行编码,因此您显然无法在运行时更改它,因为您必须修改代码。

关于c - IAR 汇编器 BKPT 立即数作为输入操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56344191/

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