INtimeドキュメンタリトップへ

INtimeアプリケーションプログラミングとINtimeウィザード

課題
INtimeアプリケーションの作成手法として、INtimeウィザードを使用することによりベースの骨組みが自動生成されます。ここから制御の種類や方法により、修正をしていくという方法が一般的な方法だと分かりました。
まずはINtimeウィザードからプロジェクトを立ち上げてみたいと思います。

10月8日・・・ソースコード生成魔術師(INtimeウィザード)

タスク相関図が出来たので、プログラミング作業に入りました。

まずプロジェクト作成。
INtimeウィザードを使用してアナログデータ取り込み用スレッド、擬似アナログデータ作成ポーリングスレッド、ログ出力スレッドを作成しました。

以下のとおり:


割り込み処理

 

 

アナログデータ取り込み用スレッド
割り込みレベル
PCI based
ベンダーID 1221
デバイスID 8153
割り込み共有 (なし)
シグナル方式 ハンドラと割り込みスレッド
待ち時間 WAIT_FOREVER
割り込みキュー 1

規則的周期で待つスレッド

 

 

擬似アナログデータ作成スレッド
ウエイト方式
SLEEP
待ち時間 100ms
スレッドプライオリティ 170
スタックサイズ 4096

メールボックスを待つスレッド

 

 

ログデータ出力スレッド
スレッドが待つオブジェクト型
データ型メールボックス
待ち時間 100ms
スレッドプライオリティ 160
スタックサイズ 4096

実行
とりあえず上記のスレッドを生成することにしました。
上記の中で不明だった部分はスレッドプライオリティとスタックサイズの指定だったが、とりあえず気にせずにINtimeウィザードを終了すると、ソースコードが生成されました。
作成時にはそれぞれのオブジェクト名がPollThread1やServer1などデフォルト名で決定されるので、ソース生成後それらの名前をタスク相関図に則って変更しました。

/**************************************************************************                      
FUNCTION:            PollThread1
* PARAMETERS:                         なし
* RETURNS:          なし                       
* DESCRIPTION: ポーリングスレッド # 1. 
\**************************************************************************/
                     
void    PollThread1(void) 
                     
{ 
                     
#ifdef _DEBUG 
                     
       printf("Poll 1 started\n"); 
                  
#endif
while (1)
    {
        RtSleep( 1000);
#ifdef _DEBUG
printf("Poll 1 waking up\n");
#endif

        // TODO: 1000 ミリ秒ごとに繰り返す処理を配置します
 }
}
ポーリングスレッド生成時にはデフォルトで上記のようなコードで生成されます
(ポーリング周期1000ms指定時)

本日の感想

待ち時間などを設定すれば自動でINtimeウィザードが環境やその他初めの骨組みを作成してくれるので楽でした。

スレッドの基本構造がソースコードで生成されているので、あとは処理をその中に記述するのみとなっています。