本ITRONアタッチクラスを利用することにより、ITRONカーネルオブジェクトに対応したJavaオブジェクトを生成できる。 そして、 生成されたJavaオブジェクトを操作する事で対応元のITRONカーネルオブジェクトを操作しJavaプログラムからμITRON仕様リアルタイムカーネルの同期・通信機能を利用できる。
本ITRONアタッチクラスで扱うことのできるITRONカーネルオブジェクトは以下の8つである。
- タスク
- 固定長メモリプール
- 可変長メモリプール
- セマフォ
- イベントフラグ
- メイルボックス
- メッセージバッファ
- ポート
パッケージ名は,
である。
jp.gr.itron.jtron.attach
本ITRONアタッチクラスがどのように使用されるかを以下に述べる。
手順1: JavaプログラムからITRONカーネルオブジェクトに対応したJavaオブジェクトを生成する。その際、ITRONカーネルオブジェクトを新規に作成してJavaオブジェクトを対応させることもできるし、既に存在するITRONカーネルオブジェクトにJavaオブジェクトを対応させることもできる。 手順2: 生成したJavaオブジェクトはITRONカーネルオブジェクトに対応している。 Javaオブジェクトのメソッドを実行すると対応したITRONカーネルオブジェクトに対してμITRONシステムコールを 発行することができるため、JavaからμITRON仕様リアルタイムカーネルの同期・通信機能を利用できる。 手順3: メソッドを実行した結果は、対応しているITRONカーネルオブジェクトへのμITRONシステムコールの結果となる。 μITRONシステムコールにエラーが発生した場合はJava例外機能を使用してエラーの発生を起動元Javaプログラムに通知する。
コンストラクタには以下の3種類が用意されている。
(A) ITRONカーネルオブジェクトのIDを指定して、ITRONカーネルオブジェクトを新規に 作成し対応させる。 (B) ITRONカーネルオブジェクトのIDを指定せずに、 μITRON仕様リアルタイムカーネル に割り当ててもらったIDを持ったITRONカーネルオブジェクトを新規に作成し対応させ る。 (C) 既に存在するITRONカーネルオブジェクトのIDを指定してITRONカーネルオブジェクト に対応させる。
本ITRONアタッチクラスは大きく分けて以下の6種類のクラスで構成される。
(A)ITRONカーネルオブジェクトに対応したクラス (B)ITRONカーネルオブジェクトの生成情報を指定するためのクラス (C)ITRONカーネルオブジェクトの参照情報を返すためのクラス (D)メモリ領域を操作するためのクラス (E)JTRON例外クラス (F)ITRON API互換クラス
これ以降、上記(A),(B),(C)をそれぞれアタッチクラス、 生成情報クラス、状態参照クラスと呼ぶ。
メモリ領域を操作するためのクラスについて説明する。 ITRONアプリケーションとJavaプログラムが協調動作を行う際にITRONアプリケーションとJavaプログラムでデータ交換を行うために、 μITRONシステムコールに合わせてメモリ領域の先頭アドレスを受け渡すことになる。しかしJavaではアドレスを指定してその内容を操作する事ができない。そのためメモリ領域に対応したJavaオブジェクトを生成し、対応したメモリ領域を操作できるようした。そのためのクラスがメモリ領域を操作するためのクラスである。
JTRON例外クラスとは本ITRONアタッチクラスを使用した際にITRONカーネルオブジェクトとの同期・通信にエラーが発生した場合に発生する例外クラスである。
ITRON API互換クラスとは、Javaオブジェクトを生成することなく、μITRONシステムコールと互換するAPIをJavaのstaticメソッドとして提供するために用意したクラスである。
以下にアタッチクラスを列挙する。
(A)Task (B)FixedMemoryPool (C)VariableMemoryPool (D)Semaphore (E)EventFlag (F)MailBox (G)MessageBuffer (H)Port
以下にメモリ領域を操作するためのクラスを列挙する。
(A)ItronMemory (B)ItronFixedMemory (C)ItronVariableMemory (D)Rendezvous
以下にJTRON例外クラスを列挙する。
(A)JTRONException
以下にITRON API互換クラスを列挙する。
(A)ItronApi
アタッチクラスの親クラスとなるAttachBasicについて説明する。
AttachBasicとは以下のフィールドとメソッドを持つ。
AttachBasic フィールド (A) int Id 対応元のITRONカーネルオブジェクトのID メソッド (A) public int getId() 対応元のITRONカーネルオブジェクトのIDを返す。
(1)クラス名、親クラス public class Task extends AttachBasic (2)説明 ITRONタスクを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public Task (int taskId) throws JTRONException タスクIDを与えて既存のタスクにアタッチするオブジェクトを生成する。 (B) public Task (Thread thread) throws JTRONException スレッドを与えてスレッドにマッピングされたタスクにアタッチするオブジェクトを生成する。 (5)メソッド
(C) public static Task currentTask () throws JTRONException カレントスレッドに対応するタスクにアタッチするオブジェクトを生成する。 (D) public void start () throws JTRONException タスクの起動。sta_tskに相当する。 (E) public void terminate () throws JTRONException タスクの強制終了。ter_tskに相当する。 (F) public void changePriority (int priority) throws JTRONException タスク優先度の変更。chg_priに相当する。 (G) public void releaseWait () throws JTRONException 待ち状態の強制解除。rel_waiに相当する。 (H) public T_RTSK referStatus () throws JTRONException タスクの状態参照。ref_tskに相当する。 (I) public void suspend () throws JTRONException 強制待ち状態への移行。sus_tskに相当する。 (J) public void resume () throws JTRONException 強制待ち状態からの再開。rsm_tskに相当する。 (K) public void forceResume () throws JTRONException 強制待ち状態からの強制再開。frsm_tskに相当する。 (L) public void sleep () throws JTRONException 自タスクを起床待ち状態に移行させる。 (M) public void sleep (int tmout) throws JTRONException タイムアウト時間を指定し自タスクを起床待ち状態に移行させる。 (N) public void wakeup () throws JTRONException タスクの起床。wup_tskに相当する。 (O) public int cancelWakeup () throws JTRONException タスクの起床要求のキャンセル。can_wupに相当する。 (P) public static void rotateReadyQueue (int priority) throws JTRONException 指定された優先度のタスクの優先順位を回転する。 (Q) public static int getTaskId () throws JTRONException 自タスクのタスクIDを得る。 (6)特記事項 JTRON2.0仕様との差異はない。Task(Thread thread)に渡すThreadはrun()メソッドを実行した後のスレッドでなければ例外が発生する。
(1)クラス名、親クラス public class FixedMemoryPool extends AttachBasic (2)説明 固定長メモリプールを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public FixedMemoryPool (int mpfid,int length) throws JTRONException 既存の固定長メモリプールのアタッチオブジェクトを生成する。 (B) public FixedMemoryPool (int mpfid,T_CMPF cmpf) throws JTRONException 新規に固定長メモリプールを生成し,アタッチオブジェクトを生成する。idの指定あり。 (C) public FixedMemoryPool (T_CMPF cmpf) throws JTRONException 新規に固定長メモリプールを生成し,アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException メモリプールの削除。del_mpfに対応。 (E) public ItronFixedMemory get () throws JTRONException メモリ領域の確保。get_blfに対応。 (F) public ItronFixedMemory get (int tmout) throws JTRONException メモリ領域の確保。tget_blfに対応。タイムアウト指定あり。 (G) public ItronFixedMemory poll () throws JTRONException メモリ領域の確保。pget_blfに対応。ポーリング。 (H) private T_RMPF referStatus () throws JTRONException メモリプールの状態参照。ref_mpfに対応。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class VariableMemoryPool extends AttachBasic (2)説明 可変長メモリプールを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public VariableMemoryPool (int mplid) throws JTRONException 既存の可変長メモリプールのアタッチオブジェクトを生成する。 (B) public VariableMemoryPool (int mplid,T_CMPL cmpl) throws JTRONException 新規に可変長メモリプールを生成し,アタッチオブジェクトを生成する。idの指定あり。 (C) public VariableMemoryPool (T_CMPL cmpl) throws JTRONException 新規に可変長メモリプールを生成し,アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException メモリプールの削除。del_mplに対応。 (E) public ItronVariableMemory get (int length) throws JTRONException メモリ領域の確保。get_blkに対応。 (F) public ItronVariableMemory get (int length,int tmout) throws JTRONException メモリ領域の確保。tget_blkに対応。タイムアウト指定あり。 (G) public ItronVariableMemory poll (int length) throws JTRONException メモリ領域の確保。pget_blkに対応。ポーリング。 (H) public T_RMPL referStatus () throws JTRONException メモリプールの状態参照。ref_mplに対応。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class Semaphore extends AttachBasic (2)説明 セマフォを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public Semaphore (int semId) throws JTRONException 既存セマフォのアタッチオブジェクトを生成する。 (B) public Semaphore (int semid,T_CSEM csem) throws JTRONException 新規にセマフォを生成し,アタッチオブジェクトを生成する。 idの指定あり。 (C) public Semaphore (T_CSEM csem) throws JTRONException 新規にセマフォを生成し, アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException セマフォの削除。 (E) public void signal () throws JTRONException セマフォ資源の返却。sig_semに相当する。 (F) public void waitSemaphore () throws JTRONException セマフォ資源の獲得。wai_semに相当する。 (G) public void waitSemaphore (int tmout) throws JTRONException セマフォ資源の獲得 タイムアウトあり。twai_semに相当する。 (H) public void poll () throws JTRONException セマフォ資源の獲得 ポーリング。pol_semに相当する。 (I) public T_RSEM referStatus () throws JTRONException セマフォ状態の参照。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class EventFlag extends AttachBasic (2)説明 EventFlagイベントフラグを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public EventFlag (int evfId) throws JTRONException 既存イベントフラグのアタッチオブジェクトを生成する。 (B) public EventFlag (int evfid,T_CFLG cflg) throws JTRONException 新規にイベントフラグを生成し,アタッチオブジェクトを生成する。 idの指定あり。 (C) public EventFlag (T_CFLG cflg) throws JTRONException 新規にイベントフラグを生成し, アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException イベントフラグの削除。del_flgに相当する。 (E) public void set (int pattern) throws JTRONException イベントフラグのセット。set_flgに相当する。 (F) public void clear (int pattern) throws JTRONException イベントフラグのクリア。clr_flgに相当する。 (G) public int waitFlag (int waitPattern,int waitMode) throws JTRONException イベントフラグ待ち。wai_flgに相当する。 (H) public int waitFlag (int waitPattern,int waitMode,int tmout) throws JTRONException イベントフラグ待ち タイムアウトあり。twai_flgに相当する。 (I) public int poll (int waitPattern,int waitMode) throws JTRONException イベントフラグ待ち ポーリング。pol_flgに相当する。 (J) public T_RFLG referStatus () throws JTRONException イベントフラグの状態参照。ref_flgに相当する。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class MailBox extends AttachBasic (2)説明 メイルボックスを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public MailBox (int mbxId) throws JTRONException 既存のメイルボックスのアタッチオブジェクトを生成する。 (B) public MailBox (int mbxid,T_CMBX cmbx) throws JTRONException 新規にメイルボックスを生成し,アタッチオブジェクトを生成する。 idの指定あり。 (C) public MailBox (T_CMBX cmbx) throws JTRONException 新規にメイルボックスを生成し, アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException メイルボックスの削除。del_mbxに相当する。 (E) public void send (ItronMemory data) throws JTRONException メッセージを送信する。snd_mbxに相当する。 (F) public ItronMemory receive (int length) throws JTRONException メッセージを受信する。rcv_mbxに相当する。 (G) public ItronMemory receive (int length,int tmout) throws JTRONException メッセージを受信する。タイムアウトあり。trcv_mbxに相当する。 (H) public ItronMemory pollReceive (int length) throws JTRONException メッセージを受信する。ポーリング。prcv_mbxに相当する。 (I) public T_RMBX referStatus () throws JTRONException メールボックスの状態参照。ref_mbxに相当する。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class MessageBuffer extends AttachBasic (2)説明 メッセージバッファを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public MessageBuffer (int mbfId) throws JTRONException 既存のメッセージバッファのアタッチオブジェクトを生成する。 (B) public MessageBuffer (int mbfid,T_CMBF cmbf) throws JTRONException 新規にメッセージバッファを生成し,アタッチオブジェクトを生成する。idの指定あり。 (C) public MessageBuffer (T_CMBF cmbf) throws JTRONException 新規にメッセージバッファを生成し,アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException メッセージバッファの削除。del_mbf。 (E) public void send (ItronMemory data) throws JTRONException メッセージ送信。snd_mbfに相当する。 (F) public void send (ItronMemory data,int tmout) throws JTRONException メッセージ送信。タイムアウトあり。tsnd_mbfに相当する。 (G) public void pollSend (ItronMemory data) throws JTRONException メッセージ送信。ポーリング。psnd_mbfに相当する。 (H) public ItronMemory receive (int length) throws JTRONException メッセージ受信。rcv_mbfに相当する。 (I) public ItronMemory receive (int length,int tmout) throws JTRONException メッセージ受信。タイムアウトあり。trcv_mbfに相当する。 (J) public ItronMemory pollReceive (int length) throws JTRONException メッセージ受信。ポーリング。prcv_mbfに相当する。 (K) public void receiveWithMemory (ItronMemory data) throws JTRONException メッセージ受信。データ領域を指定する。rcv_mbfに相当する。 (L) public void receiveWithMemory (ItronMemory data,int tmout) throws JTRONException メッセージ受信。データ領域を指定する。タイムアウトあり。trcv_mbfに相当する。 (M) public void pollReceiveWithMemory (ItronMemory data) throws JTRONException メッセージ受信。データ領域を指定する。ポーリング。prcv_mbfに相当する。 (N) public T_RMBF referStatus () throws JTRONException メッセージバッファの状態参照。ref_mbfに相当する。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class Port extends AttachBasic (2)説明 ポートを操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public Port (int portId) throws JTRONException 既存のポートのアタッチオブジェクトを生成する。 (B) public Port (int portid,T_CPOR cpor) throws JTRONException 新規にポートを生成し,アタッチオブジェクトを生成する。 idの指定あり。 (C) public Port (T_CPOR cpor) throws JTRONException 新規にポートを生成し, アタッチオブジェクトを生成する。idの指定なし。 (5)メソッド
(D) public void delete () throws JTRONException ポートの削除。del_porに相当する。 (E) public ItronMemory call (ItronMemory mem,int calptn,int csize) throws JTRONException ランデブの呼び出し。cal_porに相当する。 (F) public ItronMemory call (ItronMemory mem,int calptn,int csize,int tmout) throws JTRONException ランデブの呼び出し タイムアウトあり。tcal_porに相当する。 (G) public ItronMemory pollAndCall (ItronMemory mem,int calptn,int csize) throws JTRONException ランデブの呼び出し。ポーリング。pcal_porに相当する。 (H) public Rendezvous accept (int acpptn) throws JTRONException ランデブの受け付け。acp_porに相当する。 (I) public Rendezvous accept (int acpptn,int tmout) throws JTRONException ランデブの受け付け。タイムアウトあり。tacp_porに相当する。 (J) public Rendezvous pollAccept (int acpptn) throws JTRONException ランデブの受け付け。ポーリング。pacp_porに相当する。 (K) public void forward (int calptn,Rendezvous data) throws JTRONException ランデブの回送。fwd_porに相当する。 (L) public T_RPOR referStatus () throws JTRONException ポートの状態参照。ref_porに相当する。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CMPF (2)説明 固定長メモリプール生成情報クラス。 (3)フィールド
public int mpfatr; // メモリプール属性
public int mpfcnt; // メモリプール全体のブロック数
public int blfsz; // 固定長メモリブロックサイズ(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CMPL (2)説明 可変長メモリプール生成情報クラス。 (3)フィールド
public int mplatr; /* メモリプール属性 */
public int mplsz; /* メモリプール全体のサイズ */
public static final int TA_FIFO = 0x0000;
public static final int TA_TPRI = 0x0001;(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CSEM (2)説明 セマフォ生成情報クラス。 (3)フィールド
public int sematr; /* セマフォ属性 */
public int isemcnt; /* セマフォの初期カウント値 */
public int maxsem; /* セマフォの最大カウント値 */
public static final int TA_FIFO = 0x0000; // 待ちタスクはFIFO
public static final int TA_TPRI = 0x0001; // 待ちタスクは優先度順(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CFLG (2)説明 イベントフラグ生成情報クラス。 (3)フィールド
public int flgatr; /* イベントフラグ属性 */
public int iflgptn; /* イベントフラグの初期パターン */
public static final int TA_WSGL=0x00000000; /* 複数タスクの待ちを許さない*/
public static final int TA_WMUL=0x00000008; /* 複数タスクの待ちを許す */
public static final int TWF_ANDW=0x00000000; /* AND待ち */
public static final int TWF_ORW=0x00000002; /* OR待ち */
public static final int TWF_CLR=0x00000001; /* クリア指定 */
(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CMBX (2)説明 メイルボックス生成情報クラス (3)フィールド
public int mbxatr; /* メイルボックス属性 */
public int bufcnt; /* リングバッファの大きさ */
public static final int TA_TFIFO = 0x0000;
public static final int TA_TPRI = 0x0001;
public static final int TA_MFIFO = 0x0000;
public static final int TA_MPRI = 0x0002;(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CMBF (2)説明 メッセージバッファ生成情報クラス (3)フィールド
public int mbfatr; /* メッセージバッファ属性 */
public int bufsz; /* メッセージバッファのサイズ */
public int maxmsz; /* メッセージの最大長 */
public static final int TA_TFIFO = 0x0000;
public static final int TA_TPRI = 0x0001;(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_CPOR (2)説明 ポート生成情報クラス (3)フィールド
public int poratr; /* ポート属性 */
public int maxcmsz; /* 呼出メッセージの最大長 */
public int maxrmsz; /* 返答メッセージの最大長 */
public static final int TA_NULL = 0x0000;(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RTSK (2)説明 タスク状態参照クラス (3)フィールド
public int tskpri; // 現在の優先度
public int tskstat; // タスク状態
public int tskwait; // 待ち要因
public int wid; // 待ちオブジェクトID
public int wupcnt; // 起床要求カウント
public int suscnt; // SUSPEND要求カウント
public int tskatr; // タスク属性
public int itskpri; // タスク起動時優先度
public int stksz; // スタックサイズ
public static final int TTS_RUN = 0x0001; /* RUN */
public static final int TTS_RDY = 0x0002; /* READY */
public static final int TTS_WAI = 0x0004; /* WAIT */
public static final int TTS_SUS = 0x0008; /* SUSPEND */
public static final int TTS_WAS = 0x000c; /* WAIT-SUSPEND */
public static final int TTS_DMT = 0x0010; /* DORMANT */
public static final int TTW_SLP = 0x0001; /* 起床待ちによる待ち */
public static final int TTW_DLY = 0x0002; /* タスクの遅延による待ち */
public static final int TTW_NOD = 0x0008; /* 接続機能応答待ち */
public static final int TTW_FLG = 0x0010; /* イベントフラグ待ち */
public static final int TTW_SEM = 0x0020; /* セマフォ待ち */
public static final int TTW_MBX = 0x0040; /* メイルボックス待ち */
public static final int TTW_SMBF = 0x0080; /* メッセージバッファ送信待ち */
public static final int TTW_MBF = 0x0100; /* メッセージバッファ受信待ち */
public static final int TTW_CAL = 0x0200; /* ランデブ呼出待ち */
public static final int TTW_ACP = 0x0400; /* ランデブ受付待ち */
public static final int TTW_RDV = 0x0800; /* ランデブ終了待ち */
public static final int TTW_MPL = 0x1000; /* 可変長メモリプール待ち */
public static final int TTW_MPF = 0x2000; /* 固定長メモリプール待ち */
(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RMPF (2)説明 固定長メモリプール状態参照クラス (3)フィールド
public int wtsk; // 待ちタスクの有無
public int frbcnt; // 空き領域のブロック数(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RMPL (2)説明 可変長メモリプール状態参照クラス (3)フィールド
public int wtsk; /* 待ちタスクの有無 */
public int frsz; /* 空き領域の合計サイズ */
public int maxsz; /* 最大の連続空き領域のサイズ */(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RSEM (2)説明 セマフォ状態参照クラス (3)フィールド
public int wtsk; /* 待ちタスクの有無 */
public int semcnt; /* 現在のセマフォカウント値 */(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RFLG (2)説明 イベントフラグ状態参照クラス (3)フィールド
public int wtsk; /* 待ちタスクの有無 */
public int flgptn; /* 現在のイベントフラグパターン */(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RMBX (2)説明 メイルボックス状態クラス (3)フィールド
public int wtsk; /* 待ちタスクの有無 */ (4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RMBF (2)説明 メッセージバッファ状態参照クラス (3)フィールド
public int wtsk; /* 受信待ちタスクの有無 */
public int stsk; /* 送信待ちタスクの有無 */
public int msgsz; /* 次に受信されるメッセージのサイズ */
public int frbufsz; /* 空きバッファのサイズ */(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class T_RPOR (2)説明 ポート状態参照クラス (3)フィールド
public int wtsk; /* 呼出待ちタスクの有無 */
public int atsk; /* 受付待ちタスクの有無 */(4)コンストラクタ 引数なしのコンストラクタのみ。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class ItronMemory extends AttachBasic (2)説明 メモリ領域を操作するためのクラス (3)フィールド なし (4)コンストラクタ
(A) public ItronMemory (int len) throws JTRONException 指定した長さのメモリ領域を持ったメモリ操作オブジェクトを生成する。 (B) public ItronMemory () メモリ操作オブジェクトを生成する。 (5)メソッド
(C) public void free () throws JTRONException メモリ領域を解放する。 (D) public int getLength () throws JTRONException メモリ領域の長さを取得する。 (E) public void disableWrite () メモリ領域の書き込みを禁止する。 (F) public void enableWrite () メモリ領域の書き込みを許可する。 (G) public boolean isWriteable () メモリ領域の書き込み許可・禁止状態を返す。 (H) public void seek (int offset) throws JTRONException メモリアクセスポインタの位置を,先頭からoffsetに設定する。 (I) public boolean checkSeek (int offset) offset先が領域内かチェックする。 (J) public boolean checkEof () accessPointがEOF位置かどうかを判断する。 (K) public int read () 現在位置のバイトデータを返す。 (L) public byte readByte () throws JTRONException バイトデータを読み込む。 (M) public byte readByte (int offset) throws JTRONException オフセット位置offsetのバイトデータを読み込む。 (N) public short readShort () throws JTRONException Shortデータを読み込む。 (O) public short readShort (int offset) throws JTRONException オフセット位置offsetのShortデータを読み込む。 (P) public int readInt () throws JTRONException Intデータを読み込む。 (Q) public int readInt (int offset) throws JTRONException オフセット位置offsetのIntデータを読み込む。 (R) public long readLong () throws JTRONException Longデータを読み込む。 (S) public long readLong (int offset) throws JTRONException オフセット位置offsetのLongデータを読み込む。 (T) public int read (byte b[],int len) throws JTRONException バイト配列を読み込む。 (U) public int read (int offset,byte b[],int len) throws JTRONException オフセット位置offsetのバイト配列を読み込む。 (V) public void writeByte (byte b) throws JTRONException バイトデータを書き込む。 (W) public void writeByte (int offset,byte b) throws JTRONException オフセット位置offsetにバイトデータを書き込む。 (X) public void writeShort (short s) throws JTRONException Shortデータを書き込む。 (Y) public void writeShort (int offset,short s) throws JTRONException オフセット位置offsetにShortデータを書き込む。 (Z) public void writeInt (int i) throws JTRONException Intデータを書き込む。 (AA) public void writeInt (int offset,int i) throws JTRONException オフセット位置offsetにIntデータを書き込む。 (AB) public void writeLong (long l) throws JTRONException Longデータを書き込む。 (AC) public void writeLong (int offset,long l) throws JTRONException オフセット位置offsetにLongデータを書き込む。 (AD) public int write (byte b[],int len) throws JTRONException バイト配列を書き込む。 (AE) public int write (int offset,byte b[],int len) throws JTRONException オフセット位置offsetにバイト配列を書き込む。 (6)特記事項 JTRON2.0との差異は以下の点である。
(A) 引数なしのコンストラクタを持つ。
(B) int read()メソッドを持つ。
(C) boolean checkSeek(int offset)メソッドを持つ。
(D) boolean checkEof()メソッドを持つ。
(1)クラス名、親クラス public class ItronFixedMemory extends ItronMemory (2)説明 固定長メモリプールより確保したメモリ領域を操作するためのクラス (3)フィールド なし (4)コンストラクタ (A) 固定長メモリプールに対応するアタッチクラス FixedMemoryPool のメ ソッドの返り値として取得する。 (5)メソッド
(B) public int getPoolId () メモリプールIDを返す。 (C) public void release () throws JTRONException メモリ領域を解放する。 (D) public void free () throws JTRONException メモリ領域を解放する。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class ItronVariableMemory extends ItronMemory (2)説明 可変長メモリプールより確保したメモリ領域を操作するためのクラス (3)フィールド なし (4)コンストラクタ (A) 可変メモリプールに対応するアタッチクラス VariableMemoryPool のメ ソッドの返り値として取得する。 (5)メソッド
(B) public int getPoolId () メモリプールIDを返す。 (C) public void release () throws JTRONException メモリ領域を解放する。 (D) public void free () throws JTRONException メモリ領域を解放する (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class Rendezvous extends ItronMemory (2)説明 ランデブに対応するメモリ操作クラス (3)フィールド なし (4)コンストラクタ なし (5)メソッド
() public int getNo () ランデブ番号を返す。 () public void reply () throws JTRONException ランデブを終了する。メッセージを受け付ける。 (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class JTRONException extends Exception (2)説明 ITRONアタッチクラスを使用した際にITRONカーネルオブジェクトとの同期・通信にエラーが発生した場合に発生する例外クラス (3)フィールド
表3.1 JTRON例外クラスフィールドデータ 名前 型 説明 exceptionCode int 例外コード resourceId int アタッチしているITRONカーネルオブジェクトのID ApiNo int μITRONシステムコール API番号 ApiCls int μITRONシステムコール APIクラス番号 ApiName String μITRONシステムコール APIクラス番号 ErrorCode int μITRONシステムコール名 ErrorName String エラー名 (4)コンストラクタ
(A) JTRONException (String msg) メッセージを与えて例外クラスのオブジェクトを生成する (B) public JTRONException () 例外クラスのオブジェクトを生成する。 (5)メソッド なし (6)特記事項 JTRON2.0仕様との差異はない。
(1)クラス名、親クラス public class ItronApi (2)説明 Javaオブジェクトを生成することなく、 μITRONシステムコールと互換するAPIをJavaのstaticメソッドとして提供するために用意したクラス (3)フィールド なし (4)コンストラクタ なし (5)メソッド
(A) public native static int dis_dsp () ディスパッチ禁止。ER dis_dsp(void)に相当する。 (B) public native static int ena_dsp () ディスパッチ許可。ER ena_dsp(void)に相当する。 (C) public native static int chg_pri (int tskid,int tskpri) タスク優先度の変更。ER chg_pri(ID tskid, PRI tskpri)に相当する。 (D) public native static int rot_rdq (int tskpri) タスクの優先順位の回転。ER rot_rdq(PRI tskpri)に相当する。 (E) public native static int rel_wai (int tskid) 待ち状態の強制解除。ER rel_wai(ID tskid)に相当する。 (F) public native static int get_tid (Integer tskid) 実行状態のタスクIDの参照。ER get_tid(ID *p_tskid)に相当する。 (G) public native static int ref_tsk (T_RTSK rtsk,int tskid) タスクの状態参照。 ER ref_tsk(T_RTSK *pk_rtsk, ID tskid)に相当する。 (H) public native static int sus_tsk (int tskid) 強制待ち状態への移行。ER sus_tsk(ID tskid)に相当する。 (I) public native static int rsm_tsk (int tskid) 強制待ち状態からの再開。ER rsm_tsk(ID tskid)に相当する。 (J) public native static int frsm_tsk (int tskid) 強制待ち状態からの強制再開。ER frsm_tsk(ID tskid)に相当する。 (K) public native static int slp_tsk () 自タスクを起床待ち状態に移行させる。ER slp_tsk(void)に相当する。 (L) public native static int tslp_tsk (int tmout) 自タスクを起床待ち状態に移行させる。 タイムアウトあり。 ER tslp_tsk(TMO tmout)に相当する。 (M) public native static int wup_tsk (int tskid) タスクの起床。ER wup_tsk(ID tskid)に相当する。 (N) public native static int can_wup (Integer wupcnt,int tskid) タスク起床要求のキャンセル。 ER can_wup(INT *p_wupcnt, ID tskid) に相当する。 (O) public native static int vcre_sem (T_CSEM csem) セマフォの生成 ID指定なし。ER vcre_sem(T_CSEM *pk_csem) に相当す る。 (P) public native static int cre_sem (int semid,T_CSEM csem) セマフォの生成 ID指定あり。ER cre_sem(ID semid, T_CSEM *pk_csem) に相当する。 (Q) public native static int del_sem (int semid) セマフォの削除。ER del_sem(ID semid)に相当する。 (R) public native static int sig_sem (int semid) セマフォ資源の返却。ER sig_sem(ID semid)に相当する。 (S) public native static int wai_sem (int semid) セマフォ資源の獲得。ER wai_sem(ID semid)に相当する。 (T) public native static int preq_sem (int semid) セマフォ資源の獲得 ポーリング。ER preq_sem(ID semid)に相当する。 (U) public native static int twai_sem (int semid,int tmout) セマフォ資源の獲得 タイムアウトあり。 ER twai_sem(ID semid, TMO tmout)に相当する。 (V) public native static int ref_sem (T_RSEM rsem,int semid) セマフォの状態参照。ER ref_sem(T_RSEM *pk_rsem, ID semid) に相当 する。 (W) public native static int vcre_flg (T_CFLG cflg) イベントフラグの生成。ER vcre_flg(T_CFLG *pk_cflg)に相当する。 (X) public native static int cre_flg (int flgid,T_CFLG cflg) イベントフラグの生成 ID指定あり。 ER cre_flg(ID flgid, T_CFLG * pk_cflg)に相当する。 (Y) public native static int del_flg (int flgid) イベントフラグの削除。ER del_flg(ID flgid)に相当する。 (Z) public native static int set_flg (int flgid,int setptn) イベントフラグのセット。ER set_flg(ID flgid, UINT setptn) に相当 する。 (AA) public native static int clr_flg (int flgid,int clrptn) イベントフラグのクリア。ER clr_flg(ID flgid,UINT clrptn)に相当す る。 (AB) public native static int wai_flg (Integer flgptn,int flgid,int waiptn,int wfmode) イベントフラグ待ち。 ER wai_flg(UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode)に相当する。 (AC) public native static int pol_flg (Integer flgptn,int flgid,int waiptn,int wfmode) イベントフラグ待ち ポーリング。 ER pol_flg(UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode)に相当する。 (AD) public native static int twai_flg (Integer flgptn,int flgid,int waiptn,int wfmode,int tmout) イベントフラグ待ち タイムアウトあり。ER twai_flg(UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode, TMO tmout)に相当する。 (AE) public native static int ref_flg (T_RFLG rflg,int flgid) イベントフラグの状態参照。 ER ref_flg(T_RFLG *pk_rflg, ID flgid) に相当する。 (AF) public native static int vcre_mbx (T_CMBX cmbx) メールボックスの生成。ER vcre_mbx(T_CMBX *pk_cmbx)に相当する。 (AG) public native static int cre_mbx (int mbxid,T_CMBX cmbx) メールボックスの生成 ID指定あり。ER cre_mbx(ID mbxid, T_CMBX * pk_cmbx)に相当する。 (AH) public native static int del_mbx (int mbxid) メールボックスの削除。ER del_mbx(ID mbxidに相当する。 (AI) public native static int snd_msg (int mbxid,ItronMemory mem) メールボックスへの送信。 ER snd_msg(ID mbxid, T_MSG *pk_msg)に相 当する。 (AJ) public native static int rcv_msg (ItronMemory mem,int mbxid) メールボックスからの受信。ER rcv_msg(T_MSG* *ppk_msg, ID mbxid) に相当する。 (AK) public native static int prcv_msg (ItronMemory mem,int mbxid) メールボックスからの受信 ポーリング。ER prcv_msg(T_MSG* *ppk_msg, ID mbxid)に相当する。 (AL) public native static int trcv_msg (ItronMemory mem,int mbxid,int tmout) メールボックスからの受信 タイムアウトあり。ER trcv_msg(T_MSG* * ppk_msg, ID mbxid, TMO tmout)に相当する。 (AM) public native static int ref_mbx (T_RMBX rmbx,int mbxid) メールボックスの状態参照。ER ref_mbx(T_RMBX *pk_rmbx, ID mbxid) に相当する。 (AN) public native static int vcre_mbf (T_CMBF cmbf) メッセージバッファの生成。ER vcre_mbf(T_CMBF *pk_cmbf)に相当する。 (AO) public native static int cre_mbf (int mbfid,T_CMBF cmbf) メッセージバッファの生成 ID指定あり。ER cre_mbf(ID mbfid, T_CMBF *pk_cmbf)に相当する。 (AP) public native static int del_mbf (int mbfid) メッセージバッファの削除。ER del_mbf(ID mbfid)に相当する。 (AQ) public native static int snd_mbf (int mbfid,ItronMemory mem,int size) メッセージバッファへの送信。 ER snd_mbf(ID mbfid, VP msg, INT msgsz)に相当する。 (AR) public native static int psnd_mbf (int mbfid,ItronMemory mem,int size) メッセージバッファへの送信 ポーリング。ER psnd_mbf(ID mbfid, VP msg, INT msgsz)に相当する。 (AS) public native static int tsnd_mbf (int mbfid,ItronMemory mem,int size,int tmout) メッセージバッファへの送信 タイムアウトあり。ER tsnd_mbf(ID mbfid, VP msg, INT msgsz, TMO tmout)に相当する。 (AT) public native static int rcv_mbf (ItronMemory mem,Integer size,int mbfid) メッセージバッファからの受信。 ER rcv_mbf(VP msg, INT *p_msgsz, ID mbfid)に相当する。 (AU) public native static int prcv_mbf (ItronMemory mem,Integer size,int mbfid) メッセージバッファからの受信 ポーリング。ER prcv_mbf(VP msg, INT *p_msgsz, ID mbfid)に相当する。 (AV) public native static int trcv_mbf (ItronMemory mem,Integer size,int mbfid,int tmout) メッセージバッファからの受信 タイムアウトあり。ER trcv_mbf(VP msg, INT *p_msgsz, ID mbfid, TMO tmout)に相当する。 (AW) public native static int ref_mbf (T_RMBF rmbf,int mbfid) メッセージバッファの状態参照。 ER ref_mbf(T_RMBF *pk_rmbf, ID mbfid)に相当する。 (AX) public native static int loc_cpu () CPUロック状態への移行。ER loc_cpu(void)。 (AY) public native static int unl_cpu () CPUロック状態の解除。ER unl_cpu(void)。 (AZ) public native static int dis_int (int eintno) 割込み禁止。 (BA) public native static int ena_int (int eintno) 割込みの許可。 (BB) public native static int vcre_mpl (T_CMPL cmpl) 可変長メモリプールの生成。ER vcre_mpl(T_CMPL *pk_cmpl)に相当する。 (BC) public native static int cre_mpl (int mplid,T_CMPL cmpl) 可変長メモリプールの生成 ID指定あり。ER cre_mpl(ID mplid, T_CMPL *pk_cmpl)に相当する。 (BD) public native static int del_mpl (int mplid) 可変長メモリプールの削除。ER del_mpl(ID mplid)に相当する。 (BE) public native static int get_blk (ItronMemory mem,int mplid,int size) 可変長メモリブロックの獲得。 ER get_blk(VP *p_blk, ID mplid, INT blksz)に相当する。 (BF) public native static int pget_blk (ItronMemory mem,int mplid,int size) 可変長メモリブロックの獲得 ポーリング。ER pget_blk(VP *p_blk, ID mplid, INT blksz)に相当する。 (BG) public native static int tget_blk (ItronMemory mem,int mplid,int size,int tmout) 可変長メモリブロックの獲得 タイムアウトあり。 ER tget_blk(VP * p_blk, ID mplid, INT blksz, TMO tmout)に相当する。 (BH) public native static int rel_blk (int mplid,ItronMemory mem) 可変長メモリブロックの返却。ER rel_blk(ID mplid, VP blk)に相当す る。 (BI) public native static int ref_mpl (T_RMPL rmpl,int mplid) 可変長メモリプールの状態参照。 ER ref_mpl(T_RMPL *pk_rmpl, ID mplid)に相当する。 (BJ) public native static int vcre_mpf (T_CMPF cmpf) 固定長メモリプール生成。ER vcre_mpf(T_CMPF *pk_cmpf)に相当する。 (BK) public native static int cre_mpf (int mpfid,T_CMPF cmpf) 固定長メモリプール生成 ID指定あり。ER cre_mpf(ID mpfid, T_CMPF * pk_cmpf)に相当する。 (BL) public native static int del_mpf (int mpfid) 固定長メモリプールの削除。ER del_mpf(ID mpfid)に相当する。 (BM) public native static int get_blf (ItronMemory mem,int mpfid) 固定長メモリブロックの獲得。ER get_blf(VP *p_blf, ID mpfid) に相 当する。 (BN) public native static int pget_blf (ItronMemory mem,int mpfid) 固定長メモリブロックの獲得 ポーリング。ER pget_blf(VP *p_blf, ID mpfid)に相当する。 (BO) public native static int tget_blf (ItronMemory mem,int mpfid,int tmout) 固定長メモリブロックの獲得 タイムアウトあり。 ER tget_blf(VP * p_blf, ID mpfid, TMO tmout)に相当する。 (BP) public native static int rel_blf (int mpfid,ItronMemory mem) 固定長メモリブロックの返却。ER rel_blf(ID mpfid, VP blf)に相当す る。 (BQ) public native static int ref_mpf (T_RMPF rmpf,int mpfid) 固定長メモリプールの状態参照。 ER ref_mpf(T_RMPF *pk_rmpf, ID mpfid)に相当する。 (BR) public native static int vcre_por (T_CPOR cpor) ランデブポートの作成。ER vcre_por(T_CPOR *pk_cpor)に相当する。 (BS) public native static int cre_por (int portid,T_CPOR cpor) ランデブポートの作成 ID指定あり。 ER cre_por(ID porid, T_CPOR * pk_cpor)に相当する。 (BT) public native static int del_por (int portid) ランデブポートの削除。ER del_por(ID porid)に相当する。 (BU) public native static int cal_por (ItronMemory mem,Integer rsize,int portid, int calptn, int csize) ランデブの呼び出し。 ER cal_por(VP msg, INT *p_rmsgsz, ID porid, UINT calptn, INT cmsgsz)に相当する。 (BV) public native static int pcal_por (ItronMemory mem,Integer rsize,int portid, int calptn, int csize) ランデブの呼び出し ポーリング。ER pcal_por(VP msg, INT *p_rmsgsz, ID porid, UINT calptn, INT cmsgsz)に相当する。 (BW) public native static int tcal_por (ItronMemory mem,Integer rsize,int portid,intcalptn,int csize, int tmout) ランデブの呼び出し タイムアウトあり。 ER tcal_por(VP msg, INT * p_rmsgsz, ID porid, UINT calptn, INT cmsgsz,TMO tmout)に相当する。 (BX) public native static int acp_por (Integer rdvno,ItronMemory mem,Integer csize,int portid, int acpptn) ランデブの受け付け。 ER acp_por(RNO *p_rdvno, VP msg, INT * p_cmsgsz, ID porid, UINT acpptn)に相当する。 (BY) public native static int pacp_por (Integer rdvno,ItronMemory mem,Integer csize,int portid, int acpptn) ランデブの受け付け ポーリング。ER pacp_por(RNO *p_rdvno, VP msg, INT *p_cmsgsz, ID porid, UINT acpptn)に相当する。 (BZ) public native static int tacp_por (Integer rdvno,ItronMemory mem,Integer csize,int portid,int acpptn, int tmout) ランデブの受け付け タイムアウトあり。ER tacp_por(RNO *p_rdvno, VP msg, INT *p_cmsgsz, ID porid, UINT acpptn,TMO tmout)に相当す る。 (CA) public native static int fwd_por (int portid,int calptn,int rdvno,ItronMemory mem,int csize) ランデブの回送。ER fwd_por(ID porid, UINT calptn, RNO rdvno, VP msg, INT cmsgsz)に相当する。 (CB) public native static int rpl_rdv (int rdvno,ItronMemory mem,int rsize) ランデブの終了。 ER rpl_rdv(RNO rdvno, VP msg, INT rmsgsz)に相当 する。 (CC) public native static int ref_por (T_RPOR rpor,int portid) ランデブポートの状態参照。ER ref_por(T_RPOR *pk_rpor, ID porid) に相当する。 (CD) public native static int set_tim (long time) システム時間の設定。ER set_tim(SYSTIME *pk_tim)に相当する。 (CE) public native static int get_tim (Long time) システム時刻の参照 。 現在のシステム時間を返す。 ER get_tim (SYSTIME *pk_tim)に相当する。 (6)特記事項 JTRON2.0仕様との差異は以下である。
(A) メソッド set_tim()、get_tim() でクラス SYSTIME を使用せずにLongを使用する。
本共有オブジェクトクラスを使用することで、 ITRONアプリケーションタスクとJavaプログラムの間で共有オブジェクトを介してデータ交換を行うことができる。
Javaプログラムで共有対象のJavaオブジェクトを共有オブジェクトマネージャに登録することにより、 ITRONアプリケーションタスクからJavaオブジェクトにアクセスすることが可能になる。また、共有オブジェクトのデータの一貫性を保持するためにJavaプログラム、 またはITRONアプリケーションタスクから共有オブジェクトの排他制御を行うことができる。更に、 ITRONアプリケーションタスクからJavaのThreadクラス、ThreadGroupクラスのうち、 状態遷移を伴う実行制御メソッドを呼び出し、Javaスレッド及びJavaスレッドグループを制御することも可能である。
以下に共有オブジェクトとμITRONリアルタイムタスク、 Javaスレッドの関係を示す。
┌──────┐ロック ┏━━━━━━━━┓ ロック ┌─────┐ │ │─────→┃ ┃←─────│ │ │ │アクセス ┃共有オブジェクト┃ アクセス │ │ │ µITRON │←────→┃ ┃←────→│ Java │ │リアルタイム│ロック解除 ┃ ┃ ロック解除│ スレッド │ │タスク │─────→┃ ┃←─────│ │ │ │ ┗━━━━━━━━┛ │ │ │ │スレッド/スレッドグループ操作 │ │ │ │─────────────────────→│ │ └──────┘ └─────┘ 図3.1 共有オブジェクトとμITRONリアルタイムタスク、Javaスレッドの関係
※Javaは、米国及びその他の国における米国Sun Microsystems社の登録商標である。
※スレッドとは、Javaのプログラムが動作するときに、必ず発生する処理の単位である。
※スレッドグループとは、スレッドの集合を表す。
※メソッドとは、オブジェクト指向プログラミングでの関数を表す。
※API(Application Programming Interface)とは、オペレーティングシステムと、その上で動作するアプリケーションプログラム間のインターフェースである。
Java側から共有オブジェクトを使用するためのクラスは以下のパッケージにまとめられる。
jp.gr.itron.jtron.shared
本共有オブジェクトクラスがどのように使用されるかの概要を以下に述べる。
手順1: JavaプログラムからSharedObjectクラスを継承するJavaオブジェクトを生成して、Javaオブジェクトを共有オブジェクトマネージャに登録する。 手順2: Javaプログラムでスレッドを生成して、 スレッドをサスペンドする。 手順3: ITRONアプリケーションタスクから、jti_get_objで共有オブジェクト識別番号を取得する。 手順4: ITRONアプリケーションタスクから、jti_get_objで共有オブジェクト識別番号を取得する。 手順5: ITRONアプリケーションタスクから、jti_get_memで共有オブジェクトのJNIインターフェースポインタと、 共有オブジェクトの参照を取得する。 手順6: ITRONアプリケーションタスクから、「手順5」で取得したJNIインターフェースポインタ、 共有オブジェクトの参照とJNI関数により、共有オブジェクトのフィールドデータにアクセスする。 手順7: ITRONアプリケーションタスクから、 jti_unl_objで共有オブジェクトのロックを解除する。 手順8: ITRONアプリケーションタスクから、jti_get_thrでスレッド識別番号を取得する。 手順9: ITRONアプリケーションタスクから、「手順2」 でサスペンドしていたJavaプログラムのスレッドを、jti_rsm_thrでレジュームする。 手順10: Javaプログラムのスレッドから、SharedObjectクラスのlockメソッドで共有オブジェクトをロックする。 手順11: Javaプログラムのスレッドから、共有オブジェクトのフィールドデータにアクセスする。 手順12: Javaプログラムのスレッドから、SharedObjectクラスのunlockメソッドで共有オブジェクトのロックを解除する。 手順13: Javaプログラムから、SharedObjectクラスのunshareメソッドでJavaオブジェクトの共有を終了する。 (Javaオブジェクトが共有オブジェクトマネージャへの登録から削除される)
共有オブジェクトをJava側から使用するためには以下のクラスがある。
(A) Sharable (B) SharedObject (C) SharedObjectManager (D) SharedObjectManagerImpl (E) ShmException (F) ShmIllegalStateException (G) ShmTimeoutException
共有オブジェクトをITRON側から使用するためには以下のAPIがある。
(A) jti_get_obj (B) jti_get_mem (C) jti_loc_obj (D) jti_unl_obj (E) jti_funl_obj
スレッド/スレッド操作をITRON側から行うためには以下のAPIがある。
(A) jti_get_thr (B) jti_isa_thr (C) jti_int_thr (D) jti_isi_thr (E) jti_sus_thr (F) jti_rsm_thr (G) jti_sta_thr (H) jti_thr_stp (I) jti_des_thr (J) jti_get_jpr (K) jti_set_jpr (L) jti_get_tgr (M) jti_des_tgr (N) jti_sus_tgr (O) jti_rsm_tgr (P) jti_stp_tgr
(1)クラス名、親クラス public interface Sharable (2)説明 共有オブジェクトのインタフェースを規定する。共有オブジェクトとして使用するオブジェクトのクラスは、このインタフェースを実装しなければならない (3)フィールド なし (4)コンストラクタ なし (5)メソッド
(A) public abstract void lock () throws ShmIllegalStateException 共有オブジェクトをロックする。同一スレッドにより既にロックされて いる場合は、 何も起こらない。異なるスレッド、あるいはμITRONリア ルタイムタスクにより既にロックされている場合は、ロックが解除され るまでブロックする。 (B) public abstract void lock (int timeout) throws ShmTimeoutException, ShmIllegalStateException タイムアウト時間を指定して、共有オブジェクトをロックする。同一ス レッドにより既にロックされている場合は、何も起こらない。異なるス レッド、 あるいはμITRONリアルタイムタスクにより既にロックされて いる場合は、 タイムアウト時間timeout(単位はms)の間、ロックが解除 されるまでブロックする。 タイムアウト時間を超えた場合、 ShmTimeoutException例外が発生する。 (C) public abstract void unlock () throws ShmIllegalStateException 同一スレッドによりロックされた共有オブジェクトのロックを解除する。 既にロックが解除されている場合は、何もしない。異なるスレッド、あ るいはμITRONリアルタイムタスクによりロックされた共有オブジェク トに対しては、ShmIllegalStateException例外が発生する。 (D) public abstract void forceUnlock () throws ShmIllegalStateException スレッドによりロックされた共有オブジェクトのロックを強制的に解除 する。μITRONリアルタイムタスクによりロックされたものに関しては、 何もしない。 (E) public abstract void unshare () throws ShmIllegalStateException μITRONリアルタイムタスク側とのオブジェクトの共有を終了する。 既 にスレッド、 あるいはμITRONリアルタイムタスクによりロックされて いる場合は、ロックが解除されるまでブロックし、ロックを解除した後 に共有を終了する。 既に共有が終了されている場合は、 ShmIllegalStateException例外が発生する。 (F) public abstract void unshare (int timeout) throws ShmTimeoutException, ShmIllegalStateException タイムアウト時間を指定して壁TRONリアルタイムタスク側とのオブジェ クトの共有を終了する。異なるスレッド、 あるいはμITRONリアルタイ ムタスクにより既にロックされている場合は、 タイムアウト時間 timeout(単位はms)の間、ロックが解除されるまでブロックする。 タイ ムアウト時間を超えた場合、 ShmTimeoutException例外が発生する。ロ ックを解除した後に共有を終了する。 既に共有していない場合は、 ShmIllegalStateException例外が発生する。 (G) public abstract Object getContent () 共有オブジェクトを返す。SharedObjectManager は、このメソッドを使 って実際に共有オブジェクトを得る。 (6)特記事項 なし
(1)クラス名、親クラス public class SharedObject extends Object implements Sharable (2)説明 共有オブジェクトクラス。プログラマはこのクラスを継承するサブクラスを定義することによって簡単に共有オブジェクトクラスを作成することができる (3)フィールド
表3.2 SharedObjectのフィールド ニモニック 型 内容 shm protected Sharable 現在の共有オブジェクトの参照 (4)コンストラクタ
(A) public SharedObject (String name) throws ShmIllegalStateException 指定された共有オブジェクト名nameで共有オブジェクトを生成する。生成時に共有オブジェクトマネージャに登録され、 μITRONリアルタイムタスクからアクセスできる状態になる。 登録に失敗したときは、ShmIllegalStateException例外が発生する。 (B) public SharedObject (Sharable shm, String name) throws ShmIllegalStateException Sharable を実装したクラスのオブジェクトshm を、指定された共有オ ブジェクト名nameで共有オブジェクトにする。生成時に、共有オブジェ クトマネージャに登録され、 μITRONリアルタイムタスクから参照でき る状態になる。登録に失敗したときは、ShmIllegalStateException例外 が発生する。 (5)メソッド
(C) public void lock () throws ShmIllegalStateException 共有オブジェクトをロックする。同一スレッドにより既にロックされて いる場合は、 何もしない。異なるスレッド、あるいはμITRONリアルタ イムタスクにより既にロックされている場合は、ロックが解除されるま でブロックする。 (D) public void lock (int timeout) throws ShmIllegalStateException, ShmTimeoutException タイムアウト時間を指定して共有オブジェクトをロックする。同一スレ ッドにより既にロックされている場合は、何もしない。異なるスレッド、 あるいはμITRONリアルタイムタスクにより既にロックされている場合 は、タイムアウト時間timeout(単位はms) の間ロックが解除されるまで ブロックする。 タイムアウト時間を超えた場合、ShmTimeoutException 例外が発生する。 (E) public void unlock () throws ShmIllegalStateException 同一スレッドによりロックされた共有オブジェクトのロックを解除する。 既にロックが解除されている場合は、何もしない。異なるスレッド、あ るいはμITRONリアルタイムタスクによりロックされたオブジェクトに 対しては、ShmIllegalStateException例外が発生する。 (F) public void forceUnlock () throws ShmIllegalStateException スレッドによりロックされた共有オブジェクトのロックを強制的に解除 する。μITRONリアルタイムタスクによりロックされたものに関しては、 何もしない。 (G) public void unshare () throws ShmIllegalStateException μITRONリアルタイムタスク側とのオブジェクトの共有を終了する。 既 にスレッド、 あるいはμITRONリアルタイムタスクによりロックされて いる場合は、ロックが解除されるまでブロックし、ロックを解除した後 に共有を終了する。 既に共有していない場合は、 ShmIllegalStateException例外が発生する。 (H) public void unshare (int timeout) throws ShmIllegalStateException, ShmTimeoutException タイムアウト時間を指定して、 μITRONリアルタイムタスク側とのオブ ジェクトの共有を終了する。異なるスレッド、 あるいはμITRONリアル タイムタスクにより既にロックされている場合は、 タイムアウト時間 timeout(単位はms)の間、ロックが解除されるまでブロックする。 タイ ムアウト時間を超えた場合は、ShmTimeoutException が発生する。ロッ クを解除した後に共有を終了する。 既に共有していない場合は、 ShmIllegalStateException例外が発生する。 (I) public Object getContent () 共有オブジェクトを返す。SharedObjectManager は、このメソッドを使 って実際に共有オブジェクトを得る。SharedObjectでは、このメソッド は、 コンストラタの引数で指定されたSharableオブジェクトを返す(フ ィールドデータshm を返す実装になっている) 。SharedObjectのサブク ラスで、 別のオブジェクト(配列など) を共有対象にしたい場合は、こ のメソッドをオーバライドする。 (6)特記事項 ・共有オブジェクト名は、UTF-8コード文字列で63文字以内とする。
※UTF-8(UCS transformation format 8-bit form)とは、Unicode文字の エンコーディング方式であり、文字によって表現するバイト数が変化する、可変長エンコーディング方式である。ASCII文字は1バイトで表現される。
(1)クラス名、親クラス public abstract class SharedObjectManager extends Object (2)説明 共有オブジェクトを管理するクラス。 μITRONリアルタイムタスク側と のインタフェースを受け持つ。 (3)フィールド なし (4)コンストラクタ
(A) protected SharedObjectManager () 共有オブジェクトマネージャを生成する。 (5)メソッド
(B) public static SharedObjectManager getSharedObjectManager () throws ShmIllegalStateException デフォルトの共有オブジェクトの共有オブジェクトマネージャのオブジ ェクトを返す。共有オブジェクトマネージャが用意できない場合や不正 な場合は、ShmIllegalStateException例外が発生する。 (C) public abstract void share (Sharable obj, String name) throws ShmIllegalStateException Sharable を実装したクラスのオブジェクトobj を指定された共有オブ ジェクト名nameで登録する。既に登録されている場合、または不正な名 前の場合は、ShmIllegalStateException例外が発生する。 (D) public abstract void unshare (String name) throws ShmIllegalStateException 指定された共有オブジェクト名name に対応する共有オブジェクトを削 除する。既に削除されている場合は、ShmIllegalStateException例外が 発生する。 (E) public abstract void unshare (String name, int timeout) throws ShmIllegalStateException, ShmTimeoutException タイムアウト時間を指定して、 指定された共有オブジェクト名name に 対応する共有オブジェクトを削除する。 既に削除されている場合は、 ShmIllegalStateException例外が発生する。 (F) public abstract void lock (Sharable obj) throws ShmIllegalStateException 共有オブジェクトをロックする。同一スレッドにより既にロックされて いる場合は、 何もしない。異なるスレッド、あるいはμITRONリアルタ イムタスクにより既にロックされている場合は、ロックが解除されるま でブロックする。 (G) public abstract void lock (Sharable obj, int timeout) throws ShmIllegalStateException, ShmTimeoutException タイムアウト時間を指定して、共有オブジェクトをロックする。同一ス レッドにより既にロックされている場合は、何も起こらない。異なるス レッド、 あるいはμITRONリアルタイムタスクにより既にロックされて いる場合は、 ロックが解除されるまでブロックする。タイムアウト(単 位はms)が指定でき、 タイムアウト時間の間ロックが解除されるまでブ ロックする。 タイムアウト時間が過ぎると、ShmTimeoutException例外 を発生する。 (H) public abstract void unlock (Sharable obj) throws ShmIllegalStateException 同一スレッドによりロックされた共有オブジェクトのロックを解除する。 既にロックが解除されている場合は、何もしない。異なるスレッド、あ るいはμITRONリアルタイムタスクによりロックされたオブジェクトに 対しては、ShmIllegalStateException例外が発生する。 (I) public abstract void forceUnlock (Sharable obj) throws ShmIllegalStateException ロックしたスレッドに関わらず、ロックされた共有オブジェクトのロッ クを解除する。既にロックが解除されている場合は、何もしない。用途 は、ロックした共有オブジェクトをスレッドがロックを解除しないで死 んだ場合に使用する。 (6)特記事項 ・共有オブジェクト名は、UTF-8コード文字列で63文字以内とする。
(1)クラス名、親クラス class SharedObjectManagerImpl extends SharedObjectManager (2)説明 共有オブジェクトを管理するクラス。 μITRONリアルタイムタスク側と のインタフェースを受け持つ。 このクラスは、SharedObjectManagerク ラスの実装クラスである。 (3)フィールド なし (4)コンストラクタ
(A) protected SharedObjectManager () 共有オブジェクトマネージャを生成する。 (5)メソッド
(B) public static SharedObjectManager getSharedObjectManager () throws ShmIllegalStateException デフォルトの共有オブジェクトの、共有オブジェクトマネージャのオブ ジェクトを返す。共有オブジェクトマネージャが用意できない場合や不 正な場合は、ShmIllegalStateException例外が発生する。 (C) public void share (Sharable obj, String name) throws ShmIllegalStateException Sharable を実装したクラスのオブジェクトobj を、 指定された共有オ ブジェクト名nameで登録する。既に登録されている場合、または不正な 名前の場合は、ShmIllegalStateException例外が発生する。 (D) public void unshare (String name) throws ShmIllegalStateException 指定された共有オブジェクト名name に対応する共有オブジェクトを削 除する。既に削除されている場合は、ShmIllegalStateException例外が 発生する. (E) public void unshare (String name, int timeout) throws ShmIllegalStateException, ShmTimeoutException タイムアウト時間を指定して、指定された共有オブジェクト名name に 対応する共有オブジェクトを削除する。 既に削除されている場合は、 ShmIllegalStateException例外が発生する。 (F) public void lock (Sharable obj) throws ShmIllegalStateException 共有オブジェクトをロックする。同一スレッドにより既にロックされて いる場合は、何も起こらない。異なるスレッド、 あるいはμITRONリア ルタイムタスクにより既にロックされている場合は、ロックが解除され るまでブロックする。 (G) public void lock (Sharable obj, int timeout) throws ShmIllegalStateException, ShmTimeoutException タイムアウト時間を指定して、共有オブジェクトをロックする。同一ス レッドにより既にロックされている場合は、何も起こらない。異なるス レッド、 あるいはμITRONリアルタイムタスクにより既にロックされて いる場合は、ロックが解除されるまでブロックする。 タイムアウト(単 位はms) が指定でき、タイムアウト時間の間ロックが解除されるまでブ ロックする。タイムアウト時間が過ぎると、 ShmTimeoutException例外 が発生する。 (H) public void unlock (Sharable obj) throws ShmIllegalStateException 同一スレッドによりロックされた共有オブジェクトのロックを解除する。 既にロックが解除されている場合は、何もしない。異なるスレッド、あ るいはμITRONリアルタイムタスクによりロックされたオブジェクトに 対しては、ShmIllegalStateException例外が発生する。 (I) public void forceUnlock (Sharable obj) throws ShmIllegalStateException ロックしたスレッドに関わらず、ロックされた共有オブジェクトのロッ クを解除する。既にロックが解除されている場合は、何もしない。用途 は、ロックした共有オブジェクトをスレッドがロックを解除しないで死 んだ場合に使用する。 (6)特記事項 ・共有オブジェクト名は、UTF-8コード文字列で63文字以内とする。
(1)クラス名、親クラス public class ShmException extends Exception (2)説明 共有オブジェクト関連の例外が発生したことを通知する。このクラスは、 このパッケージ内の全例外クラスのスーパークラスである。 (3)フィールド なし (4)コンストラクタ
(A) public ShmException () 詳細なメッセージ無しで共有オブジェクト例外を生成する。 (B) public ShmException (String msg) 詳細メッセージmsgを持つ共有オブジェクト例外を生成する。 (5)メソッド なし (6)特記事項 なし
(1)クラス名、親クラス public class ShmIllegalStateException extends ShmException (2)説明 あるメソッドを発行したときに、そのメソッドが実行できない不正な状 態であるときに発生する。 (3)フィールド
表3.3 ShmIllegalStateExceptionのフィールド ニモニック 型 内容 ILLEGAL_MANAGER public static final int 共有オブジェクトマネージャが不正(値:1) OBJECT_IN_USE public static final int Javaオブジェクトが既に登録されている(値:2) OBJECT_NOEXIST public static final int Javaオブジェクトが未登録(値:3) ILLEGAL_NAME public static final int 不正な名前(値:4) OBJECT_UNSHARED public static final int Javaオブジェクトが未共有(値:5) OBJECT_LOCKED public static final int Javaオブジェクトが他のJavaスレッド、またはμITRONリアルタイムタスクにロックされている(値:6) SYSTEM_ERROR public static final int システム内部のエラー(値:7) (4)コンストラクタ
(A) public ShmIllegalStateException (int cause) 指定された原因の例外オブジェクトを生成する。パラメータcause には 例外の詳細原因を渡す。 (B) public ShmIllegalStateException (int cause, String msg) 指定された原因で、詳細なメッセージをもつ例外オブジェクトを生成す る。通常、cause には例外の詳細原因が、msg にはオブジェクト名が指 定される。 (5)メソッド
(C) public int getCause () 例外の詳細原因を返す。 (6)特記事項 なし
(1)クラス名、親クラス public class ShmTimeoutException extends ShmException (2)説明 タイムアウト時間が過ぎたことを通知する。 (3)フィールド なし (4)コンストラクタ
(A) public ShmTimeoutException () 詳細なメッセージなしでShmTimeoutException を生成する (B) public ShmTimeoutException (String msg) 指定された詳細メッセージmsg をもつShmTimeoutException を生成する。 通常、msg にはオブジェクト名が指定される。 (5)メソッド なし (6)特記事項 なし
(1)API
ER ercd = jti_get_obj (char *objnm, JNO *p_objno)
共有オブジェクト名から共有オブジェクト識別番号を求める。
(2)パラメータ
表3.4 jti_get_objのパラメータ ニモニック 型 内容 objnm *char 処理対象とする共有オブジェクト名(文字列) p_objno *JNO 共有オブジェクト識別番号(ポインタ) (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.5 jti_get_objのエラーコード エラーコードの値 内容 E_OK 正常終了 E_OBJ 指定した共有オブジェクトが存在しない E_PAR パラメタの誤り(objnmがNULL) (5)特記事項 ・共有オブジェクト名は、ASCIIコード文字列で63文字以内とする。
(1)API
ER ercd = jti_get_mem (JNO objno, JNI_PTR *p_addr)
指定した共有オブジェクト(クラス名はSharable) に対応する共有オブ ジェクトの共有オブジェクトアドレス情報を返す。
共有オブジェクトへのアクセスは、 本APIにより取得した共有オブジェ クトアドレス情報構造体JNI_PTRに格納されたJNIインターフェイスポイ ンタ、共有オブジェクトの参照とJNI関数を使用して行う。
※JNI(Java Native Interface)とは、Javaからプラットフォーム固有の ネイティブコードを呼び出す仕組みである。
(2)パラメータ
表3.6 jti_get_memのパラメータ ニモニック 型 内容 objno JNO 処理対象の共有オブジェクトの識別番号 p_addr *JNI_PTR 共有オブジェクトアドレス情報
表3.7 構造体 JNI_PTRの内容 ニモニック 型 内容 env *JNIEnv JNIインターフェイスポインタ obj jobject 共有オブジェクトの参照 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.8 jti_get_memのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り(objnoが不正) E_OBJ 指定した共有オブジェクトが存在しない E_UNLOCK 自タスクによりロックされていない (5)特記事項 処理対象の共有オブジェクト識別番号は、 jti_get_objにより取得した値を使用すること。 本APIを呼ぶ前に、jti_loc_objにより共有オブジェクトをロックしておくこと。
(1)API
ER ercd = jti_loc_obj (JNO objno, TMO tmout)
指定された共有オブジェクトをロックする。
(2)パラメータ
表3.9 jti_loc_objのパラメータ ニモニック 型 内容 objno JNO 処理対象の共有オブジェクトの識別番号 tmout TMO 指定するタイムアウトの時間(ms) (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.10 jti_loc_objのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り(objnoが不正) E_OBJ 指定した共有オブジェクトが存在しない E_TMOUT タイムアウトが発生した E_RLWAI 待ち状態が強制解除された E_DLT 共有が解除された (5)特記事項 処理対象の共有オブジェクト識別番号は、 jti_get_objにより取得した値を使用すること。
(1)API
ER ercd = jti_unl_obj (JNO objno)
指定された共有オブジェクトのロックを解除する。
(2)パラメータ
表3.11 jti_unl_objのパラメータ ニモニック 型 内容 objno JNO 処理対象の共有オブジェクトの識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.12 jti_unl_objのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り(objnoが不正) E_OBJ 指定した共有オブジェクトが存在しない、または他のタスクによりロックを解除しようとした (5)特記事項 処理対象の共有オブジェクト識別番号は、 jti_get_objにより取得した値を使用すること。
(1)API
ER ercd = jti_funl_obj (JNO objno)
指定された共有オブジェクトのロックを強制解除する。
(2)パラメータ
表3.13 jti_funl_objのパラメータ ニモニック 型 内容 objno JNO 処理対象の共有オブジェクトの識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.14 jti_funl_objのパラメータ エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り(objnoが不正) E_OBJ 指定した共有オブジェクトが存在しない (5)特記事項 処理対象の共有オブジェクト識別番号は、 jti_get_objにより取得した値を使用すること。
(1)API
ER ercd = jti_get_thr (char *thrnm, JNO *p_thrno)
Javaスレッドの名前から、スレッド識別番号を求める。
(2)パラメータ
表3.15 jti_get_thrのパラメータ ニモニック 型 内容 thrnm *char スレッド名(ASCII文字列 p_thrno *JNO スレッド識別番号(ポインタ) (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.16 jti_get_thrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_OBJ 指定したJavaスレッドが存在しない E_PAR パラメタの誤り (5)特記事項 スレッド名は、 ASCIIコード文字列で31文字以内とする。 処理対象のJavaスレッドには、必ずJavaプログラムで名前を付けること。
(1)API
ER_BOOL ercd = jti_isa_thr (JNO thrno)
Java のThread クラス中のisAlive メソッドを呼ぶ。
(2)パラメータ
表3.17 jti_isa_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER_BOOL ercd メソッドの返却値もしくはエラーコード (4)エラーコード
表3.18 jti_isa_thrのエラーコード エラーコードの値 内容 TRUE 真 FALES 偽 E_PAR パラメタの誤り (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_int_thr (JNO thrno)
Java のThread クラス中のinterrupt メソッドを呼ぶ。
(2)パラメータ
表3.19 jti_int_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.20 jti_int_thrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER_BOOL ercd = jti_isi_thr (JNO thrno)
Java のThread クラス中のisInterruputed メソッドを呼ぶ。
(2)パラメータ
表3.21 jti_isi_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER_BOOL ercd メソッドの返却値もしくはエラーコード (4)エラーコード
表3.22 jti_isi_thrのエラーコード エラーコードの値 内容 TRUE 真 FALES 偽 E_PAR パラメタの誤り (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_rsm_thr (JNO thrno)
Java のThread クラス中のresume メソッドを呼ぶ。
(2)パラメータ
表3.23 jti_sus_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.24 jti_sus_thrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外が発生した (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_sus_thr (JNO thrno)
Java のThread クラス中のsuspend メソッドを呼ぶ。
(2)パラメータ
表3.25 jti_rsm_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.26 jti_rsm_thrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外が発生した (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_sta_thr (JNO thrno)
Java のThread クラス中のstart メソッドを呼ぶ。
(2)パラメータ
表3.27 jti_sta_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.28 jti_sta_thrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中に状態違反が発生した (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_thr_stp (JNO thrno)
Java のThread クラス中のstop メソッドを呼ぶ。
(2)パラメータ
表3.29 jti_thr_stpのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.30 jti_thr_stpのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外、NULLポインタ例外が発生した (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_des_thr (JNO thrno)
Java のThread クラス中のdestroy メソッドを呼ぶ。
(2)パラメータ
表3.31 jti_des_thrのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.32 jti_des_thrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外が発生した (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_get_jpr (JNO thrno, INT *p_rslt)
Java のThread クラス中のgetPriority メソッドを呼ぶ。(2)パラメータ
表3.33 jti_get_jprのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 p_rslt *INT 取得したJavaスレッドの優先度(ポインタ) (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.34 jti_get_jprのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_set_jpr (JNO thrno, INT newpri)
Java のThread クラス中のメソッドsetPriority を呼ぶ。
(2)パラメータ
表3.35 jti_set_jprのパラメータ ニモニック 型 内容 thrno JNO 処理対象のスレッド識別番号 newpri INT 設定するJavaスレッドの優先度 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.36 jti_set_jprのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外、引数誤り例外が発生した (5)特記事項 処理対象のスレッド識別番号は、 jti_get_thrにより取得した値を使用すること。
(1)API
ER ercd = jti_get_tgr (char *tgrnm, JNO *p_tgrno)
Javaスレッドグループの名前から、スレッドグループ識別番号を求める。
(2)パラメータ
表3.37 jti_get_tgrのパラメータ ニモニック 型 内容 tgrnm *char スレッドグループ名(ASCII文字列) p_tgrno *JNO スレッドグループ識別番号(ポインタ) (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.38 jti_get_tgrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_OBJ 指定したJavaスレッドグループが存在しない E_PAR パラメタの誤り (5)特記事項 Javaスレッドグループの名前は、 ASCIIコード文字列で31文字以内とする。 処理対象のJavaスレッドグループには、必ずJavaプログラムで名前を付けること。
(1)API
ER ercd = jti_des_tgr (JNO tgrno)
Java のThreadGroup クラス中のdestroy メソッドを呼ぶ。
(2)パラメータ
表3.39 jti_des_tgrのパラメータ ニモニック 型 内容 tgrno JNO 処理対象のスレッドグループ識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.40 jti_des_tgrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ avaメソッド実行中にセキュリティ例外、状態違反が発生した (5)特記事項 処理対象のスレッドグループ識別番号は、 jti_get_tgrにより取得した値を使用すること。
(1)API
ER ercd = jti_sus_tgr (JNO tgrno)
Java のThreadGroup クラス中のsuspend メソッドを呼ぶ。
(2)パラメータ
表3.41 jti_sus_tgrのパラメータ ニモニック 型 内容 tgrno JNO 処理対象のスレッドグループ識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.42 jti_sus_tgrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外が発生した (5)特記事項 処理対象のスレッドグループ識別番号は、 jti_get_tgrにより取得した値を使用すること。
(1)API
ER ercd = jti_rsm_tgr (JNO tgrno)
Java のThreadGroup クラス中のresume メソッドを呼ぶ。
(2)パラメータ
表3.43 jti_rsm_tgrのパラメータ ニモニック 型 内容 tgrno JNO 処理対象のスレッドグループ識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.44 jti_rsm_tgrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外が発生した (5)特記事項 処理対象のスレッドグループ識別番号は、 jti_get_tgrにより取得した値を使用すること。
(1)API
ER ercd = jti_stp_tgr (JNO tgrno)
Java のThreadGroup クラス中のstop メソッドを呼ぶ。
(2)パラメータ
表3.45 jti_stp_tgrのパラメータ ニモニック 型 内容 tgrno JNO 処理対象のスレッドグループ識別番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.46 jti_stp_tgrのエラーコード エラーコードの値 内容 E_OK 正常終了 E_PAR パラメタの誤り E_OBJ Javaメソッド実行中にセキュリティ例外が発生した (5)特記事項 処理対象のスレッドグループ識別番号は、 jti_get_tgrにより取得した値を使用すること。
本ストリームクラスを使用することでITRONアプリケーションとJavaプログラムの間でストリームを介してデータ交換を行うことができる。
ストリームは、 μITRONリアルタイムタスクからJavaスレッドへデータを送信するための送信チャネルとμITRONリアルタイムタスクがJavaスレッドからデータを受信するための受信チャネルの2つのチャネルを持つ。チャネルは両方使用することもできるし、片方のみ使用することもできる。
Java側からデータ送受信を行う場合、ストリームクラスより生成されるJavaの標準的な入出力インターフェースであるInputStream、OutputStream を使用する。
以下にチャネルと入出力インターフェースの関係を示す。
┏━━━━━━━━┓ ┃ ストリーム ┃ ┃ ┃ ┌───────┐ ┌───┐ ┃_______┃ ┌────┐ │ µITRONリアル │-│ITRON │ → 送信チャネル → InputStream →│Java │ │タイムタスク │ │API │ ┃‾‾‾‾‾‾‾┃ │スレッド│ │ │ │ │ ┃_______┃ │ │ │ │ │ │ ←受信チャネル ← OutputStream ←│ │ └───────┘ └───┘ ┃‾‾‾‾‾‾‾┃ └────┘ ┗━━━━━━━━┛ 図3.2 チャネルと入出力インターフェース
※Javaは、米国及びその他の国における米国Sun Microsystems社の登録商標である。
※API(Application Programming Interface)とは、オペレーティングシステムと、その上で動作するアプリケーションプログラム間のインターフェースである。
※スレッドとは、Javaのプログラムが動作するときに、必ず発生する処理の単位である。
Java側からストリームを使用するためのクラスは以下のパッケージにまとめられる。
jp.gr.itron.jtron.stream
本ストリームクラスがどのように使用されるかの概要を以下に述べる。
手順1: ITRON APIを使用し、ITRONアプリケーションタスクから、ストリームを生成しストリーム接続処理を行う。 手順2: Java APIを使用し、Javaプログラムからストリーム接続処理を行う。 手順3: ITRON API、Java APIを使用し、ITRONアプリケーションタスク、Javaプログラムの双方からストリームに対し、読み込み、書き込み処理を行いデータの送受信を行う。 手順:4 ITRON API、Java APIを使用し、ITRONアプリケーションタスク、Javaプログラムの双方からストリームの切断処理を行う。 手順:5 ITRON APIを使用し、ストリームを削除する。
ストリームをJava側から使用するために以下のクラスがある。
(A)JtiDataStream (B)JtiDataStreamException
ストリームをITRON側から使用するために以下のAPIがある。
(A)jti_cre_stm (B)jti_del_stm (C)jti_wri_stm (D)jti_rea_stm (E)jti_sht_stm (F)jti_ref_stm
(1)クラス名、親クラス public class JtiDataStream
(2)説明 ストリームを使ってμITRONリアルタイムタスクと通信を行うためのクラス。 (3)フィールド
表3.47 JtiDataStreamのフィールド ニモニック 型 内容 MAIN_STREAM int 標準的なストリーム番号 (4)コンストラクタ
(A) public JtiDataStream (int stmid) throws JtiDataStreamException, InterruptedException, IOException 指定した番号のストリームをオープンする。両方のチャネルが接続状態 になる。片方のチャネルのみを持つストリームの場合は, 片方のチャネ ルのみが接続状態になる。 指定した番号が既に使用されている場合は JtiDataStreamExceptionが発生する。 (B) public JtiDataStream (int stmid,int tmout) throws java.io.IOException,java.lang.InterruptedException タイムアウト時間を指定して,指定したストリームをオープンする。 タ イムアウト時間はミリ秒。 指定した番号が既に使用されている場合は JtiDataStreamException が発生する。 タイムアウト発生時は例外 InterruptedException が発生する。 (C) protected JtiDataStream (JtiDataStreamImpl impl,int stmid,int tmout) throws java.io.IOException,java.lang.InterruptedException ユーザー定義の実装を用いて,タイムアウト時間を指定して,指定した番 号のストリームをオープンする。指定した番号が既に使用されている場 合はJtiDataStreamException が発生する。タイムアウト発生時は例外 InterrupptedException が発生する。 (5)メソッド
(D) public synchronized InputStream getInputStream () throws java.io.IOException 送信チャネル用入出力ストリームを取得する. (E) public synchronized OutputStream getOutputStream () throws java.io.IOException 受信チャネル用入出力ストリームを取得する. (F) public synchronized void setIDSTimeOut (int tmout) throws java.io.IOException InputStreamに対してreadメソッドを実行した場合のタイムアウト時間 を指定する。単位はミリ秒。tmoutは0以上でなければならない。 0を指 定した場合は無限待ちになる。 タイムアウト発生時は java. io. InterruptedExceptionが発生する。なお,OutputStreamに対してwriteメ ソッドを実行した場合は他のストリーム操作と同様にタイムアウト指定 はできない。 (G) public synchronized int getIDSTimeOut () throws java.io.IOException ImputStreamに対してreadメソッドを実行した場合のタイムアウト時間 を取得する。単位はミリ秒である。 0が返却された場合は無限待ちを意 味する。 (H) public synchronized void close () throws java.io.IOException ストリームをクローズする。 具体的には,送信用のチャネルが接続状態 なら正常クローズして送信終了状態にし, 受信用のチャネルが接続状態 なら強制クローズして強制切断状態にする。また受信用のチャネルが送 信終了状態の場合には切断状態にする。 (6)特記事項 特になし
(1)クラス名、親クラス public class JtiDataStreamException extends java.io.IOException
(2)説明 ストリームクラス使用時の例外。 (3)フィールド
表3.48 JtiDataStreamExceptionのフィールド ニモニック 型 内容 Cause int エラー原因番号 STREAM_NOT_FOUND int ストリームが存在しない STREAM_IN_USE int ストリームは既に使用されている STREAM_CLOSED int ストリームは既に閉じている STREAM_ILLEGAL_ARGUMENT int 入力パラメータにエラーがある (4)コンストラクタ
(A) public JtiDataStreamException (int c) エラー原因番号を指定してオブジェクトを生成する。 (B) public JtiDataStreamException (int c,String msg) エラー原因番号とエラーメッセージを指定してオブジェクトを生成する。 (5)メソッド
(C) public int getCause () エラー原因番号を返す。 (6)特記事項 特になし
(1)API
ER ercd = jti_cre_stm(ID stmid,T_JTI_CSTM *pk_cstm)
ストリームの生成
(2)パラメータ
表3.49 jti_cre_stmのパラメータ ニモニック 型 内容 stmid ID ストリーム番号 pk_cstm T_JTI_CSTM * ストリーム生成情報
表3.50 構造体 T_JTI_CSTMの内容 ニモニック 型 内容 exinf VP 拡張情報 stmatr ATR ストリーム属性 wbuf VP 送信バッファの先頭アドレス
NADRを指定した場合、バッファを内部で確保するwbufsz INT 送信バッファサイズ(バイト数) rbuf VP 受信バッファの先頭アドレス
NADRを指定した場合、バッファを内部で確保するrbufsz INT 受信バッファサイズ(バイト数) (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.51 jti_cre_stmのエラーコード エラーコードの値 内容 E_OK 正常終了 E_ID 不正ID番号 E_PAR パラメータエラー E_OBJ オブジェクト状態エラー (5)特記事項 特になし
(1)API
ER ercd = jti_del_stm(ID stmid)
ストリームの削除(2)パラメータ
表3.52 jti_del_stmのパラメータ ニモニック 型 内容 stmid ID ストリーム番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.53 jti_del_stmのエラーコード エラーコードの値 内容 E_OK 正常終了 E_ID 不正ID番号 E_NOEXS オブジェクト未生成 E_OBJ オブジェクト状態エラー (5)特記事項 特になし
(1)API
ER ercd = jti_wri_stm(ID stmid,VP data,INT len,TMO tmout)
データの送信(2)パラメータ
表3.54 jti_wri_stmのパラメータ ニモニック 型 内容 stmid ID ストリーム番号 data VP 送信データの先頭アドレス len INT 送信したいデータの長さ tmout TMO タイムアウト指定 (3)戻り値 ER ercd 送信した長さ(送信バッファに入れたデータの長さ)/エラーコ ード (4)エラーコード
表3.55 jti_wri_stmのエラーコード エラーコードの値 内容 E_ID 不正ID番号 E_NOEXS オブジェクト未生成 E_PAR パラメータエラー E_OBJ オブジェクト状態エラー E_TMOUT ポーリング失敗、タイムアウト E_CLS チャネルの強制切断 (5)特記事項 特になし
(1)API
ER ercd = jti_rea_stm(ID stmid,VP data,INT len,TMO tmout)
データの受信(2)パラメータ
表3.56 jti_rea_stmのパラメータ ニモニック 型 内容 stmid ID ストリーム番号 data VP 受信データの先頭アドレス len INT 受信したいデータの長さ tmout TMO タイムアウト指定 (3)戻り値 ER ercd 送信した長さ(送信バッファに入れたデータの長さ)/エラーコ ード (4)エラーコード
表3.57 jti_rea_stmのエラーコード エラーコードの値 内容 E_ID 不正ID番号 E_NOEXS オブジェクト未生成 E_PAR パラメータエラー E_OBJ オブジェクト状態エラー E_TMOUT ポーリング失敗、タイムアウト (5)特記事項 特になし
(1)API
ER ercd = jti_sht_stm(ID stmid)
データ送信の終了(2)パラメータ
表3.58 jti_sht_stmのパラメータ ニモニック 型 内容 stmid ID ストリーム番号 (3)戻り値 ER ercd エラーコード (4)エラーコード
表3.59 jti_sht_stmのエラーコード エラーコードの値 内容 E_OK 正常終了 E_ID 不正ID番号 E_NOEXS オブジェクト未生成 E_OBJ オブジェクト状態エラー E_CLS チャネルの強制切断 (5)特記事項 特になし
(1)API
ER ercd = jti_ref_stm(ID stmid,T_JTI_RSTM *pk_rstm)
ストリームの状態参照(2)パラメータ
表3.60 jti_ref_stmのパラメータ ニモニック 型 内容 stmid ID ストリーム番号 pk_rstm T_JTI_RSTM * ストリーム状態を返すパケットのアドレス
表3.61 構造体 T_JTI_RSTMの内容 ニモニック 型 内容 exinf VP 拡張情報 wrisz INT 待たずに送信可能なデータサイズ(バイト数) reasz INT 待たずに受信可能なデータサイズ(バイト数) (3)戻り値 ER ercdエラーコード (4)エラーコード
表3.62 jti_ref_stmのエラーコード エラーコードの値 内容 E_OK 正常終了 E_ID 不正ID番号 E_NOEXS オブジェクト未生成 E_PAR パラメータエラー (5)特記事項 特になし