-------------------------------------------------------------------------- ient_int(),iret_int()の使い方 2022.06.28 ミスポさんに公開を許諾いただきました。(ふぐりん) -------------------------------------------------------------------------- ■FITモジュールの組み込み方法 FITに付属のアプリケーションノート「CS+に組み込む方法」に記載の手順どおり に組み込み、次の「FITモジュールに含まれる割り込みハンドラの扱い」に従って、 割り込みハンドラをOS管理下の割り込みとして使えるように修正してください。 これ以外の注意点は特にございません。 ■FITモジュールに含まれる割り込みハンドラの扱い 次の例のように、FITモジュールの割り込みハンドラに、ient_int()/iret_int() の発行を追加してください。 extern void ient_int(void); extern void iret_int(void); static void sci5_eri5_isr(void *cb_args) { ient_int(); // 追加 eri_handler(&ch5_ctrl); iret_int(); // 〃 } NORTiの割り込みハンドラでは、ent_int()/ret_int()でレジスタの待避/復元を 行うと共にタスクの切り替えが実行されますが、FITモジュールの割り込みハン ドラでは、#pragma interruptでレジスタの待避/復元だけが行われます。そのた め、#pragma interruptと共に使えるient_int()/iret_int()を新たに設けました。 あるいは、ient_int()/iret_int()を使わず、FITモジュールの割り込みハンドラ をOSの管理外とすることもできます。具体的には、カーネルコンフィグレーショ ン用のKNL_LEVELマクロでデフォルトでは6に定義されているカーネルの割り込み 禁止レベルより、高優先としてください。ただし、この場合、割り込みハンドラ では一切のNORTiのシステムコールを発行できません。 ■FITモジュール以外の割り込みハンドラの扱い NORTiの方式の割り込みハンドラを、FITモジュールの方式の割り込みハンドラと 混在することができます。ただし、FITモジュールでは割り込みベクタテーブル がROMに固定されていることが前提ですので、def_inh()による割り込みハンドラ の登録ができません。 そこで、CC-RXの「プロジェクト・ツリー」の「CC-RX(ビルド・ツール)」にある 「リンク・オプション」タブで、「その他」の「その他の追加オプション」に、 -vectn=28=_inthdr,??=????, ... というように、割り込み番号と割り込みハン ドラを指定してください。本サンプルプログラムでは、OSが使用する周期タイマ として、コンペアマッチタイマのハンドラを、このように登録してあります。