タスク例外
今回は、タスク例外コード0のタスク例外の利用例を示します。例外コードが0以外のタスク例外については longjmp() などを用いて復帰処理なども行うことができ、これをあわせて利用することで柔軟な例外処理が可能となりますが、複雑なので本記事では省略します。
今回は、タスク例外コード0のタスク例外の利用例を示します。例外コードが0以外のタスク例外については longjmp() などを用いて復帰処理なども行うことができ、これをあわせて利用することで柔軟な例外処理が可能となりますが、複雑なので本記事では省略します。
Cortex-M3では、各割り込みの優先順位をユーザーが変更することができます。それも8段階や16段階ではなく256段階で設定することが可能です。設定には、割り込み優先度レジスタを使います。
可変長メモリプールは、任意のサイズのメモリブロックを管理するための機能です。固定長メモリプールは、固定サイズのメモリブロックを管理するための機能です。メモリブロックのサイズが固定である以外は、基本的に可変長メモリプールと同じ機能です。
Cortex-M3のマニュアルを読みますと、テールチェイン、横取り、後着という言葉が出てきます。例外処理優先順位によって発生する例外処理のタイミングを現す言葉です。各々の意味を簡単に説明すると以下のようになります。
ランデブが成立すると、ランデブを呼出したタスクから受け付けたタスクへ、呼出メッセージが渡されます。具体的には、呼出側タスクがtk_cal_porで指定したmsg以下の領域のcmsgszバイトが、受付側タスクがtk_acp_porで指定したmsg以下の領域にコピーされます。
例外のタイプには、リセット、割り込み、フォールトなどがあります。例外処理は突如として発生しますので、命令の実行に対し非同期で起こります。しかし、フォールトだけは、命令の実行によってエラー条件が発生したことによる例外ですので、原因となった命令に同期して発生することが基本です。
今回はミドルウェアについて説明します。ミドルウェアとは、リアルタイムOSとアプリケーションの中間に位置するソフトウェアです。具体的にはファイルシステムやネットワークのプロトコルスタック(TCP/IP)のように、リアルタイムOSに機能を追加するモジュールのことです。
Cortex-M3には、エンディアンを設定するピンBIGEND (注意:マイコンのピンではありません。論理モジュールの外部との信号線の名前です)があります。これを使用するとリトルエンディアン、またはビッグエンディアン形式のいずれかを選択することができます。
T-Kernelではセマフォだけでなくミューテックスも提供しています。ミューテックスはセマフォと同様にタスク間の排他制御を行うための機能を提供しますが、排他制御に伴って発生する上限のない優先度逆転を防ぐ機構をサポートします。