⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ghs_hook.c

📁 uItron 4.0 Toppers实现源码1.4版
💻 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 *                2003      by Advanced Data Controls, Corp *  *  惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation  *  によって给山されている GNU General Public License の Version 2 に淡 *  揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア *  を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 *      脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 *      荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 *      の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 *      脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ *      とˉ *    (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 *        侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに *        鼠桂することˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お *  よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も *  崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 *  儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *  *  @(#) $Id: ghs_hook.c,v 1.2 2003/12/19 11:48:37 honda Exp $ */#ifdef GHS_HOOK#include "jsp_kernel.h"#include "kernel.h"#include "time_event.h"#include "task.h"#include "ghs_hook.h"#define	THG_ALL	THG_SYS|THG_RET|THG_DSP|THG_STS|THG_INT#define	THF_ALL	THF_TSK|THF_TSKS|THF_TEX|THF_SEM|THF_FLG|THF_DTQ|THF_MBX|THF_MPF|THF_TIM#ifndef GRP#define	GRP	THG_ALL#endif#ifndef SEV#define	SEV	THF_ALL  #endif#ifndef TSK#define	TSK	TRACE_TNUM_TSKID#endif#define MAX_TSK  256T_ROS Ros_buf;struct GHS_TASKS {	B	sts;				B	pri;			} ghs_tasks[MAX_TSK];ghs_tasks_initialize(){	INT	i;	TCB	*tcb;	for (tcb = tcb_table, i = 0; i < tmax_tskid; tcb++, i++) {		if(i > sizeof(ghs_tasks) / sizeof(ghs_tasks[0]))			return;		if(TSTAT_RUNNABLE(tcb->tstat)) ghs_tasks[i].sts = TTS_RDY;		else ghs_tasks[i].sts = TTS_DMT;		ghs_tasks[i].pri = EXT_TSKPRI(tcb->priority);	}}int SetEndian(){    union testme {        char    a[2];        short   b;    	} testme;    testme.b    = 0;    testme.a[0] = 1;    if (testme.b== 1)        return(0);    else        return(1);}void vinit_hook(void){    int i;    Ros_buf.trace.bigendian = SetEndian();    Ros_buf.trace.dummy = 0;    Ros_buf.trace.size = BUFF_SIZE-1;    Ros_buf.trace.putp = 0;    Ros_buf.trace.getp = 0;    for(i = 0; i < TRACE_TNUM_TSKID-1; i++)        Ros_buf.hook.task_id[i] = 0;    for(i = 0; i < TRACE_TNUM_EVT-1; i++)        Ros_buf.hook.evtcode[i] = 0;    Ros_buf.hook.max_tid = tmax_tskid;    Ros_buf.hook.tnum_tskid = TRACE_TNUM_TSKID;    Ros_buf.hook.tnum_evt = TRACE_TNUM_EVT;    Ros_buf.hook.trc_grp = GRP;    Ros_buf.hook.sys_grp = SEV;    for(i = 0; i < TSK; i++)        Ros_buf.hook.task_id[i] = 1;        }void ghs_hook4(int sts, int p1, int p2){    int putp;        while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 4)        {	    Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;        }        putp = Ros_buf.trace.putp;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 4;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;        Ros_buf.trace.putp = putp;}void ghs_hook5(int sts, int p1, int p2, int p3){    int putp;        while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 5)        {   Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;        }	putp = Ros_buf.trace.putp;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 5;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;        Ros_buf.trace.putp = putp;}void ghs_hook6(int sts, int p1, int p2, int p3, int p4){    int putp;        while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 6)        {   Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;        }        putp = Ros_buf.trace.putp;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 6;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;        Ros_buf.trace.putp = putp;}void ghs_hook7(int sts, int p1, int p2, int p3, int p4, int p5){    int putp;        while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 7)        {   Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;        }        putp = Ros_buf.trace.putp;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 7;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p5;        Ros_buf.trace.putp = putp;}void ghs_hook8(int sts, int p1, int p2, int p3, int p4, int p5, int p6){    int putp;        while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 8)        {   Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;        }        putp = Ros_buf.trace.putp;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 8;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p5;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p6;        Ros_buf.trace.putp = putp;}void ghs_hook9(int sts, int p1, int p2, int p3, int p4, int p5, int p6, int p7){    int putp;        while(BUFF_SIZE-(Ros_buf.trace.putp-Ros_buf.trace.getp) < 9)        {   Ros_buf.trace.getp += Ros_buf.syscall[Ros_buf.trace.getp & Ros_buf.trace.size] & 0x0F;        }        putp = Ros_buf.trace.putp;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = (sts << 4) | 9;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = current_time;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p1;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p2;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p3;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p4;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p5;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p6;        Ros_buf.syscall[putp++ & Ros_buf.trace.size] = p7;        Ros_buf.trace.putp = putp;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -