ARM Cortex A9にクリティカルセクションを実装する方法
ARM926コアからCortexA9にいくつかのレガシーコードを移植しています。このコードはベアメタルであり、OSまたは標準ライブラリは含まれていません。すべてカスタムです。コードのクリティカルセクショニングによって防止されるべき競合状態に関連すると思われる障害が発生しています。 このCPUにクリティカルセクションが正しく実装されていない可能性があるかどうかを確認するには、アプローチに関するフィードバックが必要です。GCCを使用しています。微妙なエラーがあると思います。 また、ARM用のこれらのタイプのプリミティブを備えたオープンソースライブラリ(または優れた軽量スピンロック/セメフォライブラリ)もありますか? #define ARM_INT_KEY_TYPE unsigned int #define ARM_INT_LOCK(key_) \ asm volatile(\ "mrs %[key], cpsr\n\t"\ "orr r1, %[key], #0xC0\n\t"\ "msr cpsr_c, r1\n\t" : [key]"=r"(key_) :: "r1", "cc" ); #define ARM_INT_UNLOCK(key_) asm volatile ("MSR cpsr_c,%0" : : "r" (key_)) コードは次のように使用されます。 /* lock interrupts */ ARM_INT_KEY_TYPE key; ARM_INT_LOCK(key); <access registers, shared globals, …