Windows版 iTRONサービスコールの作成 (メッセージバッファ)
(その3)

メッセージバッファを削除する

メッセージバッファを削除するサービスコールは以下のとおりです。


サービスコール名説明
del_mbf

メッセージバッファを削除します。

※ Ver3.0、Ver4.0共に同じサービスコールの形式です。

メッセージバッファを削除する

メッセージバッファを削除するには以下のサービスコールを使用します。



    ER del_mbf( ID mbfid )
	

引数説明
mbfid

メッセージバッファID番号。

戻り値説明
E_OK

正常終了。

E_ID

範囲外のメッセージバッファID番号。

E_NOEXS

指定したメッセージバッファID番号は登録されていない。


・サービスコールのソースコードは以下のようになります。


/****************************************************************************/
/*!
 *  @brief  メッセージバッファの削除.
 *
 *  @param  [in]    mbfid   メッセージバッファID番号.
 *
 *  @retval エラーコード.
 */
ER      del_mbf( ID mbfid )
{
    ER ercd;

    wi_CommonLock();

    //! メッセージバッファを削除する.
    ercd = wi_DeleteMsgBuffer( mbfid );

    wi_CommonUnlock();
    return ercd;
}
	

削除するメッセージバッファのID番号を引数としてメッセージバッファ削除関数を呼び出します。

メッセージバッファ削除関数

メッセージバッファ削除関数のソースコードは以下のとおりです。



/****************************************************************************/
/*!
 *  @brief  メッセージバッファの削除.
 *
 *  @param  [in]    id      メッセージバッファID番号.
 *
 *  @retval エラーコード.
 */
ER      wi_DeleteMsgBuffer( INT id )
{
    ER          ercd;
    WIMBFOBJ    *p;

    //! メッセージバッファIDのオブジェクトを取得する.
    p = (WIMBFOBJ *)wi_FindObject( id, TMAX_MAXMBF, ObjList, &ercd );
    if( !p ){
        return ercd;
    }
    //! リストから該当するメッセージバッファを取り除く.
    wi_DelObject( (WIHDR *)p, &ObjList );

    //! 待ちタスクキューを解放する.
    wi_WakeupDelResource( p->SndWaitQue );
    wi_WakeupDelResource( p->RcvWaitQue );

    //! メッセージバッファを解放する.
    SAFE_RELEASE( p->MsgBuf );

    //! メッセージバッファ・オブジェクト構造体を解放する.
    SAFE_RELEASE( p );
    return E_OK;
}
	

メッセージバッファ削除関数は以下のような処理を行います。

  • 引数で指定されたメッセージバッファID番号に該当するメッセージバッファ・オブジェクトを取り出します。
  • メッセージバッファ・オブジェクトのリストから削除するオブジェクトを外します。
  • 削除するメッセージバッファからのメッセージ送受信待ちをしているタスクを全て起床させます。
  • メッセージバッファ・バッファの為に確保したメモリを解放します。
  • メッセージバッファ・オブジェクトのために確保したメモリを解放して処理を終了します。


Windowsは米国Microsoft Corporationの登録商標です。