2011-04-11 18 views
2

嘿,即时通讯使用WinAVR中,并在编程的C. ATMEGA32
基本上,我希望将我的C程序通过在汇编:试图定义变量为特定内存位置

asm(" ") command.

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

我有5个变量:

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

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

回答

3

这种方法是完全编译器无关,简单,明了:

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

+1

你应该使用'挥发性无符号char'而不是'无符号char'。这将确保编译器不会优化从/向内存位置的读/写。 – 2011-04-11 03:01:50

+0

同意。谢谢,我会解决它。 – 2011-04-11 03:16:53

+0

我已经定义了这些语句;现在我试图访问我的C程序中的变量:var1 = new_key。这将返回一个语法错误,我试着玩指针,如* var1 = new_key,但无济于事...... – Ospho 2011-04-11 09:29:27

3

您可以使用GCC通过内联汇编程序通过C变量名访问内存位置。有关更多信息,请参阅AVR-GCC Inline Assembler Cookbook。您还可以使用编译器扩展或链接器脚本将C变量放在确切的内存位置。然而,编译器和汇编器的重点在于,我们不必管理那些乏味的细节。