リアルタイムふうOS 初期化とメインルーチン

Initialization and Mainrouchine

General flowchart

Flowchart

OS Initialization

Initialize

void init_os( void )
{
    que_type  *que;

    que = &TimerQ;
    TimerQ.link = (tcb_type *)que;
    TimerQ.back_link = (tcb_type *)que;

    que = &ReadyQ;
    ReadyQ.link = (tcb_type *)que;
    ReadyQ.back_link = (tcb_type *)que;
}

Mainrouchine flowchart

Mainrouchine

void task_main( void )
{
    que_type  *que;
    tcb_type  *tcb;
    uint8     state;

    que = &ReadyQ;
    while( TRUE ) {
        tcb = que->link;
        if( tcb != (tcb_type *)que ) {
            DI;
            tcb_unlink( tcb );
            EI;
            state = tcb->next_state;
            tcb->next_state = (uint8)( state + 1 );
            (*tcb->entry)( state );
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。