工具/软件:Linux
您好,
我正在使用mmap()映射OMAP_I2C1_BASE (0x4802A000),它是I2C1寄存器( 运行Linux的OMAP3352)的起点。如果我不访问任何寄存器,mmap工作正常。 但是当我尝试打印寄存器值时,我得到了
未处理的错误:0xb6f5c000处的非线性提取(0x1018)上的外部异常中止
我看到过一些有相同问题的帖子,但我没有看到任何回复或解决方案。 如有任何帮助和建议,我们将不胜感激。
代码如下:
fd = open ("/dev/mem",O_RDWR);
IF (FD ==-1)
{
printf("open()失败!\n");
返回-1;
}
mmap_addr = mmap (NULL,mem_size,PROT_READ|PROT_WRITE,MAP_SHARED,FD,mem_start);
如果(mmap_addr == map_failed){
printf("gpio mmap()失败!\n");
出口(1);
}
PTR =(无符号int *)(mmap_addr);
printf(" 0x%08x映射到%p (%p)\n",OMAP_I2C1_BASE,mmap_addr,PTR);
PTR+=4;//从SCR寄存器开始打印寄存器值
printf ("%p 0x08x\n",PTR,*PTR);PTR ++;
printf ("%p 0x08x\n",PTR,*PTR);PTR ++;
...
我尝试了类似的代码来映射GPIO寄存器,它工作正常,我可以对寄存器进行读/写操作。