【问题标题】:RAM browser with C programming language带有 C 编程语言的 RAM 浏览器
【发布时间】:2013-12-16 07:56:48
【问题描述】:

我想浏览 RAM 的一部分。我试过这段代码:

#include <stdio.h>
#include <string.h>

#define MIN ((volatile unsigned char*)0x00000000)
#define MAX ((volatile unsigned char*)0x0000ffff)


main()
{
    volatile char* c;
    for (c=MIN; c<MAX;c++) printf("c[%p]= %c\n",c,*c);
}

但是编译器会显示此消息:

警告:不同指针类型的比较缺少强制转换。

我该如何解决这个问题?

【问题讨论】:

  • volatile unsigned char* c;
  • 另外,你打算在什么硬件/操作系统上运行它?
  • 我不是专家,但您的要求在技术上可行吗?我的理解是,每个应用程序都以自己的虚拟地址空间启动,所以除非您进行一些特殊的系统调用(或类似的),否则您甚至可以访问内存管理器分配给您的内存之外的内存吗?
  • @chronodekar - 这就是我在上面问的原因。在没有虚拟内存管理器和这些地址的 RAM 的嵌入式系统上,应该没问题。
  • @MartinJames Embedded ...是的,我错过了。在 OMAP4 平台上,我认为 RAM 范围是从 0x80000000 到 0xBFFFFFFF。在另一个 ARM 系统上,它可能是别的东西。只是当我读到这个问题时,我假设“应用程序”将在像 ubuntu 或类似的常规 Linux 发行版上运行。

标签: c pointers embedded volatile ram


【解决方案1】:

c 应该与MIM/MAX 具有相同的类型:volatile unsigned char* c;

【讨论】:

  • 认为我可以理解这将如何摆脱 OP 的编译器问题,但它真的有助于他/她直接从 RAM 中读取吗?
  • @chronodekar 取决于他的平台。它可能会这样做,或者它可能只是尝试从他自己的进程中读取并可能崩溃。
  • @nos 这仍然让我难以理解为什么这个答案得到了如此多的支持...
  • @Clifford 技术上我可以接受它解决了直接提出的问题。但鉴于主题行,我对这个答案感到不舒服。 ...可能只是我吹毛求疵。
  • @chronodekar:在这种情况下,批评可能属于问题而不是答案。 “为什么我会收到这个警告?”的问题与“使用 C 编程语言的 RAM 浏览器”无关 - 这是一个标题不佳的问题 - 应用程序不是警告的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多