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

How to write a task

Example of the task rouchine

Module initialize

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タスクを起床 */
}

Task

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;
    }
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です