Windows版 iTRONサービスコールの作成 (時間管理機能)
(その4)
周期起動ハンドラを起動または停止するサービスコールは以下のとおりです。
サービスコール名 | 説明 |
---|---|
act_cyc | 周期起動ハンドラの活性制御を行います。(Ver3.0のみ) |
sta_cyc | 周期起動ハンドラを起動します。(Ver4.0のみ) |
stp_cyc | 周期起動ハンドラを停止します。(Ver4.0のみ) |
周期起動ハンドラの活性制御を行うには以下のサービスコールを使用します。
ER act_cyc( HNO cycno, UINT cycact )
引数 | 説明 |
---|---|
cycno | 周期ハンドラ番号。 |
pk_dcyc |
周期ハンドラの活性状態。 周期ハンドラの起動・停止を指定します。
TCY_INIを指定した場合は、周期カウンタを初期化します。 |
戻り値 | 説明 |
---|---|
E_OK | 正常終了。 |
E_ID | 範囲外の周期ハンドラID番号。 |
E_NOEXS | 指定した周期ハンドラID番号は登録されていない。 |
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
* @brief 周期ハンドラの活性制御.
*
* @param [in] cycno 周期ハンドラ番号.
* @param [in] cycact 周期ハンドラ活性情報.
*
* @retval エラーコード.
*/
ER act_cyc( HNO cycno, UINT cycact )
{
ER ercd;
wi_CommonLock();
//! 周期ハンドラの起動/停止を設定する.
ercd = wi_ActionCycleHadler( cycno,
((cycact & TCY_ON ) != 0) ? TRUE : FALSE,
((cycact & TCY_INI) != 0) ? TRUE : FALSE );
wi_CommonUnlock();
return ercd;
}
周期ハンドラを起動するには以下のサービスコールを使用します。
ER sta_cyc( ID cycid )
引数 | 説明 |
---|---|
cycid | 周期ハンドラID番号。 |
戻り値 | 説明 |
---|---|
E_OK | 正常終了。 |
E_ID | 範囲外の周期ハンドラID番号。 |
E_NOEXS | 指定した周期ハンドラID番号は登録されていない。 |
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
* @brief 周期ハンドラの起動.
*
* @param [in] cycid 周期ハンドラID番号.
*
* @retval エラーコード.
*/
ER sta_cyc( ID cycid )
{
ER ercd;
wi_CommonLock();
//! 周期ハンドラを起動する.
ercd = wi_ActionCycleHadler( cycid, TRUE, FALSE );
wi_CommonUnlock();
return ercd;
}
引数を「周期ハンドラの起動」にして、周期起動ハンドラの活性制御関数を呼び出します。
周期起動ハンドラを停止するには以下のサービスコールを使用します。
ER stp_cyc( ID cycid )
引数 | 説明 |
---|---|
cycid | 周期ハンドラID番号。 |
戻り値 | 説明 |
---|---|
E_OK | 正常終了。 |
E_ID | 範囲外の周期ハンドラID番号。 |
E_NOEXS | 指定した周期ハンドラID番号は登録されていない。 |
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
* @brief 周期ハンドラの停止.
*
* @param [in] cycid 周期ハンドラID番号.
*
* @retval エラーコード.
*/
ER stp_cyc( ID cycid )
{
ER ercd;
wi_CommonLock();
//! 周期ハンドラを停止する.
ercd = wi_ActionCycleHadler( cycid, FALSE, FALSE );
wi_CommonUnlock();
return ercd;
}
引数を「周期ハンドラの停止」にして、周期起動ハンドラの活性制御関数を呼び出します。
周期起動ハンドラの活性制御関数
周期起動ハンドラの活性制御関数のソースコードは以下のとおりです。
/****************************************************************************/
/*!
* @brief 周期ハンドラの活性制御.
*
* @param [in] no 周期ハンドラ番号.
* @param [in] act TRUE = 起動 / FALSE = 停止.
* @param [in] init TRUE = 初期化要求.
*
* @retval エラーコード.
*/
ER wi_ActionCycleHadler( INT no, BOOL act, BOOL init )
{
ER ercd;
WICYCOBJ *p;
//! 周期ハンドラ番号のオブジェクトを取得する.
p = (WICYCOBJ *)wi_FindObject( no, TMAX_MAXCYC, ObjList, &ercd );
if( !p ){
return ercd;
}
//! 周期ハンドラの活性情報をセットする.
p->Active = act;
//! 周期カウンタを初期化する.
if( init ){
p->StartTime = wi_GetSystemTime();
}
return E_OK;
}
周期起動ハンドラの活性制御関数は以下のような処理を行います。
- 引数で指定された周期ハンドラのID番号に該当する周期ハンドラ・オブジェクトを取り出します。
- 周期ハンドラの活性情報(起動または停止情報)をオブジェクトに設定します。
- 周期カウンタを初期化する場合は、オブジェクトの周期カウンタをクリアします。