我有一些我想模拟的硬件;我想知道我是否可以在这样的低水平上做到这一点。硬件有很多寄存器,我将它们安排在一个结构中:
#include <stdint.h>
struct MyControlStruct
{
uint32_t data_reg_1;
uint32_t data_reg_2;
uint32_t dummy[2]; // to make the following registers have certain addresses
uint32_t control_reg_1;
uint32_t control_reg_2;
};
volatile struct MyControlStruct* MyDevice = (struct MyControlStruct*)0xDeadF00;
所以,我想支持以下语法在 Windows 和 linux 上进行硬件访问:
MyDevice->data_reg_1 = 42;
MyDevice->data_reg_2 = 100;
MyDevice->control_reg_1 = 1;
当执行最后一行代码时,我希望硬件模拟器“唤醒”并做一些事情。我可以在 Windows 和/或 linux 上实现这个吗?我想过以某种方式捕捉“分段错误”信号,但不确定这是否可以在 Windows 上完成,或者根本不可以。
我查看了手册页mmap
;似乎它可以提供帮助,但我无法理解如何使用它。
当然,我可以通过定义类似的函数来抽象对硬件的访问WriteToMyDevice
,一切都会很容易(也许),但我想知道我是否可以以这种确切的方式安排对我的硬件的访问。