|
|
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 によって生成されました。 |