エミュレートしたいハードウェアがいくつかあります。こんな低レベルでやれるのかな。ハードウェアには多くのレジスタがあり、それらを構造体に配置します。
#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
、すべてが簡単になります (おそらく) が、この正確な方法でハードウェアへのアクセスを調整できるかどうかを理解したいと思います。