У меня есть оборудование, которое я хочу эмулировать;Интересно, смогу ли я сделать это на низком уровне, как это.Аппаратное обеспечение имеет много регистров, которые я размещаю в структуре:
#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
, и все было бы легко (может быть,), но я хочу понять, могу ли я организовать доступ к своему оборудованию именно таким образом.