嘿,即时通讯使用WinAVR中,并在编程的C. ATMEGA32
基本上,我希望将我的C程序通过在汇编:试图定义变量为特定内存位置
asm(" ") command.
我试着去定义C中的内存位置到精确的内存位置,以便我可以在asm命令行中访问它们。
我有5个变量:
unsigned char var1, var2, var3, var4, var5;
我知道我可以使用指针的存储位置,但即时通讯不能确定如何做到这一点。
任何帮助,将不胜感激。
谢谢,
奥利弗。
嘿,即时通讯使用WinAVR中,并在编程的C. ATMEGA32
基本上,我希望将我的C程序通过在汇编:试图定义变量为特定内存位置
asm(" ") command.
我试着去定义C中的内存位置到精确的内存位置,以便我可以在asm命令行中访问它们。
我有5个变量:
unsigned char var1, var2, var3, var4, var5;
我知道我可以使用指针的存储位置,但即时通讯不能确定如何做到这一点。
任何帮助,将不胜感激。
谢谢,
奥利弗。
这种方法是完全编译器无关,简单,明了:
#define var1 (*(volatile unsigned char *)0xDEADBEEF)
#define var2 (*(volatile unsigned char *)0xDECAFBAD)
#define var3 (*(volatile unsigned char *)0xBADC0DE)
等
您可以使用GCC通过内联汇编程序通过C变量名访问内存位置。有关更多信息,请参阅AVR-GCC Inline Assembler Cookbook。您还可以使用编译器扩展或链接器脚本将C变量放在确切的内存位置。然而,编译器和汇编器的重点在于,我们不必管理那些乏味的细节。
你应该使用'挥发性无符号char'而不是'无符号char'。这将确保编译器不会优化从/向内存位置的读/写。 – 2011-04-11 03:01:50
同意。谢谢,我会解决它。 – 2011-04-11 03:16:53
我已经定义了这些语句;现在我试图访问我的C程序中的变量:var1 = new_key。这将返回一个语法错误,我试着玩指针,如* var1 = new_key,但无济于事...... – Ospho 2011-04-11 09:29:27