[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(itron-club 1657) Re: 割り込み 処理の実装方法



  木元です。フォローありがとうございます。リプライが遅くなり申しわけあ
りません。

  TRAPと割り込みの処理が共通になることで、コードはシンプルになりました。
M32102は割り込みに関する処理のほとんどをソフトウェアでおこなわなければ
ならないため、コードがそれほど増えたわけでもなく、増えた内容もすべてレ
ジスタ間演算なので負荷は少ないと思います。むしろ苦労したのは、割り込み
ハンドラの先頭で、レジスタやフラグを壊さずにスタックを判別して、もし初
段の割り込みならタスクスタックにPUSHするようにコードを書くことでした。
このため、1レベルあたりのスタックサイズが4バイト増えています。

  ところで、ITRONの一般論として、割り込みハンドラからリターンするとき
やシステムコールが呼び出されたときにタスクが切り替わる割合というのは、
どんなものなのでしょうか。タスクが切り替わる条件はすべてシステムコール
呼び出しですが、自分が待ちに入るかまたは高優先度のタスクを実行可能にし
た場合であって、ディスパッチ禁止状態や割り込み禁止状態・割り込みハンド
ラ内ではない必要があります。私の実装では、割り込みハンドラとシステムコー
ルのリターン時にタスク切り替えのチャンスがあり、ここでタスクスイッチ時
のスタックの積み直し時間を節約するかわりに、すべての割り込みハンドラと
システムコールに少しずつ負担をかけている形になっています。もし、割り込
みハンドラやシステムコールからのリターン時にタスクが切り替わることがあ
まりないなら、節約分よりも負担の方が大きいことになります。

pai_