2017-03-25 7 views

答えて

1

任意のアーキテクチャでISRから関数を呼び出すことは合法ですが、必ずしもそうとは限りません。

問題の関数が割り込みと複数のスレッドコンテキスト内での実行に適しているかどうかを検討する必要があります。例えば、再入可能である必要があり、アトミックに、または一貫性を保証する方法で共有リソースにアクセスしなければならず、もちろんブロックしたり、不定期に待ってはいけません。

また、割り込み処理時間の点で関数呼び出しと関数呼び出しオーバーヘッド自体のスタック要件を考慮する必要があります。インライニング機能が考慮されることがあります。

+1

8051はリエントラント/再帰関数があまり好きではないことに注意してください。アーキテクチャの制限的なスタックとポインタ算術のために、Cコンパイラはローカル変数の真のスタックストレージの代わりに静的にオーバーレイを割り当てます。したがって、特定のコンパイラとその設定に応じて、呼び出し元のツリーには、再入可能な呼び出し規約を使用するように特別なマークを付ける必要があります。 – doynax

+0

@doynax:良い点 - スタック要件を考慮する必要性について言及し、可能であっても必ずしもそうとは限りません。このような制約の厳しい環境で特に当てはまりますが、アーキテクチャー固有の考慮事項のいくつかについて詳しく説明しました。ありがとう。 – Clifford

関連する問題