誰かがPythonでメモリマップされたデバイスレジスタを扱うための良い解決策を考案しましたか?理想的には、名前付きレジスタや名前付きビットフィールドであっても、それらが完全にアドホックではない方法で作業することを可能にするものがありますか?理想的にはクロスプラットフォームですが、私はLinuxだけで暮らすことができます。Pythonでメモリマップされたレジスタ
Structsがmmap型とctypes型の組み合わせのように見えるかもしれませんが、a)Structsではビットフィールドの位置を指定することができないようです(Cではそうもありません)。 b)構造体マッピングをmmapの上にドロップする方法を理解できません。
または、サークルソーをドライバーとしてどのように使用することができますか? (?つまり、それはそれを行うと、なぜ地球上ではありません、あなたがしたいと思う)
例(NOT使用するために、テストされていない)Cでのようなものになります:
volatile struct {
uint32_t mfr_id;
uint32_t prod_id;
uint32_t ctl;
uint32_t dummy[5];
...
} * pDev;
hFile = open('/dev/bridge', O_RDWR)
pDev = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, hFile, 0);
assert(pDev->mfr_id == 0x12345678);
assert(pDev->prod_id == 0xDEADBEEF);
uint32_t temp = pDev->ctl;
temp &= CTL_ACCESS_MASK | CTL_SHIFT_MASK;
temp |= CTL_ACCESS_RO | CTL_SHIFT_5;
pDev->ctl = temp;
私は答えは分かりませんが、すでにライブラリがない場合は、作成すると良いプロジェクトになります。 – japreiss
なぜこれを行う必要がありますか?解決しようとしている実際の問題の詳細をご記入ください。 (シリアルポートまたはパラレルポートに接続しようとしている可能性がありますが、そのためのライブラリがあります) –
[bitstring](http://code.google.com/p/python-bitstring/)モジュールはビットフィールドの操作にはいいですが、最初のデータを取得するのに役立ちません。 – larsks