首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些内存地址可供使用?

哪些内存地址可供使用?
EN

Stack Overflow用户
提问于 2013-02-04 13:04:22
回答 3查看 123关注 0票数 0

如何找出哪些内存地址适合使用?

更具体地说,关于如何使用特定地址的示例是:指向特定固定地址的指针,而不是关于为什么这是一个有效的读写地址的信息。

我想找出地址xy是否可用的一种方法。

这样我就可以在没有特定模拟器的情况下执行类似于内存映射IO的操作。(我的链接问题与此相关,这样我就可以使用一组地址在Ubuntu上进行测试,另一组用于实际的芯片上软件)

Ubuntu的具体答案请。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-04 13:20:16

您可以使用malloc()返回的任何内存地址。此外,您还可以指定需要多少内存。有了realloc(),你甚至可以在事后改变主意。

票数 4
EN

Stack Overflow用户

发布于 2013-02-04 13:17:38

你把两个独立的话题混在一起。链接到的问题是关于微控制器的内存映射IO的。它指的是来自Atmel的微控制器ATM128。这个问题的操作是试图写到它的一个寄存器,这些寄存器是特定的地址。

如果您试图写入寄存器的地址,您需要了解内存映射的IO是如何工作的,您需要读取您工作的芯片组/IC的规范。问这个"Ubuntu的具体答案“是毫无意义的。

在Ubuntu上运行的程序正在运行它--它是自己的虚拟地址空间。所以询问地址xy是否可用是毫无意义的.除非你正在访问硬件,否则找一个特定的地址是没有意义的,只要使用操作系统给你的东西,你就会知道你很好。

根据您的编辑,您正在尝试对内存映射的IO进行模拟,您可以这样做:

代码语言:javascript
复制
#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

然后使用访问器宏通过掩码读取或写入特定位(通常是这样做的):

代码语言:javascript
复制
#define WRITE_REG_BITS(reg, bits) {reg |= bits;}
...
WRITE_REG_BITS(TX_BUF_REG, SOME_MASK);

静态变量可以用在这种方式的模拟中,所以您不必担心写入哪些地址是“安全的”。

票数 3
EN

Stack Overflow用户

发布于 2013-02-04 13:40:36

对于引用的ATMega128微控制器,您可以在数据表中查看映射到寄存器的地址。在安装操作系统的PC上,您将没有机会以这种方式直接访问硬件寄存器。至少不是从用户空间。通常只允许设备驱动程序(环0)访问硬件。

正如其他人已经提到的,您必须使用例如malloc()来告诉操作系统,您需要一个指向允许写入的内存恰克的指针。这是因为操作系统管理整个系统的内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14687388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档