用C访问AVR寄存器?

0 c pointers avr cpu-registers avr-gcc

我最近一直在努力学习关于微控制器的所有知识。由于这是自学,所以我花了一些时间来了解这些东西在裸机上是如何工作的。长话短说,我不想在我的 C 代码中使用 AVR 库;我想使用 C 中的指针通过它们的地址专门访问寄存器。我网上到处搜索,查看 AVR 头文件,并阅读一本书。如果有人可以帮助我,那就太好了。

Pot*_*ter 5

您可以将整数转换为指针。这只是一个普通的演员表。

volatile char * const port_a = (volatile char *) 0x1B;
Run Code Online (Sandbox Code Playgroud)

许多编译器提供扩展来指示链接器将对象放置在特定地址:

volatile char port_a @ 0x1B; // Or something like this
Run Code Online (Sandbox Code Playgroud)

优点是您不会引入全局变量来表示指针,但它可能不会为硬件寄存器做正确的事情。您需要仔细阅读特定平台的编译器手册。

官方 AVR 头文件可能包含更多类似的内容:

#define PORTA (* (volatile char *) 0x1B)
Run Code Online (Sandbox Code Playgroud)

这避免了全局变量和链接器黑客,但许多人也认为使用预处理器也是黑客。

生产代码唯一可行的解​​决方案是使用官方标头。其他任何东西都只是指导性的。