ロック(アトミック)レジスタの読み取り/書き込み
私はGPIOの直接制御を使用して何かをコーディングしていますが、http://elinux.org/RPi_Low-level_peripherals#GPIO_hardware_hackingのような、このための優れたリソースがいくつかあります。このプロセスにはopen( "/ dev / mem")が含まれ、次にmmap操作が目的の物理アドレスを仮想アドレス空間に効果的にマッピングします。次に、このhttp://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdfのセクション6を読み、I / Oがどのように制御されるかを確認します。 ピンの機能(入力、出力、またはさまざまな特殊機能)に変更するには、GPFSELx I / Oレジスタのこれらの3ビットフィールドを変更します(000 =入力、001 =出力敵インスタンス)。これらの変更操作は、通常の読み込みと保存を伴う操作にコンパイルされます(たとえば、GPIO0を入力に変更するには:*(regptr)&=〜7;これは、次のようにコンパイルされます ldr r2, [r3, #0] ; r = *ptr (load r2 from I/O register) bic r2, r2, #7 ; r2 &= ~7 str r2, [r3, #0] ; *ptr = r2 (store r2 to I/O register) 問題はこれです。ロードとストアの間に割り込みが発生し、別のプロセスまたはISRが同じI / Oレジスタを変更すると、ストア操作(r2への古い読み取りに基づく)が他の操作の影響を元に戻します。したがって、これらのI …