0

Contiki OS を初めて使用するので、基本的な質問があります。

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

私はこれを簡単なテストとして行っており、うまく機能しています。ただし、後でさまざまな条件下で失敗する OS の何かを弱体化させているのではないかと心配しています。

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

この特定のケースでどのような制約を考慮する必要があるかを明確にしてもらえますか?

ありがとうございました。

4

1 に答える 1

0

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

プロセスには関数のコンテキストがあり、Contiki のスケジューラはmain本体で実行され、タイマーはこのスケジューラでプロセスのウェイクをキューに入れます。実際、Contiki プロセスは互いに呼び出される関数と考えてください。これらのPROCESS_*マクロは実際に return を呼び出すことに注意してください。関数。

main()割り込みハンドラーまたはコールバックにいるときは、別のコンテキストにいます。ここでプロセスとデータを共有すると、競合状態が発生する可能性があります。割り込みと異なるコンテキストであるベアメタル ファームウェアと同じです。

「プロトスレッド」について読むことを強くお勧めします。スレッドのように聞こえるだけでなく、そうではなく、本体で実行される関数です。(このリンクがあなたを啓発すると信じていますhttp://dunkels.com/adam/pt/

あなたが説明した問題について、私は何も間違っていないと思います。

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

于 2016-10-28T16:43:51.773 に答える