小编Han*_*sel的帖子

如何在 ASM 中访问 C 结构体成员

我使用 C 和 ASM 代码的混合在 STCubeIDE 中对 STM32H745 进行编程。

我有以下结构来确保在两个核心 CM4 和 CM7 之间共享的变量的严格排序:

struct miscSharedMemoryStruct {
   volatile uint32_t triggerPtr;
   volatile uint32_t bufferHead;
}
__attribute__((section(".sram3"))) struct miscSharedMemoryStruct miscSharedMemory;
Run Code Online (Sandbox Code Playgroud)

该部分.sram3是在链接器脚本中定义的,并且在两个内核的 C 代码中访问我的变量效果很好。到目前为止,一切都很好。然而...

为了允许访问 的条目miscSharedMemory,我在 ASM 代码中将该变量设置为全局变量:

.global miscSharedMemory
Run Code Online (Sandbox Code Playgroud)

为了使汇编器能够识别正确的地址,我在标头中添加了以下定义语句,其中定义了上述结构:

#define BUFFER_HEAD_ADR  ((uintptr_t)(&miscSharedMemory.bufferHead))
Run Code Online (Sandbox Code Playgroud)

最后,想法是从上面的地址获取数据到我的 ASM 代码中的寄存器中:

ldr R1, =BUFFER_HEAD_ADR
Run Code Online (Sandbox Code Playgroud)

但是,当编译我的代码时,我得到了

对“BUFFER_HEAD_ADR”的未定义引用

使汇编器识别结构中变量的正确地址的正确方法是什么?我可能不需要执行该.global语句,只要存储的地址BUFFER_HEAD_ADR是正确的并被汇编器识别即可,但我只是不知道如何让它工作。

c assembly struct stm32

2
推荐指数
1
解决办法
114
查看次数

标签 统计

assembly ×1

c ×1

stm32 ×1

struct ×1