source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/windows/hw_timer.c@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 4.6 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: hw_timer.c,v 1.5 2003/12/15 07:19:22 takayuki Exp $
51 */
52
53/*
54 * ターゲット依存タイマモジュール(Windows用)
55 */
56
57#ifndef _HW_TIMER_C_
58#define _HW_TIMER_C_
59
60#include <s_services.h>
61#include <hw_timer.h>
62#include <hal_msg.h>
63
64extern HANDLE PrimaryThreadHandle;
65
66/*
67 * Windowsの標準タイマ
68 */
69#if defined(TIMER_WINDOWSTIMER)
70
71 /* タイマの起動処理 */
72void hw_timer_initialize()
73{
74 kprintf(("hw_timer_initialize()\n"));
75 SetTimer((HWND)PrimaryThreadHandle,RTC_EVENT,TIMER_CLOCK_WINDOWS,NULL);
76}
77
78 /* タイマの停止処理 */
79void hw_timer_terminate()
80{
81 kprintf(("hw_timer_terminate()\n"));
82 KillTimer((HWND)PrimaryThreadHandle,RTC_EVENT);
83}
84
85
86/*
87 * マルチメディアタイマ
88 */
89#elif defined(TIMER_MULTIMEDIATIMER)
90
91#include <mmsystem.h>
92
93static DWORD TimerID = 0;
94
95static void CALLBACK MultiMediaTimerCallbackFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
96{ HALInterruptRequest(INHNO_TIMER); }
97
98 /* タイマの起動処理 */
99void hw_timer_initialize()
100{
101 MMRESULT result;
102 TIMECAPS devcap;
103
104 kprintf(("hw_timer_initialize()\n"));
105
106 result = timeGetDevCaps(&devcap, sizeof(TIMECAPS));
107 FatalAssertion(result == TIMERR_NOERROR && TIMER_CLOCK_WINDOWS >= devcap.wPeriodMin && TIMER_CLOCK_WINDOWS <= devcap.wPeriodMax, "指定されたクロックティックはマルチメディアタイマで設定可能な範囲を超
108えています。");
109
110 timeBeginPeriod(TIMER_CLOCK_WINDOWS); //timeBeginPeriod(devcap.wPeriodMin); と実行すると、負荷と引き換えに精度が上がる
111
112 TimerID = timeSetEvent(TIMER_CLOCK_WINDOWS, TIMER_CLOCK_WINDOWS, MultiMediaTimerCallbackFunction, 0, TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
113 FatalAssertion(TimerID != 0, "hw_tiemr_initialize failed to perform 'timeSetEvent' function.");
114}
115
116 /* タイマの停止処理 */
117void hw_timer_terminate()
118{
119 kprintf(("hw_timer_terminate()\n"));
120
121 if(TimerID != 0)
122 {
123 timeKillEvent(TimerID);
124 timeEndPeriod(TIMER_CLOCK_WINDOWS);
125 }
126}
127
128#elif defined(TIMER_NOTHING)
129
130void hw_timer_initialize() {}
131void hw_timer_terminate() {}
132
133#else
134
135#error "使用するタイマの種別が選択されていません"
136
137#endif
138
139
140
141#endif /* _HW_TIMER_H_ */
142
Note: See TracBrowser for help on using the repository browser.