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

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

initial

File size: 5.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: eventlog.c,v 1.7 2003/12/15 07:19:22 takayuki Exp $
51 */
52
53
54#include <s_services.h>
55
56#ifdef EVENTLOG_ENABLE
57
58#include "jsp_kernel.h"
59#include "task.h"
60#include "semaphore.h"
61#include "dataqueue.h"
62#include "eventflag.h"
63#include "mempfix.h"
64#include "mailbox.h"
65
66//#include <kernel_debug.h>
67
68extern SEMCB semcb_table[1];
69extern UINT tmax_semid;
70extern FLGCB flgcb_table[1];
71extern UINT tmax_flgid;
72extern DTQCB dtqcb_table[1];
73extern UINT tmax_dtqid;
74extern MBXCB mbxcb_table[1];
75extern UINT tmax_mbxid;
76extern MPFCB mpfcb_table[1];
77extern UINT tmax_mpfid;
78
79/*
80 * イベントログ出力用 タスク状æ…
81‹å–得関数
82 * (com_support.cはC++になるので、ここに置く)
83 */
84
85Inline BOOL is_inside_of(void * src, void * min, void * sup)
86{ return ((long)src >= (long)min) && ((long)src < (long)sup); }
87
88static void decode_waitstatus(TCB * tcb, unsigned int * objtype, int * objid)
89{
90 QUEUE * queue;
91
92 if((tcb->tstat & TS_WAIT_SLEEP) != 0)
93 {
94 *objtype = TTW_SLP;
95 }else
96 {
97 if((tcb->tstat & TS_WAIT_WOBJCB) != 0)
98 {
99 do {
100 queue = tcb->task_queue.next;
101 } while( queue != &tcb->task_queue && is_inside_of(queue, tcb_table, &tcb_table[TNUM_TSK]) );
102
103 if(queue == &tcb->task_queue)
104 *objtype = 0;
105
106 /* セマフォ */
107 else if(is_inside_of(queue, semcb_table, &semcb_table[tmax_semid-1]))
108 {
109 *objtype = TTW_SEM;
110 *objid = ((long)queue - (long)semcb_table) / sizeof(SEMCB) + 1;
111 }
112 /* イベントフラグ */
113 else if(is_inside_of(queue, flgcb_table, &flgcb_table[tmax_flgid-1]))
114 {
115 *objtype = TTW_FLG;
116 *objid = ((long)queue - (long)flgcb_table) / sizeof(FLGCB) + 1;
117 }
118 /* データキュー */
119 else if(is_inside_of(queue, dtqcb_table, &dtqcb_table[tmax_dtqid-1]))
120 {
121 if(((long)queue % sizeof(DTQCB)) == (long)(&((DTQCB *)0)->rwait_queue))
122 *objtype = TTW_RDTQ;
123 else
124 *objtype = TTW_SDTQ;
125 *objid = ((long)queue - (long)dtqcb_table) / sizeof(DTQCB) + 1;
126 }
127 /* メールボックス */
128 else if(is_inside_of(queue, mbxcb_table, &mbxcb_table[tmax_mbxid-1]))
129 {
130 *objtype = TTW_MBX;
131 *objid = ((long)queue - (long)mbxcb_table) / sizeof(MBXCB) + 1;
132 }
133 /* 固定長メモリプール */
134 else if(is_inside_of(queue, mpfcb_table, &mpfcb_table[tmax_mpfid-1]))
135 {
136 *objtype = TTW_MPL;
137 *objid = ((long)queue - (long)mpfcb_table) / sizeof(MPFCB) + 1;
138 }
139 }else
140 {
141 /* slp_tskではなく、オブジェクト待
142ちキューにつながれていないタイムアウト付きの待
143ち -> dly_tsk */
144 if(tcb->winfo->tmevtb != NULL)
145 *objtype = TTW_DLY;
146 }
147 }
148}
149
150void decode_taskstatus(TCB * tcb, int * tskid, unsigned int * tskstat, unsigned int * objtype, int * objid)
151{
152 int stat = tcb->tstat;
153
154 /* タスクID */
155 *tskid = TSKID(tcb);
156
157 /* タスク状æ…
158‹ */
159 *tskstat = TTS_DMT;
160 if((stat & TS_RUNNABLE) != 0)
161 {
162 *tskstat = TTS_RDY;
163 }else
164 {
165 if((stat & TS_WAITING) != 0)
166 {
167 /* 待
168ち情
169報のデコード */
170 decode_waitstatus((TCB *)tcb, objtype, objid);
171
172 if((stat & TS_SUSPENDED) != 0)
173 *tskstat = TTS_WAS;
174 else
175 *tskstat = TTS_WAI;
176 }else
177 {
178 if((stat & TS_SUSPENDED) != 0)
179 *tskstat = TTS_SUS;
180 }
181 }
182}
183
184#endif
185
Note: See TracBrowser for help on using the repository browser.