time_manage.c

説明を見る。
00001 /*
00002  *  TOPPERS/FDMP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Function Distributed Multiprocessor Kernel
00005  * 
00006  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  *  Copyright (C) 2005-2006 by Embedded and Real-Time Systems Laboratory
00009  *              Graduate School of Information Science, Nagoya Univ., JAPAN  
00010  * 
00011  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00012  *  によって公表されている GNU General Public License の Version 2 に記
00013  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00014  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00015  *  利用と呼ぶ)することを無償で許諾する.
00016  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00017  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00018  *      スコード中に含まれていること.
00019  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00020  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00021  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00022  *      の無保証規定を掲載すること.
00023  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00024  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00025  *      と.
00026  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00027  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00028  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00029  *        報告すること.
00030  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00031  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00032  * 
00033  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00034  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00035  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00036  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00037  * 
00038  *  @(#) $Id: time_manage.c,v 1.3 2006/03/14 04:37:54 honda Exp $
00039  */
00040 
00045 #include "fdmp_kernel.h"
00046 #include "check.h"
00047 #include "time_event.h"
00048 
00052 #ifdef __set_tim
00053 
00054 SYSCALL ER
00055 set_tim(const SYSTIM *p_systim)
00056 {
00057     ER  ercd;
00058 
00059     LOG_SET_TIM_ENTER(p_systim);
00060     CHECK_TSKCTX_UNL();
00061 
00062     t_lock_cpu();
00063     systim_offset = *p_systim - current_time;
00064     ercd = E_OK;
00065     t_unlock_cpu();
00066 
00067     exit:
00068     LOG_SET_TIM_LEAVE(ercd);
00069     return(ercd);
00070 }
00071 
00072 #endif /* __set_tim */
00073 
00077 #ifdef __get_tim
00078 
00079 SYSCALL ER
00080 get_tim(SYSTIM *p_systim)
00081 {
00082     ER  ercd;
00083 
00084     LOG_GET_TIM_ENTER(p_systim);
00085     CHECK_TSKCTX_UNL();
00086 
00087     t_lock_cpu();
00088     *p_systim = systim_offset + current_time;
00089     ercd = E_OK;
00090     t_unlock_cpu();
00091 
00092     exit:
00093     LOG_GET_TIM_LEAVE(ercd, *p_systim);
00094     return(ercd);
00095 }
00096 
00097 #endif /* __get_tim */
00098 
00099 /*
00100  *  性能評価用システム時刻の参照
00101  */
00102 #ifdef __vxget_tim
00103 #ifdef SUPPORT_VXGET_TIM
00104 #include "hw_timer.h"
00105 
00106 SYSCALL ER
00107 vxget_tim(SYSUTIM *p_sysutim)
00108 {
00109     SYSUTIM utime;
00110     SYSTIM  time;
00111 #if TIC_DENO != 1
00112     INT subtime;
00113 #endif /* TIC_DENO != 1 */
00114     CLOCK   clock;
00115     BOOL    ireq;
00116     BOOL    locked;
00117     ER  ercd;
00118 
00119     LOG_VXGET_TIM_ENTER(p_sysutim);
00120     CHECK_TSKCTX();
00121 
00122     locked = sense_lock();
00123     if (!(locked)) {
00124         t_lock_cpu();
00125     }
00126     time = systim_offset + next_time;
00127 #if TIC_DENO != 1
00128     subtime = (INT) next_subtime;
00129 #endif /* TIC_DENO != 1 */
00130     clock = hw_timer_get_current();
00131     ireq = hw_timer_fetch_interrupt();
00132     if (!(locked)) {
00133         t_unlock_cpu();
00134     }
00135 
00136     utime = ((SYSUTIM) time) * 1000;
00137 #if TIC_DENO != 1
00138     utime += subtime * 1000 / TIC_DENO;
00139 #endif /* TIC_DENO != 1 */
00140     if (!(ireq && !(BEFORE_IREQ(clock)))) {
00141         utime -= TIC_NUME * 1000 / TIC_DENO;
00142     }
00143     utime += TO_USEC(clock);
00144     *p_sysutim = utime;
00145     ercd = E_OK;
00146 
00147     exit:
00148     LOG_VXGET_TIM_LEAVE(ercd, *p_sysutim);
00149     return(ercd);
00150 }
00151 
00152 #endif /* SUPPORT_VXGET_TIM */
00153 #endif /* __vxget_tim */

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。