当发送命令并从某个芯片(例如RTC)读取数据时,不同的文档都说我们应该等待一段时间才能从设备读取数据以确保数据可用。许多代码片段都会从端口进行虚拟读取0x80
。我想知道这个地址位置连接到什么设备(如果有)。我说的是 IA-32 PC 架构。
I/O 端口 0x80 传统上用于 POST 代码。 (POST = 开机自检)
当系统启动时,BIOS会向I/O端口0x80输出一系列调试代码。这些用于调试非启动系统。
在大多数台式电脑中,您可以安装 POST 代码调试板,它基本上是一个小型 PCI(或 ISA)插槽板,用于解码 I/O 端口 0x80 的 I/O 写入,并通过 7 段 LED 显示该值。
通常,POST 代码闪烁得非常快。但是,如果您的系统在启动时挂起,您可以查看最后一个 POST 代码是什么,并使用此信息对系统进行故障排除。
这个网站 http://www.bioscentral.com/包含大多数 BIOS 的标准 POST 代码列表。但是,计算机/主板制造商可能会插入自己的 POST 代码,因此该列表并非 100% 全面。
系统开始引导操作系统后,POST 代码就不那么相关了。然而,一些操作系统供应商可能使用 POST 代码板作为调试工具,特别是对于代码中 printf() 可能不实用的地方(例如中断服务例程)。
某些操作系统将使用对 I/O 端口 0x80 的读写作为延迟机制。如果您需要等待几微秒才能完成某件事,则使用成熟的 sleep() 或delay() 计时器可能不切实际,因此对“安全”I/O 地址执行“虚拟”读/写是轻量级解决方案。对0x80的读写基本上可以保证不会对系统的运行产生不利影响,因此对于此类虚拟操作是一个不错的选择。
您会发现,对于许多较旧/较慢的外围设备(例如 RTC 芯片),有时需要等待几个 usec 才能使 I/O 写入操作“生效”。对 0x80 的虚拟访问是一种便捷的方法。
您还可能会找到对 0x80 进行虚拟写入以“刷新”任何电气“回声”总线的代码。在某些平台上,可以将值写入未使用/无效的 I/O 地址,从该地址读回,并查看刚刚写入的值,即使该地址实际上没有硬件。但是,如果您对中间的另一个地址(例如 I/O 端口 0x80)进行虚拟写入,则可以防止这种情况发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)