功能

如 i386 。在差别 I/O 空间和内存空间的进程的 I/O 空间写入数据。

  • outb()   I/O 上写入 8 位数据 ( 1 字节 )。
  • outw() I/O 上写入 16 位数据 ( 2 字节 );
  • outl () I/O 上写入 32 位数据 ( 4 字节)。

原型

引用
#include <asm/io.h>



void
outb (unsigned
char
data,
unsigned short
port);

void
outw (unsigned
short
data,
unsigned short
port);

void
outl (unsigned
long
data,
unsigned short
port);

变量

  • port  I/O 地址。此处为虚拟地址
  • data 数据

在linux的驱动程序中,都会使用大量的outb、outw、inb、inw等等宏来訪问硬件或寄存器。

这些宏的定义都在对应处理器体系下的include/asm文件夹下的io.h中定义。追究下去。这些宏终于就是一个volatile变量的的赋值:

      #define __arch_putb(v,a)      (*(volatile unsigned char *)(a) = (v))

      #define __raw_writeb(v,a)     __arch_putb(v,a)

      #define outb(v,p)                 __raw_writeb(v,__io(p))

      在(*(volatile unsigned char *)(a) = (v))中,a是一个物理地址(实地址,多数是特殊功能寄存器地址)。

(volatile unsigned char *)对a进行类型转换,成为一个指向该地址指针,最后*(volatile unsigned char *)(a)引用该指针对该地址赋值v。这样就能够达到訪问底层硬件的目的了。

当读入数据时使用in(x),类似inb、inw、inl,參数与out(x)函数一致。

in、out都是对I/Oport进行操作。ioreadb、iowriteb等是对I/O内存操作。

(详见博客http://blog.csdn.net/haozhao_blog/article/details/24005323)

最新文章

  1. C/C++编程语言学习资料尽收眼底 电子书+视频教程
  2. Pivot C# WPF 代码添加PivotItem
  3. storm的并发和消息保障性
  4. pthread_create如何传递两个参数以上的参数
  5. python爬虫抓网页的总结
  6. 转:Oracle R12 多组织访问的控制 - MOAC(Multi-Org Access Control)
  7. centos7.0安装docker报错
  8. wxsqlite3的加密模块单独编译
  9. django HttpRequest
  10. C# Log4Net使用指南(转)
  11. 关于 &lt;textarea &gt;&lt;/textarea &gt;标签在苹果微信浏览器出现 内阴影
  12. python 之 初识模块
  13. Spring之旅第一篇-初识Spring
  14. Javascript我学之五对象的创建与使用
  15. Api文件
  16. html自适应头
  17. git 入门教程之个性化 git
  18. Springboot项目打包成jar运行2种方式
  19. WPFのImage控件souce引入的方法总结
  20. MyEclipse 10.7(版本:eclipse 3.7.x-Indigo系列)安装PyDev 4.5.4插件

热门文章

  1. display: run-in
  2. ⒂bootstrap组件 折叠 基础案例
  3. Akka(36): Http:Client-side-Api,Client-Connections
  4. linux-echo
  5. 使用Docker运行Microsoft SQL Server 2017
  6. 前端面试题(3) cookie,sessionStorage和localStorage的区别
  7. Python之numpy模块array简短学习
  8. Django 入门案例开发(中)
  9. AIO5岗位桌面主页【我的收藏夹】只显示8行,怎样增加显示行?
  10. python自动发邮件库yagmail