LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 13749|回复: 4

如何使用ioremap函数?

[复制链接]
发表于 2007-10-18 17:28:20 | 显示全部楼层 |阅读模式
我使用如下方法操作一个地址为0x56000020的端口
unsigned long port_addr;
(void *)(port_addr) = ioremap(0x56000020,0x8);
操作端口使用如下代码:
*(volatile unsigned int*)(port_addr)|=0x00008000;
编译时出现warning,
(void *)(port_addr) = ioremap(0x56000020,0x8);
warning:  use of cast expressions as lvalues is deprecated
左值为什么说有问题呢?
ioremap的定义明明是:
(void *)ioremap(unsigned long offset, unsigned long size)
发表于 2007-10-30 02:06:20 | 显示全部楼层
应该写成这样:

  1. port_addr = (unsigned long)ioremap(0x56000020, 0x8)
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-11-6 16:21:56 | 显示全部楼层
楼上是正确的。
回复 支持 反对

使用道具 举报

发表于 2007-11-11 00:20:01 | 显示全部楼层
C语言的基本问题:

编译警告中说,对左值的强制转换写法是过时的:
  1. (void *)(port_addr)
复制代码


不过既然头文件中的函数声明是
  1. (void *)ioremap(unsigned long offset, unsigned long size)
复制代码


不如直接写:
  1. volatile unsigned int *port_addr = ioremap(0x56000020,0x8);
  2. *port_addr |= 0x00008000;
复制代码


ANSIC(C89)和C99的规范都允许空指针与其它指针的任意转换。
回复 支持 反对

使用道具 举报

发表于 2008-7-7 09:48:11 | 显示全部楼层
ioremap函数,应用头文件:asm/io.h.
    ioremap(0x56000020,0x8);但是参数中的0x8,是什么意思? 影射的长度是任意的吗??
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表