alarm.c

#include "kernel_impl.h"
#include "check.h"
#include "alarm.h"

ソースコードを見る。

マクロ定義

#define LOG_ALM_ENTER(p_almcb)
#define LOG_ALM_LEAVE(p_almcb)
#define LOG_STA_ALM_ENTER(almid, almtim)
#define LOG_STA_ALM_LEAVE(ercd)
#define LOG_ISTA_ALM_ENTER(almid, almtim)
#define LOG_ISTA_ALM_LEAVE(ercd)
#define LOG_STP_ALM_ENTER(almid)
#define LOG_STP_ALM_LEAVE(ercd)
#define LOG_ISTP_ALM_ENTER(almid)
#define LOG_ISTP_ALM_LEAVE(ercd)
#define LOG_REF_ALM_ENTER(almid, pk_ralm)
#define LOG_REF_ALM_LEAVE(ercd, pk_ralm)
#define tnum_alm   ((uint_t)(tmax_almid - TMIN_ALMID + 1))
#define INDEX_ALM(almid)   ((uint_t)((almid) - TMIN_ALMID))
#define get_almcb(almid)   (&(almcb_table[INDEX_ALM(almid)]))

関数

void initialize_alarm (void)
ER sta_alm (ID almid, RELTIM almtim)
ER ista_alm (ID almid, RELTIM almtim)
ER stp_alm (ID almid)
ER istp_alm (ID almid)
ER ref_alm (ID almid, T_RALM *pk_ralm)
void call_almhdr (ALMCB *p_almcb)


マクロ定義

#define get_almcb ( almid   )     (&(almcb_table[INDEX_ALM(almid)]))

alarm.c111 行で定義されています。

参照元 ista_alm(), istp_alm(), ref_alm(), sta_alm(), と stp_alm().

#define INDEX_ALM ( almid   )     ((uint_t)((almid) - TMIN_ALMID))

alarm.c110 行で定義されています。

#define LOG_ALM_ENTER ( p_almcb   ) 

alarm.c55 行で定義されています。

参照元 call_almhdr().

#define LOG_ALM_LEAVE ( p_almcb   ) 

alarm.c59 行で定義されています。

参照元 call_almhdr().

#define LOG_ISTA_ALM_ENTER ( almid,
almtim   ) 

alarm.c71 行で定義されています。

参照元 ista_alm().

#define LOG_ISTA_ALM_LEAVE ( ercd   ) 

alarm.c75 行で定義されています。

参照元 ista_alm().

#define LOG_ISTP_ALM_ENTER ( almid   ) 

alarm.c87 行で定義されています。

参照元 istp_alm().

#define LOG_ISTP_ALM_LEAVE ( ercd   ) 

alarm.c91 行で定義されています。

参照元 istp_alm().

#define LOG_REF_ALM_ENTER ( almid,
pk_ralm   ) 

alarm.c95 行で定義されています。

参照元 ref_alm().

#define LOG_REF_ALM_LEAVE ( ercd,
pk_ralm   ) 

alarm.c99 行で定義されています。

参照元 ref_alm().

#define LOG_STA_ALM_ENTER ( almid,
almtim   ) 

alarm.c63 行で定義されています。

参照元 sta_alm().

#define LOG_STA_ALM_LEAVE ( ercd   ) 

alarm.c67 行で定義されています。

参照元 sta_alm().

#define LOG_STP_ALM_ENTER ( almid   ) 

alarm.c79 行で定義されています。

参照元 stp_alm().

#define LOG_STP_ALM_LEAVE ( ercd   ) 

alarm.c83 行で定義されています。

参照元 stp_alm().

#define tnum_alm   ((uint_t)(tmax_almid - TMIN_ALMID + 1))

alarm.c105 行で定義されています。

参照元 initialize_alarm().


関数

void call_almhdr ( ALMCB p_almcb  ) 

alarm.c306 行で定義されています。

参照先 alarm_handler_initialization_block::almhdr, alarm_handler_control_block::almsta, alarm_handler_initialization_block::exinf, i_get_ipm, i_lock_cpu, i_sense_lock, i_set_ipm, i_unlock_cpu, LOG_ALM_ENTER, LOG_ALM_LEAVE, と alarm_handler_control_block::p_alminib.

00307 {
00308     PRI     saved_ipm;
00309 
00310     /*
00311      *  アラームハンドラを停止状態にする.
00312      */
00313     p_almcb->almsta = false;
00314 
00315     /*
00316      *  アラームハンドラを,CPUロック解除状態で呼び出す.
00317      */
00318     saved_ipm = i_get_ipm();
00319     i_unlock_cpu();
00320 
00321     LOG_ALM_ENTER(p_almcb);
00322     (*((ALMHDR)(p_almcb->p_alminib->almhdr)))(p_almcb->p_alminib->exinf);
00323     LOG_ALM_LEAVE(p_almcb);
00324 
00325     if (!i_sense_lock()) {
00326         i_lock_cpu();
00327     }
00328     i_set_ipm(saved_ipm);
00329 }

void initialize_alarm ( void   ) 

alarm.c119 行で定義されています。

参照先 almcb_table, alminib_table, alarm_handler_control_block::almsta, alarm_handler_control_block::p_alminib, と tnum_alm.

00120 {
00121     uint_t  i;
00122     ALMCB   *p_almcb;
00123 
00124     for (p_almcb = almcb_table, i = 0; i < tnum_alm; p_almcb++, i++) {
00125         p_almcb->p_alminib = &(alminib_table[i]);
00126         p_almcb->almsta = false;
00127     }
00128 }

ER ista_alm ( ID  almid,
RELTIM  almtim 
)

alarm.c174 行で定義されています。

参照先 alarm_handler_control_block::almsta, call_almhdr, CHECK_ALMID, CHECK_INTCTX_UNL, CHECK_PAR, E_OK, get_almcb, i_lock_cpu, i_unlock_cpu, LOG_ISTA_ALM_ENTER, LOG_ISTA_ALM_LEAVE, TMAX_RELTIM, alarm_handler_control_block::tmevtb, tmevtb_dequeue(), と tmevtb_enqueue().

00175 {
00176     ALMCB   *p_almcb;
00177     ER      ercd;
00178 
00179     LOG_ISTA_ALM_ENTER(almid, almtim);
00180     CHECK_INTCTX_UNL();
00181     CHECK_ALMID(almid);
00182     CHECK_PAR(almtim <= TMAX_RELTIM);
00183     p_almcb = get_almcb(almid);
00184 
00185     i_lock_cpu();
00186     if (p_almcb->almsta) {
00187         tmevtb_dequeue(&(p_almcb->tmevtb));
00188     }
00189     else {
00190         p_almcb->almsta = true;
00191     }
00192     tmevtb_enqueue(&(p_almcb->tmevtb), almtim,
00193                                 (CBACK) call_almhdr, (void *) p_almcb);
00194     ercd = E_OK;
00195     i_unlock_cpu();
00196 
00197   error_exit:
00198     LOG_ISTA_ALM_LEAVE(ercd);
00199     return(ercd);
00200 }

ER istp_alm ( ID  almid  ) 

alarm.c241 行で定義されています。

参照先 alarm_handler_control_block::almsta, CHECK_ALMID, CHECK_INTCTX_UNL, E_OK, get_almcb, i_lock_cpu, i_unlock_cpu, LOG_ISTP_ALM_ENTER, LOG_ISTP_ALM_LEAVE, alarm_handler_control_block::tmevtb, と tmevtb_dequeue().

00242 {
00243     ALMCB   *p_almcb;
00244     ER      ercd;
00245 
00246     LOG_ISTP_ALM_ENTER(almid);
00247     CHECK_INTCTX_UNL();
00248     CHECK_ALMID(almid);
00249     p_almcb = get_almcb(almid);
00250 
00251     i_lock_cpu();
00252     if (p_almcb->almsta) {
00253         p_almcb->almsta = false;
00254         tmevtb_dequeue(&(p_almcb->tmevtb));
00255     }
00256     ercd = E_OK;
00257     i_unlock_cpu();
00258 
00259   error_exit:
00260     LOG_ISTP_ALM_LEAVE(ercd);
00261     return(ercd);
00262 }

ER ref_alm ( ID  almid,
T_RALM pk_ralm 
)

alarm.c272 行で定義されています。

参照先 alarm_handler_control_block::almsta, t_ralm::almstat, CHECK_ALMID, CHECK_TSKCTX_UNL, E_OK, get_almcb, t_ralm::lefttim, LOG_REF_ALM_ENTER, LOG_REF_ALM_LEAVE, t_lock_cpu, t_unlock_cpu, TALM_STA, TALM_STP, tmevt_lefttim, と alarm_handler_control_block::tmevtb.

00273 {
00274     ALMCB   *p_almcb;
00275     ER      ercd;
00276     
00277     LOG_REF_ALM_ENTER(almid, pk_ralm);
00278     CHECK_TSKCTX_UNL();
00279     CHECK_ALMID(almid);
00280     p_almcb = get_almcb(almid);
00281 
00282     t_lock_cpu();
00283     if (p_almcb->almsta) {
00284         pk_ralm->almstat = TALM_STA;
00285         pk_ralm->lefttim = tmevt_lefttim(&(p_almcb->tmevtb));
00286     }
00287     else {
00288         pk_ralm->almstat = TALM_STP;
00289     }
00290     ercd = E_OK;
00291     t_unlock_cpu();
00292 
00293   error_exit:
00294     LOG_REF_ALM_LEAVE(ercd, pk_ralm);
00295     return(ercd);
00296 }

ER sta_alm ( ID  almid,
RELTIM  almtim 
)

alarm.c138 行で定義されています。

参照先 alarm_handler_control_block::almsta, call_almhdr, CHECK_ALMID, CHECK_PAR, CHECK_TSKCTX_UNL, E_OK, get_almcb, LOG_STA_ALM_ENTER, LOG_STA_ALM_LEAVE, t_lock_cpu, t_unlock_cpu, TMAX_RELTIM, alarm_handler_control_block::tmevtb, tmevtb_dequeue(), と tmevtb_enqueue().

参照元 main_task().

00139 {
00140     ALMCB   *p_almcb;
00141     ER      ercd;
00142 
00143     LOG_STA_ALM_ENTER(almid, almtim);
00144     CHECK_TSKCTX_UNL();
00145     CHECK_ALMID(almid);
00146     CHECK_PAR(almtim <= TMAX_RELTIM);
00147     p_almcb = get_almcb(almid);
00148 
00149     t_lock_cpu();
00150     if (p_almcb->almsta) {
00151         tmevtb_dequeue(&(p_almcb->tmevtb));
00152     }
00153     else {
00154         p_almcb->almsta = true;
00155     }
00156     tmevtb_enqueue(&(p_almcb->tmevtb), almtim,
00157                                 (CBACK) call_almhdr, (void *) p_almcb);
00158     ercd = E_OK;
00159     t_unlock_cpu();
00160 
00161   error_exit:
00162     LOG_STA_ALM_LEAVE(ercd);
00163     return(ercd);
00164 }

ER stp_alm ( ID  almid  ) 

alarm.c210 行で定義されています。

参照先 alarm_handler_control_block::almsta, CHECK_ALMID, CHECK_TSKCTX_UNL, E_OK, get_almcb, LOG_STP_ALM_ENTER, LOG_STP_ALM_LEAVE, t_lock_cpu, t_unlock_cpu, alarm_handler_control_block::tmevtb, と tmevtb_dequeue().

参照元 main_task().

00211 {
00212     ALMCB   *p_almcb;
00213     ER      ercd;
00214 
00215     LOG_STP_ALM_ENTER(almid);
00216     CHECK_TSKCTX_UNL();
00217     CHECK_ALMID(almid);
00218     p_almcb = get_almcb(almid);
00219 
00220     t_lock_cpu();
00221     if (p_almcb->almsta) {
00222         p_almcb->almsta = false;
00223         tmevtb_dequeue(&(p_almcb->tmevtb));
00224     }
00225     ercd = E_OK;
00226     t_unlock_cpu();
00227 
00228   error_exit:
00229     LOG_STP_ALM_LEAVE(ercd);
00230     return(ercd);
00231 }


Copyright © 2008 by Kijineko Inc.

ホームページ制作