尝试将变量定义到特定的内存位置

时间:2011-04-11 02:15:29

标签: c assembly inline-assembly winavr

嘿,我正在使用WinAVR并在C中编程ATMEGA32 基本上,我想通过以下方式将我的C程序链接到asm:

  

asm(“”)命令。

我试图将C中的内存位置定义为精确的内存位置,以便我可以在asm命令行中访问它们。

我有5个变量:

  

unsigned char var1,var2,var3,var4,   VAR5;

我知道我可以使用指向内存位置的指针,但我不确定如何做到这一点 任何帮助将不胜感激 谢谢,
奥利弗。

2 个答案:

答案 0 :(得分:3)

您可以使用GCC使用内联汇编程序通过C变量名访问内存位置。有关更多信息,请参阅AVR-GCC Inline Assembler Cookbook。您还可以使用编译器扩展或链接描述文件将C变量放在精确的内存位置。但是,编译器和汇编器的全部意义在于我们不必管理那些繁琐的细节。

答案 1 :(得分:3)

此方法完全独立于编译器,简单且直接:

#define var1 (*(volatile unsigned char *)0xDEADBEEF)
#define var2 (*(volatile unsigned char *)0xDECAFBAD)
#define var3 (*(volatile unsigned char *)0xBADC0DE)