gpt4 book ai didi

gcc - AVR 内联汇编 : registers to variables?

转载 作者:行者123 更新时间:2023-12-04 02:49:26 24 4
gpt4 key购买 nike

我目前正在尝试编写一些代码来检查某个地址处 SRAM 的值,然后在匹配时执行一些 C 代码。这是在 atmega32u4 AVR 芯片上运行的。这是我到目前为止所拥有的:

volatile char a = 0;

void setup(){
}

void loop(){
asm(
"LDI r16,77\n" //load value 77 into r16
"STS 0x0160,r16\n" //copy r16 value into RAM location 0x0160
"LDS r17,0x0160\n" //copy value of RAM location 0x0160 into register r17
//some code to copy value r17 to char a?
);

if(a == 77){
//do something
}
}

我无法确定从汇编转换回 C 的部分。如何获取寄存器 r17 中的值并将其放入 C 代码中的变量中?

我确实找到了 this代码片段,但是我不太明白它是如何工作的,或者这是否是解决这个问题的最佳方法。

最佳答案

See here on how to inline assembly.除非您有非常具体的原因,否则您应该让编译器为您处理变量。即使您声明了 a在你的代码是易失的,它很可能绑定(bind)到 AVR 内核的 GP 寄存器文件上的 32 个寄存器中的任何一个。这实质上意味着,变量永远不会存储在 RAM 中。如果你真的想知道你的编译器在做什么,用avr-objdump -S反汇编最终的目标文件。并研究它。

关于gcc - AVR 内联汇编 : registers to variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18083145/

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