interrupt.c

#include "kernel_impl.h"
#include "check.h"
#include "task.h"
#include "interrupt.h"

ソースコードを見る。

マクロ定義

#define LOG_DIS_INT_ENTER(intno)
#define LOG_DIS_INT_LEAVE(ercd)
#define LOG_ENA_INT_ENTER(intno)
#define LOG_ENA_INT_LEAVE(ercd)
#define LOG_CHG_IPM_ENTER(intpri)
#define LOG_CHG_IPM_LEAVE(ercd)
#define LOG_GET_IPM_ENTER(p_intpri)
#define LOG_GET_IPM_LEAVE(ercd, intpri)

関数

void initialize_interrupt (void)
ER chg_ipm (PRI intpri)
ER get_ipm (PRI *p_intpri)


マクロ定義

#define LOG_CHG_IPM_ENTER ( intpri   ) 

interrupt.c72 行で定義されています。

参照元 chg_ipm().

#define LOG_CHG_IPM_LEAVE ( ercd   ) 

interrupt.c76 行で定義されています。

参照元 chg_ipm().

#define LOG_DIS_INT_ENTER ( intno   ) 

interrupt.c56 行で定義されています。

#define LOG_DIS_INT_LEAVE ( ercd   ) 

interrupt.c60 行で定義されています。

#define LOG_ENA_INT_ENTER ( intno   ) 

interrupt.c64 行で定義されています。

#define LOG_ENA_INT_LEAVE ( ercd   ) 

interrupt.c68 行で定義されています。

#define LOG_GET_IPM_ENTER ( p_intpri   ) 

interrupt.c80 行で定義されています。

参照元 get_ipm().

#define LOG_GET_IPM_LEAVE ( ercd,
intpri   ) 

interrupt.c84 行で定義されています。

参照元 get_ipm().


関数

ER chg_ipm ( PRI  intpri  ) 

interrupt.c193 行で定義されています。

参照先 CHECK_INTPRI_CHGIPM, CHECK_TSKCTX, disdsp, dispatch, dspflg, E_OK, LOG_CHG_IPM_ENTER, LOG_CHG_IPM_LEAVE, p_runtsk, p_schedtsk, t_lock_cpu, t_sense_lock, t_set_ipm, t_unlock_cpu, と TIPM_ENAALL.

00194 {
00195     bool_t  locked;
00196     ER      ercd;
00197 
00198     LOG_CHG_IPM_ENTER(intpri);
00199     CHECK_TSKCTX();
00200     CHECK_INTPRI_CHGIPM(intpri);
00201 
00202     locked = t_sense_lock();
00203     if (!locked) {
00204         t_lock_cpu();
00205     }
00206     t_set_ipm(intpri);
00207     if (intpri != TIPM_ENAALL) {
00208         dspflg = false;
00209     }
00210     else if (!disdsp) {
00211         dspflg = true;
00212         if (p_runtsk != p_schedtsk) {
00213             dispatch();
00214         }
00215     }
00216     ercd = E_OK;
00217     if (!locked) {
00218         t_unlock_cpu();
00219     }
00220 
00221   error_exit:
00222     LOG_CHG_IPM_LEAVE(ercd);
00223     return(ercd);
00224 }

ER get_ipm ( PRI p_intpri  ) 

interrupt.c234 行で定義されています。

参照先 CHECK_TSKCTX, E_OK, LOG_GET_IPM_ENTER, LOG_GET_IPM_LEAVE, t_get_ipm, t_lock_cpu, t_sense_lock, と t_unlock_cpu.

00235 {
00236     bool_t  locked;
00237     ER      ercd;
00238 
00239     LOG_GET_IPM_ENTER(p_intpri);
00240     CHECK_TSKCTX();
00241 
00242     locked = t_sense_lock();
00243     if (!locked) {
00244         t_lock_cpu();
00245     }
00246     *p_intpri = t_get_ipm();
00247     ercd = E_OK;
00248     if (!locked) {
00249         t_unlock_cpu();
00250     }
00251 
00252   error_exit:
00253     LOG_GET_IPM_LEAVE(ercd, *p_intpri);
00254     return(ercd);
00255 }

void initialize_interrupt ( void   ) 

interrupt.c94 行で定義されています。

参照先 inhinib_table, interrupt_handler_initialization_block::inhno, interrupt_handler_initialization_block::int_entry, interrupt_request_initialization_block::intatr, intinib_table, interrupt_request_initialization_block::intno, interrupt_request_initialization_block::intpri, tnum_inhno, tnum_intno, x_config_int, と x_define_inh().

00095 {
00096     uint_t          i;
00097     const INHINIB   *p_inhinib;
00098     const INTINIB   *p_intinib;
00099 
00100     for (p_inhinib = inhinib_table, i = 0; i < tnum_inhno; p_inhinib++, i++) {
00101         x_define_inh(p_inhinib->inhno, p_inhinib->int_entry);
00102     }
00103     for (p_intinib = intinib_table, i = 0; i < tnum_intno; p_intinib++, i++) {
00104         x_config_int(p_intinib->intno, p_intinib->intatr, p_intinib->intpri);
00105     }
00106 }


Copyright © 2008 by Kijineko Inc.

ホームページ制作