我有一些硬件想要模拟; 我想知道是否可以像这样在低级别上进行。硬件有许多寄存器,我将它们排列在一个结构体中:
#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
这样的函数来抽象访问硬件,这样一切都会很容易(也许),但我想了解是否可以按照这种确切的方式安排对我的硬件的访问。