对于硬件寄存器以及如何通过代码与它们接口,我完全没有经验或知识。然而,我目前的C项目要求我从SMBus上的芯片读取温度,我想我必须弄脏我的手。如果你想知道,温度传感器是Winbond W83793G。
我还有很长的路要走,但是我已经从第5页的文档开始:
smbus.org/specs/smbb10.pdf文件
完成任务的第一步似乎是写入以下硬件寄存器:ax、bh、bl、ch、cl,并从以下位置读取返回值:carry、ah、al、bl、ch、cl、dx。使用此功能,我可以确定“smbus bios接口”是否可用。更重要的是,如果我能在c_中处理这么多,我可以按照其他文档的内容最终从winbond w83793g中读取并从温度传感器中提取出我想要的值。不,openhardwaremonitor目前不支持smbus,所以我不能引用它来获取代码。
总之,我的基本问题是:使用c从硬件寄存器读写的一种简单、有效的方法是什么?
此外,如果你能提供任何关于我从芯片上阅读的具体问题的反馈,那将是我的一个奖励,我将非常感谢!
最佳答案
C是一种在虚拟机中运行的托管语言。它运行在各种平台上。它没有硬件寄存器的固有概念。
您需要使用低级编程语言来编写访问硬件寄存器的代码。
如果将此代码编译为windows dll,则可以使用pinvoke访问非托管dll,将此代码包装为c。