📄 eventlog.c
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: eventlog.c,v 1.7 2003/12/15 07:19:22 takayuki Exp $ */#include <s_services.h>#ifdef EVENTLOG_ENABLE#include "jsp_kernel.h"#include "task.h"#include "semaphore.h"#include "dataqueue.h"#include "eventflag.h"#include "mempfix.h"#include "mailbox.h"//#include <kernel_debug.h>extern SEMCB semcb_table[1];extern UINT tmax_semid;extern FLGCB flgcb_table[1];extern UINT tmax_flgid;extern DTQCB dtqcb_table[1];extern UINT tmax_dtqid;extern MBXCB mbxcb_table[1];extern UINT tmax_mbxid;extern MPFCB mpfcb_table[1];extern UINT tmax_mpfid;/* * イベントログ叫蜗脱 タスク觉轮艰评簇眶 * (com_support.cはC++になるので、ここに弥く) */Inline BOOL is_inside_of(void * src, void * min, void * sup){ return ((long)src >= (long)min) && ((long)src < (long)sup); }static void decode_waitstatus(TCB * tcb, unsigned int * objtype, int * objid){ QUEUE * queue; if((tcb->tstat & TS_WAIT_SLEEP) != 0) { *objtype = TTW_SLP; }else { if((tcb->tstat & TS_WAIT_WOBJCB) != 0) { do { queue = tcb->task_queue.next; } while( queue != &tcb->task_queue && is_inside_of(queue, tcb_table, &tcb_table[TNUM_TSK]) ); if(queue == &tcb->task_queue) *objtype = 0; /* セマフォ */ else if(is_inside_of(queue, semcb_table, &semcb_table[tmax_semid-1])) { *objtype = TTW_SEM; *objid = ((long)queue - (long)semcb_table) / sizeof(SEMCB) + 1; } /* イベントフラグ */ else if(is_inside_of(queue, flgcb_table, &flgcb_table[tmax_flgid-1])) { *objtype = TTW_FLG; *objid = ((long)queue - (long)flgcb_table) / sizeof(FLGCB) + 1; } /* デ〖タキュ〖 */ else if(is_inside_of(queue, dtqcb_table, &dtqcb_table[tmax_dtqid-1])) { if(((long)queue % sizeof(DTQCB)) == (long)(&((DTQCB *)0)->rwait_queue)) *objtype = TTW_RDTQ; else *objtype = TTW_SDTQ; *objid = ((long)queue - (long)dtqcb_table) / sizeof(DTQCB) + 1; } /* メ〖ルボックス */ else if(is_inside_of(queue, mbxcb_table, &mbxcb_table[tmax_mbxid-1])) { *objtype = TTW_MBX; *objid = ((long)queue - (long)mbxcb_table) / sizeof(MBXCB) + 1; } /* 盖年墓メモリプ〖ル */ else if(is_inside_of(queue, mpfcb_table, &mpfcb_table[tmax_mpfid-1])) { *objtype = TTW_MPL; *objid = ((long)queue - (long)mpfcb_table) / sizeof(MPFCB) + 1; } }else { /* slp_tskではなく、オブジェクト略ちキュ〖につながれていないタイムアウト烧きの略ち -> dly_tsk */ if(tcb->winfo->tmevtb != NULL) *objtype = TTW_DLY; } }}void decode_taskstatus(TCB * tcb, int * tskid, unsigned int * tskstat, unsigned int * objtype, int * objid){ int stat = tcb->tstat; /* タスクID */ *tskid = TSKID(tcb); /* タスク觉轮 */ *tskstat = TTS_DMT; if((stat & TS_RUNNABLE) != 0) { *tskstat = TTS_RDY; }else { if((stat & TS_WAITING) != 0) { /* 略ち攫鼠のデコ〖ド */ decode_waitstatus((TCB *)tcb, objtype, objid); if((stat & TS_SUSPENDED) != 0) *tskstat = TTS_WAS; else *tskstat = TTS_WAI; }else { if((stat & TS_SUSPENDED) != 0) *tskstat = TTS_SUS; } }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -