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