Windows版iTRONサービスコールの作成 (可変長メモリプール)
(その3)

可変長メモリプールを削除する

可変長メモリプールを削除するサービスコールは以下のとおりです。


サービスコール名説明
del_mpl

可変長メモリプールを削除します。

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

可変長メモリプールを削除する

可変長メモリプールを削除するには以下のサービスコールを使用します。



    ER del_mpl( ID mplid )
	

引数説明
mplid

メモリプールID番号。

戻り値説明
E_OK

正常終了。

E_ID

範囲外のメモリプールID番号。

E_NOEXS

指定したメモリプールID番号は登録されていない。


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


/****************************************************************************/
/*!
 *  @brief  可変長メモリプールの削除.
 *
 *  @param  [in]    mpfid   メモリ・プールID番号.
 *
 *  @retval エラーコード.
 */
ER      del_mpl( ID mplid )
{
    ER ercd;

    wi_CommonLock();

    //! 可変長メモリプールを削除する.
    ercd = wi_DeleteVarMemPool( mplid );

    wi_CommonUnlock();
    return ercd;
}
	

削除するメモリプールのID番号を引数として可変長メモリプール削除関数を呼び出します。

可変長メモリプール削除関数

可変長メモリプール削除関数のソースコードは以下のとおりです。



/****************************************************************************/
/*!
 *  @brief  可変長メモリプールの削除.
 *
 *  @param  [in]    id      メモリプールID番号.
 *
 *  @retval エラーコード.
 */
ER      wi_DeleteVarMemPool( INT id )
{
    ER          ercd;
    WIMPLOBJ    *p;

    //! メモリプールIDのオブジェクトを取得する.
    p = (WIMPLOBJ *)wi_FindObject( id, TMAX_MAXMPL, ObjList, &ercd );
    if( !p ){
        return ercd;
    }
    //! リストから該当するメモリプールを取り除く.
    wi_DelObject( (WIHDR *)p, &ObjList );

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

    //! メモリプールのバッファを解放する.
    SAFE_RELEASE( p->MemBuf );

    //! 可変長メモリプール・オブジェクト構造体を解放する.
    SAFE_RELEASE( p );
    return E_OK;
}
	

可変長メモリプール削除関数は以下のような処理を行います。

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


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