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

发布于 2024-10-31 14:58:48 字数 341 浏览 1 评论 0原文

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

asm(" ") 命令。

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

我有5个变量:

无符号字符 var1、var2、var3、var4、 var5;

我知道我可以使用指向内存位置的指针,但我不确定如何执行此操作。
任何帮助将不胜感激。
谢谢,
奥利弗.

Hey, im using WinAVR and programing an ATMEGA32 in C.
Basically, I want to link my C program to asm via the:

asm(" ") command.

Im trying to define memory locations in C to exact memory locations so that I can then access them within the asm command line.

I have 5 variables:

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

I know I could use pointers to a memory location, but im unsure how to do this.
Any help would be appreciated.
Thanks,
Oliver.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

郁金香雨 2024-11-07 14:58:48

该方法完全独立于编译器,简单明了:

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

等等。

This method is completely compiler-independent, simple, and straightforward:

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

etc.

冷情妓 2024-11-07 14:58:48

您可以使用 GCC 通过内联汇编器通过 C 变量名称来访问内存位置。请参阅 AVR-GCC 内联汇编手册了解更多信息。您还可以使用编译器扩展或链接器脚本将 C 变量放置在确切的内存位置。然而,编译器和汇编器的全部目的是让我们不必管理这样繁琐的细节。

You can access memory locations by their C variable names with inline assembler using GCC. Please refer to the AVR-GCC Inline Assembler Cookbook for more information. You can also place C variables at exact memory locations using compiler extensions or linker scripts. However, the whole point of compilers and assemblers is so that we don't have to manage tedious details like that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文