RealView ARM C 编译器supports使用变量属性将变量放置在给定的内存地址处at(address)
:
int var __attribute__((at(0x40001000)));
var = 4; // changes the memory located at 0x40001000
GCC有类似的变量属性吗?
我不知道,但您可以轻松创建这样的解决方法:
int *var = (int*)0x40001000;
*var = 4;
它不是exactly同样的事情,但在大多数情况下是完美的替代品。它适用于任何编译器,而不仅仅是 GCC。
如果你使用 GCC,我假设你也使用GNU ld(当然,虽然这不是确定的)并且 ld 支持放置变量无论你想要他们在哪里.
我想让链接器完成这项工作是很常见的。
受到@rib回答的启发,我会补充说,如果绝对地址用于某些控制寄存器,我会添加volatile
到指针定义。如果只是RAM,那没关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)