往具体地址写数据时遇到的问题
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之类的分配的,这样是允许的。
这样的直接给一个地址赋值的语句,这样的语句在应用程序中是不能直接用的,会出现段错误,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之类的分配的,这样是允许的。
相关文章推荐
- 昨天写支付接口时遇到支付接口返回数据接收地址,session数据丢失(或者说失效)的问题
- 关于EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 的问题解决方法整理
- 一次插入上万条数据遇到的问题
- NSMutableDictionary添加数据时遇到的问题
- 学习线性表的数据存储结构时所遇到的问题
- 在做GridView删除单条数据的时候,遇到的问题
- 关于supersocker的数据传输中遇到的问题
- 总结Asp.net中Page加载PostData的具体过程 进而解决"获取动态创建的控件的PostData数据"问题
- 关于CY7C68013A在Keil中代码及数据地址配置的问题
- Java客户端向twisted服务器发送数据中遇到的问题
- 分享工作中遇到的问题积累经验 事务日志太大导致insert不进数据
- 使用SpringMVC注解ResponseBody返回Json数据可能遇到的问题
- STM32 在16位数据宽度下的地址问题
- .net C# GridView数据导出到excl及所遇到的问题
- 使用ajax传递数据时的地址等相关问题
- 酷友观点/经验:支付接口返回数据接收地址,session数据丢失(或者说失效)的问题浅析(原创文章)
- 2014.1.16实施数据迁移时遇到的问题(ORA-00214和ORA-39700问题解决)
- 遇到奇怪的问题,帮助威猛答案,表单提交的文件提交的无限数据问题
- 工作中遇到的问题:百万条数据的查询、删除、修改效率提高的一些思考,解决方案(一)
- faster rcnn训练自己地数据时遇到地问题