System 0x2e
メッセージ追加
【機能】
システムメッセージキューにメッセージを追加します。
【C関数例】
int PutMsg( int *msg )
|
{
|
return trapa_svc( 0x2e, pid, msg );
|
}
|
【入力】
msg
| メッセージ
| メッセージを格納した領域の先頭アドレス
|
| +0
+1
+2
+3
| | | |
msg+00
宛先プロセスID
|
自プロセスID
| |
msg+04
メッセージ種別
| コマンドコード
パラメータ長
| | |
msg+08
パラメータまたはパラメータの先頭アドレス
| |
メッセージ種別
| 0
| 要求メッセージ
|
| 1
| 応答ーメッセージ
|
| 2
| エラーメッセージ
|
コマンドコード
| 0
| 要求メッセージ
|
| 0〜144
| システムで予約
|
| 145〜255
| ユーザプログラム間で利用可能
|
【出力】
リターンコード
| OK
| 正常終了
|
| ERR_PARAM
| パラメータエラー
|
| ERR_PID
| 不正プロセスID
|
| ERR_QUEOVER
| メッセージキュー満杯
|
【解説】
システムのメッセージキューにメッセージを追加し、プロセス制御の切り替えを行います。
システムは、各プロセスID毎に15個のメッセージキューを持ち、このキューとプロセスIDによりプロセスを制御します。なお本ファンクション発行元プロセスに制御が戻った場合にリターンします。
本ファンクションで受け渡すパラメータは、「メモリ取得」ファンクションで確保したメモリ領域を使用して下さい。パラメータの指定方法につきましては【注意】TP「メッセージリファレンス」を参照して下さい。
メッセージの先頭アドレスがNULLの場合、パラメータエラーを返します。
自分宛のメッセージ追加は、不正プロセスIDを返します。
【関連項目】
メモリ取得 メモリ解放 メッセージ取得
【注意】
システムプロセスはメッセージのパラメータ長によって以下のようにパラメータの格納・参照を行ないます。
パラメータ長が4以下の場合 :メッセージのパラメータ部にはパラメータの値が直接格納されます。
パラメータ長が4を超える場合 :パラメータの値は「メモリ取得」ファンクションで確保した領域に格納され、メッセージのパラメータ部には「メモリ取得」ファンクションで返されたメモリ管理テーブルへのポインタが格納されます。
ユーザプログラム間で独自に定義するメッセージ(コマンドコードが145〜255)の場合、パラメータ長が4以下の場合でも「メモリ取得」ファンクションで確保した領域にパラメータ値を格納することは可能です。
「メモリ取得」ファンクションによって確保したパラメータエリアの解放は、「メッセージ追加」ファンクションが正常終了した場合は宛先のプロセス(「メッセージ取得」ファンクションを呼び出すプロセス)で行います。「メッセージ追加」ファンクションがエラーを返した場合は呼び出し元プロセス(「メッセージ追加」ファンクションを呼び出したプロセス)で解放して下さい。