如何找出哪些内存地址适合使用?
更具体地说,关于如何使用特定地址的示例是:指向特定固定地址的指针,而不是关于为什么这是一个有效的读写地址的信息。
我想找出地址x到y是否可用的一种方法。
这样我就可以在没有特定模拟器的情况下执行类似于内存映射IO的操作。(我的链接问题与此相关,这样我就可以使用一组地址在Ubuntu上进行测试,另一组用于实际的芯片上软件)
Ubuntu的具体答案请。
发布于 2013-02-04 13:20:16
您可以使用malloc()返回的任何内存地址。此外,您还可以指定需要多少内存。有了realloc(),你甚至可以在事后改变主意。
发布于 2013-02-04 13:17:38
你把两个独立的话题混在一起。链接到的问题是关于微控制器的内存映射IO的。它指的是来自Atmel的微控制器ATM128。这个问题的操作是试图写到它的一个寄存器,这些寄存器是特定的地址。
如果您试图写入寄存器的地址,您需要了解内存映射的IO是如何工作的,您需要读取您工作的芯片组/IC的规范。问这个"Ubuntu的具体答案“是毫无意义的。
在Ubuntu上运行的程序正在运行它--它是自己的虚拟地址空间。所以询问地址x到y是否可用是毫无意义的.除非你正在访问硬件,否则找一个特定的地址是没有意义的,只要使用操作系统给你的东西,你就会知道你很好。
根据您的编辑,您正在尝试对内存映射的IO进行模拟,您可以这样做:
#ifdef SIMULATION
unsigned int TX_BUF_REG; // The "simulated" 32-bit register
#else
#define TX_BUF_REG 0x123456 // The actual address of the reg you're simulating
#endif然后使用访问器宏通过掩码读取或写入特定位(通常是这样做的):
#define WRITE_REG_BITS(reg, bits) {reg |= bits;}
...
WRITE_REG_BITS(TX_BUF_REG, SOME_MASK);静态变量可以用在这种方式的模拟中,所以您不必担心写入哪些地址是“安全的”。
发布于 2013-02-04 13:40:36
对于引用的ATMega128微控制器,您可以在数据表中查看映射到寄存器的地址。在安装操作系统的PC上,您将没有机会以这种方式直接访问硬件寄存器。至少不是从用户空间。通常只允许设备驱动程序(环0)访问硬件。
正如其他人已经提到的,您必须使用例如malloc()来告诉操作系统,您需要一个指向允许写入的内存恰克的指针。这是因为操作系统管理整个系统的内存。
https://stackoverflow.com/questions/14687388
复制相似问题