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以下の場合でも「メモリ取得」ファンクションで確保した領域にパラメータ値を格納することは可能です。

 「メモリ取得」ファンクションによって確保したパラメータエリアの解放は、「メッセージ追加」ファンクションが正常終了した場合は宛先のプロセス(「メッセージ取得」ファンクションを呼び出すプロセス)で行います。「メッセージ追加」ファンクションがエラーを返した場合は呼び出し元プロセス(「メッセージ追加」ファンクションを呼び出したプロセス)で解放して下さい。