ユーティリティ機能

ユーティリティ機能は、T-Kernel上のアプリケーション、ミドルウェア、デバイスドライバなどプログラム全般から利用される共通性の高い機能である。

ユーティリティ機能は、ライブラリ関数またはC言語のマクロで提供される。

注意T-Kernel 1.0との差異
 

T-Kernel 2.0で追加された機能である。

オブジェクト名設定

オブジェクト名設定のAPIは、C言語のマクロで提供され、タスク独立部およびディスパッチ禁止・割込み禁止の状態から呼び出すことができる。

SetOBJNAME - オブジェクト名設定

C言語インタフェース

#include <tk/tkernel.h>

void SetOBJNAME (void *exinf , CONST UB *name );

パラメータ

void* exinf Extended Information拡張情報を設定する変数
CONST UB* name Object Name設定するオブジェクト名

利用可能なコンテキスト

タスク部準タスク部タスク独立部

解説

name で指定される4文字以下のASCII文字列を、1つの32ビットデータと解釈して、exinf に格納する。

本APIはC言語のマクロで定義されており、exinf はポインタではない。変数を直接記載する。

補足事項

本APIを使うことにより、T-Kernelの各オブジェクトの拡張情報 exinf の中に、個々のオブジェクトに対するASCII文字列の名称(タスク名など)を設定することができる。デバッガ等でオブジェクトの状態を表示する際、exinf の値をASCII文字列として表示することにより、本APIによって設定されたオブジェクトの名称を表示できる。

例 7. SetOBJNAMEの使用例

T_CTSK  ctsk;
...
/* ctskのタスクに "TEST" のオブジェクト名を設定 */
SetOBJNAME(ctsk.exinf, "TEST");
task_id = tk_cre_tsk ( &ctsk );

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

高速ロック・マルチロックライブラリ

高速ロック・マルチロックライブラリは、デバイスドライバやサブシステムの中において、複数タスク間の排他制御をより高速に行うためのライブラリである。排他制御を行うには、セマフォやミューテックスを使うこともできるが、高速ロックはT-Kernel/SMのライブラリ関数として実装されており、待ちに入らない場合のロック獲得の操作を特に高速に処理する。

高速ロック・マルチロックライブラリのうち、高速ロックは、セマフォやミューテックスよりも高速な排他制御用バイナリセマフォである。一方の高速マルチロックは、独立した排他制御用バイナリセマフォを32個あわせて一つのオブジェクトにしたものであり、0番~31番のロック番号で区別する。

たとえば10箇所で排他制御を行う場合、10個の高速ロックを使う方法でもよいが、1個の高速マルチロックを生成し、その中の0番~9番を使って排他制御を行う方法も可能である。前者の方がより高速になるが、必要リソースの合計は後者の方が少なくて済む。

注意補足事項
 

高速ロックの機能は、ロックの状態を示すカウンタとセマフォにより実装される。また、高速マルチロックの機能は、ロックの状態を示すカウンタとイベントフラグにより実装される。ロック獲得時に待ちに入らない場合は、カウンタ操作のみを行うため、通常のセマフォやイベントフラグよりも高速に処理される。一方、ロック獲得時に待ちに入る場合は、通常のセマフォやイベントフラグの機能を使って待ち状態への移行や待ち行列の管理を行うため、セマフォやイベントフラグより高速というわけではない。高速ロック・マルチロックの機能が有効なのは、排他制御の際に待ちに入る可能性が低い場合である。

注意T-Kernel 1.0との差異
 

T-Kernel 2.0で追加された機能である。

CreateLock - 高速ロックの生成

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = CreateLock (FastLock *lock , CONST UB *name );

パラメータ

FastLock* lock Control Block of FastLock高速ロックの管理ブロック
CONST UB* name Name of FastLock高速ロックの名前

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了
E_NOMEM メモリ不足(管理ブロック用の領域が確保できない)
E_LIMIT 高速ロックの数がシステムの上限を超えた

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速ロックを生成する。

lock は高速ロックの管理のための構造体である。name は高速ロックに付ける名前であるが、NULL でもよい。

高速ロックは排他制御のためのバイナリセマフォであり、なるべく高速に操作できるように実装されている。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

DeleteLock - 高速ロックの削除

C言語インタフェース

#include <tk/tkernel.h>

void DeleteLock (FastLock *lock );

パラメータ

FastLock* lock Control Block of FastLock高速ロックの管理ブロック

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速ロックを削除する。

高速化のため、エラーの検出は行わない。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

Lock - 高速ロックのロック操作

C言語インタフェース

#include <tk/tkernel.h>

void Lock (FastLock *lock );

パラメータ

FastLock* lock Control Block of FastLock高速ロックの管理ブロック

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速ロックに対してロックの操作を行う。

既にロックされていれば、ロック解除されるまで自タスクは待ち状態となり、待ち行列につながれる。待ち行列はタスク優先度順である。

高速化のため、エラーの検出は行わない。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

Unlock - 高速ロックのロック解除操作

C言語インタフェース

#include <tk/tkernel.h>

void Unlock (FastLock *lock );

パラメータ

FastLock* lock Control Block of FastLock高速ロックの管理ブロック

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速ロックに対してロック解除の操作を行う。

対象となる高速ロックを待っているタスクがあれば、待ち行列の先頭のタスクが新たにロックを獲得する。

高速化のため、エラーの検出は行わない。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

CreateMLock - 高速マルチロックの生成

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = CreateMLock (FastMLock *lock , CONST UB *name );

パラメータ

FastMLock* lock Control Block of FastMLock高速マルチロックの管理ブロック
CONST UB* name Name of FastMLock高速マルチロックの名前

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了
E_NOMEM メモリ不足(管理ブロック用の領域が確保できない)
E_LIMIT 高速マルチロックの数がシステムの上限を超えた

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速マルチロックを生成する。

lock は高速マルチロックの管理のための構造体である。name は高速マルチロックに付ける名前であるが、NULL でもよい。

高速マルチロックは、排他制御のための独立したバイナリセマフォを32個並べたものであり、なるべく高速に操作できるように実装されている。32個のバイナリセマフォは、0番~31番のロック番号で指定する。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

DeleteMLock - 高速マルチロックの削除

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = DeleteMLock (FastMLock *lock );

パラメータ

FastMLock* lock Control Block of FastMLock高速マルチロックの管理ブロック

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了
E_PAR パラメータエラー

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速マルチロックを削除する。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

MLock - 高速マルチロックのロック操作

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = MLock (FastMLock *lock , INT no );

パラメータ

FastMLock* lock Control Block of FastMLock高速マルチロックの管理ブロック
INT no Lock Numberロック番号

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了
E_PAR パラメータエラー
E_DLT 待ちオブジェクトが削除された
E_RLWAI 待ち状態強制解除
E_CTX コンテキストエラー

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速マルチロックに対してロックの操作を行う。

no はロック番号で、0~31を使用できる。

既に同じロック番号でロックされていれば、同じロック番号でロック解除されるまで自タスクは待ち状態となり、待ち行列につながれる。待ち行列はタスク優先度順である。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

MLockTmo - 高速マルチロックのロック操作(タイムアウト指定付き)

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = MLockTmo (FastMLock *lock , INT no , TMO tmout );

パラメータ

FastMLock* lock Control Block of FastMLock高速マルチロックの管理ブロック
INT no Lock Numberロック番号
TMO tmout Timeoutタイムアウト指定(ミリ秒)

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了
E_PAR パラメータエラー
E_DLT 待ちオブジェクトが削除された
E_RLWAI 待ち状態強制解除
E_TMOUT タイムアウト
E_CTX コンテキストエラー

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速マルチロックに対して、タイムアウト指定付きのロックの操作を行う。

tmout でタイムアウト時間の指定ができる点以外は、MLock() と同じである。tmout で指定した時間が経過してもロックの獲得ができない場合は、E_TMOUT を返す。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

MLockTmo_u - 高速マルチロックのロック操作(タイムアウト指定付き、マイクロ秒単位)

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = MLockTmo_u (FastMLock *lock , INT no , TMO_U tmout_u );

パラメータ

FastMLock* lock Control Block of FastMLock高速マルチロックの管理ブロック
INT no Lock Numberロック番号
TMO_U tmout_u Timeoutタイムアウト指定(マイクロ秒)

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了
E_PAR パラメータエラー
E_DLT 待ちオブジェクトが削除された
E_RLWAI 待ち状態強制解除
E_TMOUT タイムアウト
E_CTX コンテキストエラー

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速マルチロックに対して、マイクロ秒単位のタイムアウト指定付きのロックの操作を行う。

タイムアウト時間の指定が64ビットのマイクロ秒単位になる点以外は、MLockTmo() と同じである。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。

MUnlock - 高速マルチロックのロック解除操作

C言語インタフェース

#include <tk/tkernel.h>

ER ercd = MUnlock (FastMLock *lock , INT no );

パラメータ

FastMLock* lock Control Block of FastMLock高速マルチロックの管理ブロック
INT no Lock Numberロック番号

リターンパラメータ

ER ercd Error Codeエラーコード

エラーコード

E_OK 正常終了

利用可能なコンテキスト

タスク部準タスク部タスク独立部
×

解説

高速マルチロックに対してロック解除操作を行う。

no はロック番号で、0~31を使用できる。

同じロック番号に対して待ち状態のタスクがあれば、待ち行列の先頭のタスクが新たにロックを獲得する。

T-Kernel 1.0との差異

T-Kernel 2.0で追加されたAPIである。