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