#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)])) |
#define LOG_ALM_ENTER | ( | p_almcb | ) |
#define LOG_ALM_LEAVE | ( | p_almcb | ) |
#define LOG_ISTA_ALM_ENTER | ( | almid, | |||
almtim | ) |
#define LOG_ISTA_ALM_LEAVE | ( | ercd | ) |
#define LOG_ISTP_ALM_ENTER | ( | almid | ) |
#define LOG_ISTP_ALM_LEAVE | ( | ercd | ) |
#define tnum_alm ((uint_t)(tmax_almid - TMIN_ALMID + 1)) |
void call_almhdr | ( | ALMCB * | p_almcb | ) |
参照先 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 | ) |
参照先 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 }
参照先 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 }
参照先 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 }
参照先 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 }
参照先 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 }
参照先 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.