Как эмулировать ввод-вывод с отображением в память

У меня есть оборудование, которое я хочу эмулировать; Интересно, смогу ли я сделать это на таком низком уровне. Аппаратное обеспечение имеет много регистров, которые я собираю в структуру:

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

7
задан anatolyg 26 October 2011 в 13:28
поделиться