嘿,我正在使用 WinAVR 并用 C 编写 ATMEGA32。
基本上,我想通过以下方式将我的 C 程序链接到 asm:
asm(" ") 命令。
我试图将 C 中的内存位置定义为确切的内存位置,以便我可以在 asm 命令行中访问它们。
我有 5 个变量:
无符号字符 var1、var2、var3、var4、var5;
我知道我可以使用指向内存位置的指针,但我不确定如何做到这一点。
任何帮助,将不胜感激。
谢谢,
奥利弗。
嘿,我正在使用 WinAVR 并用 C 编写 ATMEGA32。
基本上,我想通过以下方式将我的 C 程序链接到 asm:
asm(" ") 命令。
我试图将 C 中的内存位置定义为确切的内存位置,以便我可以在 asm 命令行中访问它们。
我有 5 个变量:
无符号字符 var1、var2、var3、var4、var5;
我知道我可以使用指向内存位置的指针,但我不确定如何做到这一点。
任何帮助,将不胜感激。
谢谢,
奥利弗。
您可以使用 GCC 使用内联汇编器通过其 C 变量名称访问内存位置。有关更多信息,请参阅AVR-GCC 内联汇编程序手册。您还可以使用编译器扩展或链接器脚本将 C 变量放置在确切的内存位置。然而,编译器和汇编器的全部意义在于让我们不必像那样管理繁琐的细节。
此方法完全独立于编译器,简单明了:
#define var1 (*(volatile unsigned char *)0xDEADBEEF)
#define var2 (*(volatile unsigned char *)0xDECAFBAD)
#define var3 (*(volatile unsigned char *)0xBADC0DE)
等等