時間管理

 

[S] set_tim(システムクロック設定)

・必要とするビット数を一度に処理できない環境にある場合はpk_timを構造体として扱う

・システムクロックの初めは1985年1月1日0時(GMT)を推奨(インプリメント依存)

・システムクロックのビット数は48bitを推奨(インプリメント依存)

・システムクロック変更後に周期起動ハンドラやアラームハンドラが影響を受けるので処理が必要(インプリメント依存)

 

C言語関数

 ER ercd = set_tim( SYSTIME *pk_tim );

引数

 SYSTEM*  pk_tim   現在時刻を示すアドレス

  SYSTEM   systim   システム設定用の現在時刻

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_PAR    pk_timが不正、設定時間が不正

 

[S] get_tim(システムクロック参照)

・必要とするビット数を一度に処理できない環境にある場合はpk_timを構造体として扱う

・システムクロックの初めは1985年1月1日0時(GMT)を推奨(インプリメント依存)

・システムクロックのビット数は48bitを推奨(インプリメント依存)

・システムクロック変更後に周期起動ハンドラやアラームハンドラが影響を受けるので処理が必要(インプリメント依存)

 

C言語関数

 ER ercd = get_tim( SYSTIME *pk_tim );

引数

 SYSTEM*  pk_tim   現在時刻を示すアドレス

戻り値

 ER     ercd    エラーコード

 上記のpk_timの内容

  SYSTEM   systim   システム設定用の現在時刻

エラーの内容

 E_OK    正常終了

 E_PAR    pk_timが不正

 

[S] dly_tsk(タスク遅延)

・dlytimの間WAIT状態(時間経過待ち)になる

・WAIT-SUSPEND状態の間も時間は経過する

C言語関数

 ER ercd = dly_tsk( DLYTIME dlytim );

引数

 DLYTIME  dlytim   遅延時間

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_NOMEM   メモリ不足

 E_PAR    dly<0

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 E_RLWAI   待機中に待機強制解除(rel_wai)を受け付け

 

[S] def_cyc(周期起動ハンドラ定義)

・管理ブロックを確保する

・接続機能が利用可能

・同じcycnoの周期起動ハンドラを再定義することができる

・起動時に静的に定義できる

・exinfの情報はref_cycで取り出せる

C言語関数

 ER ercd = def_cyc( HNO cycno, T_DCYC *pk_dcyc );

引数

 HNO    cycno   周期起動ハンドラ番号

 T_DCYC*  pk_dcyc  周期起動ハンドラ定義情報(NADR = -1(前回の定義解除))

 pk_dcycの中身

  VP     exinf   拡張情報

  ATR    cycatr   周期起動ハンドラ属性(TA_ASM(アセンブラ) or TA_HLNG(高級言語))

  FP     cychdr   周期起動ハンドラアドレス

  UINT    cycact   周期起動ハンドラ活性状態(TCY_OFF(死) or TCY_ON(生))

  CYCTIME  cyctim   周期起動時間間隔

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_NOMEM   管理ブロック用の領域が確保できない

 E_RSATR   cycatrが不正

 E_PAR    cycno、pk_dcyc、cychdr、cycact、cyctim、が不正

  

[E] act_cyc(周期起動ハンドラ活性制御)

・def_cycで定義したcycactを変更する

・TCY_INIで経過時間を初期化する

C言語関数

 ER ercd = act_cyc( HNO cycno, UINT cycact );

引数

 HNO    cycno   周期起動ハンドラ番号

 UINT    cycact   周期起動ハンドラ活性状態(TCY_OFF(死) || TCY_ON(生) | TCY_INI(初期化))

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_PAR    cycno、cycactが不正

 E_NOEXS   cycnoの周期起動ハンドラが定義されていない

 

[E] ref_cyc(周期起動ハンドラ状態参照)

C言語関数

 ER ercd = ref_cyc( T_RCYC *pk_rcyc, HNO cycno );

引数

 HNO    cycno   周期起動ハンドラ番号

 T_RCYC*  pk_rcyc  周期起動ハンドラ状態アドレス

戻り値

 ER     ercd    エラーコード

 pk_rcycの中身

  VP     exinf   拡張情報

  CYCTIME  lfttim   次のハンドラ起動までの時間

  UINT    cycact   周期起動ハンドラ活性状態

エラーの内容

 E_OK    正常終了

 E_PAR    cycnopk_rcycが不正

 E_NOEXS   cycnoの周期起動ハンドラが定義されていない

 

[E] def_alm(アラームハンドラ定義)

・管理ブロックを確保する

・同じcycnoのアラームハンドラを再定義することができる

・起動時に静的に定義できる

・exinfの情報をref_almで取り出せる

C言語関数

 ER ercd = def_alm( HNO almno, T_DALM *pk_dalm );

引数

 HNO    cycno   アラームハンドラ番号

 T_DALM*  pk_dalm  アラームハンドラ情報(NADR = -1(前回定義の解除))

 pk_dalmの中身

  VP     exinf   拡張情報

  ATR    almatr   アラームハンドラ属性(TA_ASM(アセンブラ) || TA_HLNG(高級言語))

  FP     almhdr   アラームハンドラアドレス

  UINT    tmmode   起動時間選択(TTM_ABS(絶対時間) || TTM_REL(相対時間))

  CYCTIME  cyctim   周期起動時間間隔

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_NOMEM   管理ブロック用の領域が確保できない

 E_RSATR   almatrが不正

 E_PAR    almno、pk_dalm、almhdr、tmmode、almtimが不正

 

[E] ref_alm(アラームハンドラ状態参照)

C言語関数

 ER ercd = ref_alm( T_RALM *pk_ralm, HNO almno );

引数

 HNO    almno   アラームハンドラ番号

 T_RALM*  pk_ralm  アラームハンドラ状態アドレス

戻り値

 ER     ercd    エラーコード

 pk_ralmの中身

  VP     exinf   拡張情報

  ALMTIME  lfttim   ハンドラ起動までの残り時間

エラーの内容

 E_OK    正常終了

 E_PAR    almno、pk_ralmが不正

 E_NOEXS   almnoのアラームハンドラ定義されていない

 

[E] ret_tmr(タイムハンドラから復帰)

・周期起動ハンドラかアラームハンドラを終了する

・レジスタの管理を行う(アセンブラ)

C言語関数

 void ret_tmr( );

引数

戻り値

 戻らない。

エラーの内容

 E_CTX    タイマハンドラ以外から発行(インプリメント依存) 

 

システム管理

 

[R] get_ver(バージョン参照)

C言語関数

 ER ercd = get_ver( T_VER *pk_ver );

引数

 T_VER*   pk_ver   バージョン情報のアドレス

戻り値

 ER     ercd    エラーコード

 pk_verの中身

  UH     maker   OS製造メーカー

  UH     id     OS型式番号

  UH     spver   ITRON仕様バージョン

  UH     prver   OS製品バージョン

  UH     prno[4]  製品番号

  UH     cpu    CPU情報

  UH     var    バリエーション

エラーの内容

 E_OK    正常終了

 E_PAR    pk_verが使用できない値

 

[E] ref_sys(システム状態参照)

C言語関数

 ER ercd = ref_sys( T_RSYS *pk_rsys );

引数

 T_RSYS*  pk_rsys  システム情報のアドレス

戻り値

 ER     ercd    エラーコード

 上記のpk_rsysの内容

  INT    sysstat  システム状態(TSS_TSK(通常) || TSS_DDSP(ディスパッチ禁止) || TSS_LOC(割込みとディスパッチ禁止) || TSS_INDP(割込みハンドラ、タイマハンドラ実行中))

エラーの内容

 E_OK    正常終了

 E_PAR    pk_rsysが不正

 

[C] ref_cfg(コンフィグレーション情報参照)

C言語関数

 ER ercd = ref_cfg( T_RCFG *pk_rcfg );

引数

 T_RCFG*  pk_rcfg  コンフィグレーション情報のアドレス

戻り値

 ER     ercd    エラーコード

 pk_rcfgの中身

  ハード依存の情報

エラーの内容

 E_OK    正常終了

 E_PAR    pk_rcfgが不正

 

[C] def_svc(拡張SVCハンドラ定義)

C言語関数

 ER ercd = def_svc( FN s_fncd, T_DSVC *pk_dsvc );

引数

 FN     s_fncd   拡張機能コード

 T_DSVC*  pk_dsvc  拡張SVCハンドラ定義情報

 pk_dsvcの中身

  ATR    svcatr   拡張SVCハンドラ属性

  FP     svchdr   拡張SVCハンドラアドレス

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_NOMEM   管理ブロック用の領域が確保できない

 E_RSATR   svcatrが不正

 E_PAR    s_fncd、pk_dsvc、svchdrが不正

 

[C] def_exc(例外ハンドラ定義)

C言語関数

 ER ercd = def_exc( UINT exvkind, T_DEXC *pk_dexc );

引数

 INT    exckind  例外の種類

 T_DEXC*  pk_dexc  例外ハンドラ定義情報

 pk_dexcの中身

  ATR    excatr   例外ハンドラ属性

  FP     exchdr   例外ハンドラアドレス

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_NOMEM   管理ブロック用の領域が確保できない

 E_RSATR   excatrが不正

 E_PAR    exckind、pk_dexc、exchdrが不正

 

 

ネットワークサポート管理

 

[SN] nrea_dat(他ノードからのデータ読み出し)

・途中までしか転送できなかったときdatsz>reasz

C言語関数

 ER ercd = nrea_dat( INT *p_reasz, VP dstadr, NODE srcnode, VP srcadr, INT datsz );

引数

 NODE    srcnode  転送元のノード番号(TND_SELF = 0(自ノード)、TND_OTHER = -1(デフォルトの他ノード))

 VP     srcadr   転送元のアドレス

 VP     dstadr   転送先のアドレス

 INT    datsz   転送予定データの大きさ

戻り値

 ER     ercd    エラーコード

 INT    reasz   転送データの大きさ

エラーの内容

 E_OK    正常終了(途中終了でもエラーにならない)

 E_PAR    dstadr、datszが不正

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 EN_PAR   対象ノードでsrcadr、datszがサポートされていない

 

[SN] nwri_dat(他ノードへのデータ書き込み)

・途中までしか転送できなかったときdatsz>wrisz

C言語関数

 ER ercd = nwri_dat( INT *p_wrisz, NODE dstnode, VP dstadr, VP srcadr, INT datsz );

引数

 VP     srcadr   転送元のアドレス

 NODE    srcnode  転送先のノード番号(TND_SELF = 0(自ノード)、TND_OTHER = -1(デフォルトの他ノード)インプリメント依存)

 VP     dstadr   転送先のアドレス

 INT    datsz   転送予定データの大きさ

戻り値

 ER     ercd    エラーコード

 INT    reasz   送ったデータの大きさ

エラーの内容

 E_OK    正常終了

 E_PAR    srcadr、datszが不正

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 EN_PAR   対象ノードでdstadr、datszが不正

 

[SN] nget_nod(自ノード番号参照)

C言語関数

 ER ercd = nget_nod( NODE *p_node );

引数

戻り値

 ER     ercd    エラーコード

 NODE    node    ノード番号

エラーの内容

 E_OK    正常終了

 

[SN] nget_ver(他ノードのバージョン参照)

C言語関数

 ER ercd = nget_ver( T_VER *pk_ver, NODE node );

引数

 NODE    node    ノード番号(TND_SELF = 0(自ノード)、TND_OTHER = -1(デフォルトの他ノード)インプリメント依存)

 T_VER*   pk_ver   バージョン情報のアドレス

戻り値

 ER     ercd    エラーコード

 pk_verの中身

  UH     maker   OS製造メーカー

  UH     id     OS型式番号

  UH     spver   ITRON仕様バージョン

  UH     prver   OS製品バージョン

  UH     prno[4]  製品番号

  UH     cpu    CPU情報

  UH     var    バリエーション

エラーの内容

 E_OK    正常終了

 E_PAR    pk_verが不正

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行