`時間管理`

`[S]` `set_tim``（システムクロック設定）`

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

`・システムクロックの初めは１９８５年１月１日０時（ＧＭＴ）を推奨（インプリメント依存）`

`・システムクロックのビット数は４８bitを推奨（インプリメント依存）`

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

`Ｃ言語関数`

`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を構造体として扱う`

`・システムクロックの初めは１９８５年１月１日０時（ＧＭＴ）を推奨（インプリメント依存）`

`・システムクロックのビット数は４８bitを推奨（インプリメント依存）`

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

`Ｃ言語関数`

`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状態の間も時間は経過する`

`Ｃ言語関数`

`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で取り出せる`

`Ｃ言語関数`

`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で経過時間を初期化する`

`Ｃ言語関数`

`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``（周期起動ハンドラ状態参照）`

`Ｃ言語関数`

`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で取り出せる`

`Ｃ言語関数`

`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``（アラームハンドラ状態参照）`

`Ｃ言語関数`

`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``（タイムハンドラから復帰）`

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

`・レジスタの管理を行う（アセンブラ）`

`Ｃ言語関数`

`void ret_tmr( );`

`引数`

`戻り値`

`戻らない。`

`エラーの内容`

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

`システム管理`

`[R] get_ver``（バージョン参照）`

`Ｃ言語関数`

`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``（システム状態参照）`

`Ｃ言語関数`

`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``（コンフィグレーション情報参照）`

`Ｃ言語関数`

`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ハンドラ定義）`

`Ｃ言語関数`

`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``（例外ハンドラ定義）`

`Ｃ言語関数`

`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`

`Ｃ言語関数`

`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`

`Ｃ言語関数`

`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``（自ノード番号参照）`

`Ｃ言語関数`

`ER ercd = nget_nod( NODE *p_node );`

`引数`

`戻り値`

`ER　　　　 ercd　　　 エラーコード`

`NODE　　　 node　　　 ノード番号`

`エラーの内容`

`E_OK　　　　正常終了`

`[SN]` `nget_ver``（他ノードのバージョン参照）`

`Ｃ言語関数`

`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　　　 タスク独立部またはディスパッチ禁止状態で実行`