cyclic.h

#include "time_event.h"

ソースコードを見る。

データ構造

struct  cyclic_handler_initialization_block
struct  cyclic_handler_control_block

型定義

typedef struct
cyclic_handler_initialization_block 
CYCINIB
typedef struct
cyclic_handler_control_block 
CYCCB

関数

void initialize_cyclic (void)
void call_cychdr (CYCCB *p_cyccb)

変数

const ID tmax_cycid
const CYCINIB cycinib_table []
CYCCB cyccb_table []


型定義


関数

void call_cychdr ( CYCCB p_cyccb  ) 

cyclic.c238 行で定義されています。

参照先 cyclic_handler_initialization_block::cychdr, cyclic_handler_initialization_block::cyctim, cyclic_handler_control_block::evttim, cyclic_handler_initialization_block::exinf, i_get_ipm, i_lock_cpu, i_sense_lock, i_set_ipm, i_unlock_cpu, LOG_CYC_ENTER, LOG_CYC_LEAVE, cyclic_handler_control_block::p_cycinib, と tmevtb_enqueue_cyc().

00239 {
00240     PRI     saved_ipm;
00241 
00242     /*
00243      *  次回の起動のためのタイムイベントブロックを登録する.
00244      *
00245      *  同じタイムティックで周期ハンドラを再度起動すべき場合には,この
00246      *  関数からsignal_timeに戻った後に,再度この関数が呼ばれることにな
00247      *  る.
00248      */
00249     tmevtb_enqueue_cyc(p_cyccb, p_cyccb->evttim + p_cyccb->p_cycinib->cyctim);
00250 
00251     /*
00252      *  周期ハンドラを,CPUロック解除状態で呼び出す.
00253      */
00254     saved_ipm = i_get_ipm();
00255     i_unlock_cpu();
00256 
00257     LOG_CYC_ENTER(p_cyccb);
00258     (*((CYCHDR)(p_cyccb->p_cycinib->cychdr)))(p_cyccb->p_cycinib->exinf);
00259     LOG_CYC_LEAVE(p_cyccb);
00260 
00261     if (!i_sense_lock()) {
00262         i_lock_cpu();
00263     }
00264     i_set_ipm(saved_ipm);
00265 }

void initialize_cyclic ( void   ) 

cyclic.c114 行で定義されています。

参照先 cyclic_handler_initialization_block::cycatr, cyccb_table, cycinib_table, cyclic_handler_initialization_block::cycphs, cyclic_handler_control_block::cycsta, cyclic_handler_control_block::p_cycinib, TA_STA, tmevtb_enqueue_cyc(), と tnum_cyc.

00115 {
00116     uint_t  i;
00117     CYCCB   *p_cyccb;
00118 
00119     for (p_cyccb = cyccb_table, i = 0; i < tnum_cyc; p_cyccb++, i++) {
00120         p_cyccb->p_cycinib = &(cycinib_table[i]);
00121         if ((p_cyccb->p_cycinib->cycatr & TA_STA) != 0U) {
00122             p_cyccb->cycsta = true;
00123             tmevtb_enqueue_cyc(p_cyccb, (EVTTIM)(p_cyccb->p_cycinib->cycphs));
00124         }
00125         else {
00126             p_cyccb->cycsta = false;
00127         }
00128     }
00129 }


変数

const ID tmax_cycid


Copyright © 2008 by Kijineko Inc.

ホームページ制作