Windows版 iTRONサービスコールの作成 (データキュー)
(その3)
データキューを削除するサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
del_dtq | データキューを削除します。 |
データキューを削除するには以下のサービスコールを使用します。
ER del_dtq( ID dtqid )
引数 | 説明 |
---|---|
dtqid | データキューID番号。 |
戻り値 | 説明 |
---|---|
E_OK | 正常終了。 |
E_ID | 範囲外のデータキューID番号。 |
E_NOEXS | 指定したデータキューID番号は登録されていない。 |
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
* @brief データキューの削除.
*
* @param [in] dtqid データキューID番号.
*
* @retval エラーコード.
*/
ER del_dtq( ID dtqid )
{
ER ercd;
wi_CommonLock();
//! データキューを削除する.
ercd = wi_DeleteDataQueue( dtqid );
wi_CommonUnlock();
return ercd;
}
削除するデータキューのID番号を引数としてデータキュー削除関数を呼び出します。
データキュー削除関数
データキュー削除関数のソースコードは以下のとおりです。
/****************************************************************************/
/*!
* @brief データキューの削除.
*
* @param [in] id データキューID番号.
*
* @retval エラーコード.
*/
ER wi_DeleteDataQueue( INT id )
{
ER ercd;
WIDTQOBJ *p;
//! データキューIDのオブジェクトを取得する.
p = (WIDTQOBJ *)wi_FindObject( id, TMAX_MAXDTQ, ObjList, &ercd );
if( !p ){
return ercd;
}
//! リストから該当するデータキューを取り除く.
wi_DelObject( (WIHDR *)p, &ObjList );
//! 待ちタスクキューを解放する.
wi_WakeupDelResource( p->SndWaitQue );
wi_WakeupDelResource( p->RcvWaitQue );
//! データキューバッファを解放する.
SAFE_RELEASE( p->QueBuf );
//! データキュー・オブジェクト構造体を解放する.
SAFE_RELEASE( p );
return ercd;
}
データキュー削除関数は以下のような処理を行います。
- 引数で指定されたデータキューID番号に該当するデータキュー・オブジェクトを取り出します。
- データキュー・オブジェクトのリストから削除するオブジェクトを外します。
- 削除するデータキューからのデータ送受信待ちをしているタスクを全て起床させます。
- データキュー・バッファの為に確保したメモリを解放します。
- データキュー・オブジェクトのために確保したメモリを解放して処理を終了します。