| ●Question 1 |
|
|
| ◆Answer 1 |
これは、「2.1.9 相対時間とシステム時刻」で説明している相対時間の扱いに関する共通規定を、起動位相について適用して表現したものです。 相対時間について、少し補足します。 μITRON4.0仕様では、実際にその時間イベントが発生するのは、指定した相対時間が経過した後でなければなりません。つまり、以下の関係を保証しなければなりません。 (時間イベントが発生するまでの実時間)≧(指定した相対時間) ほとんどのカーネルでは、固定周期のタイマ割込みを使用するので、以下その前提で例を使って説明します。 例1: システム時刻の単位時間が1ミリ秒、タイマ割込み周期も1ミリ秒の場合で、システム時刻=2の時にtslp_tsk(3)を呼び出したケースを考えます。単純に考えると、2+3=5でシステム時刻5でタイムアウトすれば良いように思ってしまうかもしれませんが、そうではありません。システム時刻が2というのは、システム時刻が2に更新されてからいくらか実際に時間αが経過しています。αは、(0<α≦タイマ割込み周期時間=1ミリ秒)の範囲を取り得ますが、当然ながらカーネルはαを認識できません。したがって、上式を確実に満たすには、次回のシステム時刻3への更新タイミングを起点に相対時間3を計測する必要があります。その結果、本例ではシステム時刻6への更新タイミングでタイムアウトする動作が正しいことになります。 ![]() 例2: システム時刻の単位時間が1ミリ秒、タイマ割込み周期が5ミリ秒の場合で、システム時刻=10の時にtslp_tsk(11)を呼び出したケースでは、下図のようにシステム時刻25への更新タイミングでタイムアウトする動作が正しいことになります。
|
| ページTOPへ戻る |
| ●Question2 |
|
周期起動ハンドラの起動タイミングが仕様書を見ても分かりづらいので、解説をお願いします。 |
| ◆Answer 2 |
| ページTOPへ戻る |
| ●Question3 |
|
ディスパッチ禁止状態では、タスク例外処理ルーチンは起動されるでしょうか? |
| ◆Answer 3 |
これは、仕様書「4.3 タスク例外処理機能」の【補足説明】にありますように、起動すべき条件が揃った場合に、タスク例外処理ルーチンは起動されます。タスク例外処理ルーチンの起動時と終了時でディスパッチ禁止状態は変化しないことは仕様で規定しています。ここで注意しなければならないのは、タスク例外処理ルーチン内でディスパッチ許可にする要求を行うと、タスク切替が発生する可能性があるということです。 したがって、タスク例外処理ルーチン内でディスパッチ許可状態にする要求を行う場合、そのタスク例外処理ルーチンを定義するタスクがディスパッチ禁止状態にする場合、ディスパッチ禁止状態にしている処理の間、タスク例外処理禁止状態にする必要があります。 |
| ページTOPへ戻る |
| ●Question4 |
|
CPUロック状態において、待ち状態になる可能性があるサービスコールを要求した場合はどうなるでしょうか? |
| ◆Answer 4 |
これは、仕様書「3.5.4 CPUロック状態」にありますように、CPUロック状態では呼び出せるサービスコールが限定されています。限定されているサービスコール以外のサービスコールを要求した場合は、E_CTXエラーになります。 ただし、E_CTXエラーは実装定義で省略されることがあります。省略された場合の動作は未定義です。 |
| ●Question5 |
|
E_CTXエラーが返却されるのはどのようなときでしょうか? |
| ◆Answer 5 |
E_CTXエラーは、サービスコールを呼び出したコンテキストが、そのサービスコールを呼び出せる状態にないことを示すエラーです。 具体的な状況例を以下に示します。
ただし、E_CTXエラーは、呼出しコンテキストエラークラスに属し、その検出は実装定義で省略することができます(仕様書 2.3.2 ITRON仕様共通定数 (2)メインエラーコード)。つまり、E_CTXエラーが返るかどうかは、カーネル実装毎に異なります。 検出を実装定義で省略可能なエラークラスには、この他に内部エラークラス、未サポートエラークラス、パラメータエラークラスがあります。エラーの検出を省略したカーネルの場合、そのエラー条件が発生した場合の振る舞いは未定義です(仕様書 2.1.6 サービスコールの返値とエラーコード)。 |
| ページTOPへ戻る |
| ●Question6 |
スタンダードプロファイルにおいて、タスクや周期ハンドラ、アラームハンドラの起動時に動的なパラメータ(変数)を渡すには、どうすればよいのでしょうか? |
| ◆Answer 6 |
静的APIによるタスクの生成時に、拡張情報(exinf)へグローバル変数のポインタを指定し、exinfを介してグローバル変数を参照する方法があります。 |
| ページTOPへ戻る |