【发布时间】: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