2016-10-20 4 views
0

Contiki OSを初めて使用していて、基本的な質問があります。ContikiコンテキストでのISR関数の使用

Contikiプロセス内から低レベルのISRを安全に使用できますか?

私はこれをクイックテストとして実行しており、うまく機能しています。 しかし、私はOSで何かを損なう可能性があることを心配しています。 は別の条件で後で失敗します。

イベントタイマーに基づいて定期的に起動されるプロセスのコンテキストでは、 私はLEDを点滅させる機能を呼び出しています。 LED点滅機能自体は、Atmel SAMD21 MCUのハードウェアタイマーによって起動されたISRからのコールバックです。

この特定のケースで私はどんな制約を気にしなければならないでしょうか?

ありがとうございます。

答えて

0

は、基本的にはできますが、内のコード実行の各一部のコンテキストを理解する必要があります。

プロセスは、関数のコンテキストを持っている、コンチキのスケジューラはmain体内で実行、タイマーがエンキューしますプロセスはこのスケジューラで目を覚まし、実際にはContiki Processesは互いに呼び出された関数であると考えていますが、これらのマクロが実際に関数の呼び出しを呼び出すことに注意してください。

割り込みハンドラまたはコールバックでは、プロセスとデータを共有する場合は競合条件が発生する可能性があります。割り込みとmain()があるベアメタルファームウェアと同じです異なった文脈。

「protothreads」について読むことを強くお勧めします。スレッドのように聞こえるほか、本体で実行される機能です。 (私はこのリンクがあなたを啓蒙すると信じていますhttp://dunkels.com/adam/pt/

あなたが記述した問題については何も間違いはありません。

Contiki自体にはハードウェア抽象化モジュールがいくつかあるため、アプリケーションコードから直接プラットフォームに対処する必要はありません。私はContikiを使って大きなファームウェアを書いたことがあり、これらの抽象化は非常に有用ではないことが判明しました。私がやったことは、プラットフォームに触れるために私自身の低レベルのレイヤーを書くことでした。そのため、アプリケーションはすべてプラットフォームに依存しませんでしたが、OSの観点から、プラットフォームレジスタを呼び出すアプリケーションコードがありました。

関連する問題