リアルタイムふうOS>タスクの書式

<前      目次      次>

RTF-OS (RealTimeFoo OperatingSystem)


タスク処理ルーチンの例

モジュールの初期化

tcb_type    *tcb_sample1;
tcb_type    *tcb_sample2;
flag_type   *flag;

void init_sample( void )    /* 初期化ルーチン */
{
    tcb_sample1 = create_tcb( sample1 );   /* sample1タスクのTCBを作成 */
    tcb_sample2 = create_tcb( sample2 );   /* sample2タスクのTCBを作成 */

    flag = create_flag();                  /* イベントフラグflagを作成 */

    start_task( tcb_sample1 );             /* sample1タスクを起床 */
}

タスク処理本体

void sample1( uint8 state )
{
    tcb_type *tcb;

    tcb = tcb_sample1;
    switch( state ) {    /* stateは状態変数 */
        case 0:          /* 状態変数の最初値は0 */
            /* 状態0での処理*/
            delay_task( tcb, 50 );    /* 50ms後に状態1へ遷移する */
            break;                    /* (通常の状態遷移は1加算した値) */
        case 1:
            /* 状態1での処理*/
            slice_task( tcb );        /* 実行を中断し実行待ちリストの最後に再接続 */
            break;                    /* (次の状態遷移は2) */
        case 2:
            /* 状態2での処理*/
            set_flag( flag );         /* イベントフラグflagをTRUEに設定 */
            set_next_state( tcb, 1 );   /* 次の状態遷移を1に設定する */
            delay_task( tcb, 50 );      /* 50ms後に状態1へ遷移する */
            break;
        default:
            break;
    }
}

void sample2( uint8 state )
{
    tcb_type *tcb;

    tcb = tcb_sample2;
    switch( state ) {    /* stateは状態変数 */
        case 0:          /* 状態変数の最初値は0 */
            /* 状態0での処理*/
            wait_flag( flag );        /* イベントフラグflagがTRUEになるのを待つ */
            break;                    /* (通常の状態遷移は1加算した値) */
        case 1:
            /* 状態1での処理*/
            clear_flag( flag );       /* イベントフラグflagをFALSEにリセット */
            set_next_state( tcb, 1 ); /* 次の状態遷移を1に設定する */
            wait_flag( flag );        /* イベントフラグflagがTRUEになるのを待つ */
            break;                    /* (次の状態遷移は1) */
        default:
            break;
    }
}

<前      目次      次>
2008/4/30 改訂2
2007/7/7 改訂1
2007/5/1 初版