top/contents search
[此答案由 Pedro Zorzenon Neto 贡献。]

函数usleepnanosleep对于短时间间隔无效,因为内核[可能]会切换到另一个任务……

解决方案源于 I/O 指令。向 ISA 地址的 I/O 端口写入数据会导致系统等待 1 微秒,因为 ISA 总线访问时间是 1 微秒。i386 机器中有一个硬件从不使用的 I/O 端口,那就是端口 0x80。

因此,向 I/O 端口 0x80 写入一个字节将产生“一微秒延迟”。这个延迟不太精确,但至少它在奔腾 100 和 Athlon 850 之间的变化会小于 2%(根据我的测试)。

一些 GNU/Linux 底层驱动程序也使用这种写入端口 0x80 的“特性”。

附件是 程序 [和 头文件],我用它们来完成这个(我认为这些函数在 MS-DOS 中也可以使用inportboutportb,但不确定)。

在 GNU/Linux 中,您需要 root 权限才能写入 I/O 端口。

返回


contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管