gpt4 book ai didi

c - 如何在物理内存中指定变量位置?

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:26 25 4
gpt4 key购买 nike

gcc 允许使用 section 属性控制放置变量的部分:

struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };

有没有办法在我的 C 代码中指定此部分在物理内存中的确切位置?我假设不存在虚拟内存,或者虚拟地址直接转换为物理地址。

我知道我可以通过传递给链接器的脚本来处理它,但如果我可以直接在我的(自动生成的)C 中指定它会更好。

最佳答案

你可以通过使用宏实现变量在某个物理地址的效果,例如:

#define a (*(volatile struct duart *)0xdeadbeef)

这不使用链接器;它没有声明任何变量,因此您不会在目标文件中看到 a。但我猜你不需要这个。

注意 volatile 关键字,在使用内存映射硬件时总是需要它。它通常可以在没有 volatile 的情况下工作,但有时它不会,并且调试此类故障很困难 - 所以不要忘记 volatile 关键字!

用法:

// I assume the duart structure has fields write_buf and read_buf of type uint8_t
a.write_buf = 0x55; // write data to DUART
a.write_buf = 0xaa; // write more data to DUART
uint8_t byte1 = a.read_buf; // read data from DUART
uint8_t byte2 = a.read_buf; // read more data from DUART

关于c - 如何在物理内存中指定变量位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com