2

Cortex-M3用のライトカーネルを構築しています。

優先度の高い割り込みから、優先度の低い割り込みで実行するコードを呼び出して、いくつかのパラメーターを渡したいと思います。

優先度の低い割り込みに作業をポストするためにキューを使用したくありません。

渡すバッファとサイズがあります。

プロラミングマニュアルでは、SVC割り込みハンドラーは同期的であると記載されています。これは、SVCのハンドラーよりも優先度の低い割り込みから呼び出すと、すぐに呼び出されることを意味します(これの結果は、パラメーターを渡すことができるかのようになります。これは関数呼び出しでした(MS-DOSのBIOS呼び出しに少し似ています))。

別の方法でやりたいのですが、優先度の高い割り込みから優先度の低い割り込みにパラメーターを渡します(現時点では、パラメーターをメモリー内の固定位置に残して行っています)。

これを行うための最良の方法は何ですか(可能であれば)?

ありがとう、

4

1 に答える 1

1

私は Cortex-M3 アーキテクチャに詳しくありませんが、共有メモリにロック メカニズムを提供するために何が必要かは確かです。

優先度の高い割り込みは、優先度の低い処理をいつでも中断できます (これをハードウェアと具体的に同期し、これが発生しないことが保証されている場合を除きますが、おそらくそうではありません)

ロック メカニズムは、ロック フラグのアトミック交換を保証するために、クリティカル セクション内の 1 ビット フラグ (フラグの読み取り-変更-書き込みの割り込みを無効にする) と同じくらい単純かもしれません。ロックフラグにアクセス/更新している場合、優先度の高い割り込みが入って変更されます。)フラグは、共有メモリ空間への読み取りと書き込みの同期メカニズムであり、アクセス中に両方のプロセスが他方をロックアウトできるようにします。長時間割り込みを無効にすることなく、共有リソース。

于 2010-05-02T14:59:14.753 に答える