OSDN Git Service

7ad8a30c5d35188efde21a270eb8a723b71febd1
[hos/hos-v4a.git] / aplfw / system / sysapi / syshos_hook.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  system.h
5  * @brief %jp{システム用API定義}
6  *
7  * Copyright (C) 2006 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include "sysapi_local.h"
13
14
15
16 SYSTIM_CPUTIME          SysHos_OldTime;
17 ID                                      SysHos_TaskId;
18
19
20 /** 割込み計測タイマを初期化 */
21 void SysInt_SetIntTime(int iIntNum, SYSTIM_CPUTIME Time)
22 {
23         if ( iIntNum < _kernel_min_intno || iIntNum > _kernel_max_intno )
24         {
25                 return;
26         }
27
28         SysInt_InfTbl[iIntNum - _kernel_min_intno].ExecTime = Time;
29 }
30
31
32 /** 割込み計測タイマを取得 */
33 SYSTIM_CPUTIME SysInt_GetIntTime(int iIntNum)
34 {
35         if ( iIntNum < _kernel_min_intno || iIntNum > _kernel_max_intno )
36         {
37                 return 0;
38         }
39         
40         return SysInt_InfTbl[iIntNum - _kernel_min_intno].ExecTime;
41 }
42
43
44 /** プロセス実行時間計測タイマを初期化 */
45 void SysPrc_SetExecTime(SYSPRC_HANDLE hPrc, SYSTIM_CPUTIME Time)
46 {       
47         SysPrc_InfTbl[(ID)hPrc].ExecTime = Time;
48 }
49
50
51 /** プロセス実行時間計測タイマを取得 */
52 SYSTIM_CPUTIME SysPrc_GetExecTime(SYSPRC_HANDLE hPrc)
53 {
54         return SysPrc_InfTbl[(ID)hPrc].ExecTime;
55 }
56
57
58 /** %jp{タスクスイッチのフック} */
59 void _kernel_tsk_swi(ID tskid_old, ID tskid_new)
60 {
61         SYSTIM_CPUTIME NewTime;
62         SYSTIM_CPUTIME PastTime;
63         
64         /* 現在時刻を取得 */
65         NewTime  = SysTim_GetCpuTime();
66         PastTime = NewTime - SysHos_OldTime;
67         
68         /* 実行時間を累算 */
69         SysPrc_InfTbl[tskid_old].ExecTime += PastTime;
70         
71         /* 次回計測を設定 */
72         SysHos_OldTime = NewTime;
73         SysHos_TaskId  = tskid_new;
74 }
75
76
77 /** %jp{割込みサービスルーチン開始のフック} */
78 void _kernel_isr_sta(INHNO inhno)
79 {
80         SYSTIM_CPUTIME NewTime;
81         SYSTIM_CPUTIME PastTime;
82         
83         /* 現在時刻を取得 */
84         NewTime  = SysTim_GetCpuTime();
85         PastTime = NewTime - SysHos_OldTime;
86         
87         /* 実行時間を累算 */
88         SysPrc_InfTbl[SysHos_TaskId].ExecTime += PastTime;
89         
90         /* 次回計測を設定 */
91         SysHos_OldTime = NewTime;       
92 }
93
94
95 /**< %jp{割込みサービスルーチン終了のフック} */
96 void _kernel_isr_end(INTNO intno)
97 {
98         SYSTIM_CPUTIME NewTime;
99         SYSTIM_CPUTIME PastTime;
100         
101         /* 現在時刻を取得 */
102         NewTime  = SysTim_GetCpuTime();
103         PastTime = NewTime - SysHos_OldTime;
104         
105         /* 実行時間を累算 */
106         SysInt_InfTbl[intno - _kernel_min_intno].ExecTime += PastTime;
107 }
108
109
110 /* end of file */