您的位置:首页 > 其它

往具体地址写数据时遇到的问题

2011-05-31 14:10 225 查看
在驱动程序中,经常看到*(unsigned int *)0x56000000=0x12;

这样的直接给一个地址赋值的语句,这样的语句在应用程序中是不能直接用的,会出现段错误,LINUX系统不允许直接操作物理地址。

#include<stdio.h>

#define NFCONF *(volatile unsigned int *)0x0804a008

int main()

{

NFCONF=0x11223344;

return 0;

}

此程序编译时不会出错,但是在运行时会出现“段错误”!因为在系统下不允许直接访问内存,系统下访问内存要通过MMU和Cache。

下面程序是可以的:

#include <stdio.h>

int main()

{

int *a;

a=(int *)malloc(100);

printf("%p/n",a);

*a=0x11;

return 0;

}

用GDB的 x/20 0xXXXXXXXX可以看到,printf显示的地址上确实写上了数据,该地址是系统通过MMU之类的分配的,这样是允许的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐