亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? taskarchlib.c

?? vxworks的源代碼
?? C
字號:
/* taskArchLib.c - MIPS specific task management routines for kernel *//* Copyright 1984-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * This file has been developed or significantly modified by the * MIPS Center of Excellence Dedicated Engineering Staff. * This notice is as per the MIPS Center of Excellence Master Partner * Agreement, do not remove this notice without checking first with * WR/Platforms MIPS Center of Excellence engineering management. *//*modification history--------------------02g,17oct01,mem  Fix argument placement for MIPS64 (SPR #71058)02f,16jul01,ros  add CofE comment02e,25apr01,mem  Force FR to be set in SR if _WRS_FP_REGISTER_SIZE==8		 (SPR #66821).02d,22dec00,tlc  Remove TLBHI reference.02c,18dec00,pes  Adapt to MIPS32/MIPS64 CPU architectures02b,10sep99,myz  added CW4000_16 support02a,19jan99,dra	 added CW4000, CW4011, VR4100, VR5000 and VR5400 support.01?,13jul96,cah  Added CPU=R4650 support01z,27jun96,kkk  undo 01y.01y,01may96,mem  task arguements are now of type _RType.01x,04feb94,cd   changed taskArchRegsShow to handle all MIPS processors01v,19oct93,cd   added R4000 support.01u,23aug92,jcf  cleanup.01t,09aug92,ajm  ansified01s,09jul92,ajm  changed at0 to at01r,04jul92,jcf  scalable/ANSI/cleanup effort.01q,30jun92,yao  removed alternative g* register names.01p,05jun92,ajm  5.0.5 merge, note mod history changes01o,26may92,rrr  the tree shuffle02n,28apr92,ajm  now use global taskSrDefault instead of macro01m,18mar92,yao  removed routine taskStackAllot(), macro MEM_ROUND_UP.01l,12mar92,yao  removed taskRegsShow().  added regIndex[].  changed copyright                 notice.01k,15jan92,jdi  doc tweak.01j,14jan92,jdi  documentation cleanup.01i,04oct91,rrr  passed through the ansification filter                  -changed VOID to void                  -changed copyright notice01h,26sep91,ajm   made t7 and t8, t8 and t9 in taskRegsShow01g,27may91,ajm   MIPS-ized.01f,28sep90,jcf   documentation.01e,02aug90,jcf   documentation.01d,10jul90,jcf   moved taskStackAllot () from taskLib.c.01c,26jun90,jcf   added taskRtnValueSet ().01b,23apr90,jcf   changed name and moved to src/68k.01a,18dec89,jcf   written by extracting from taskLib (2).*//*DESCRIPTIONThis library provides an interface to MIPS architecture-specifictask management routines.SEE ALSO: taskLib*//* LINTLIBRARY */#include "vxWorks.h"#include "stdio.h"#include "taskLib.h"#include "private/windLibP.h"#include "private/kernelLibP.h"#include "private/taskLibP.h"#include "regs.h"/* globals */REG_INDEX taskRegName[] =    {#if	  (_WRS_FP_REGISTER_SIZE == 4)    {"$0", ZEROREG, sizeof(_RType)},    {"t0", T0REG, sizeof(_RType)},    {"s0", S0REG, sizeof(_RType)},    {"t8", T8REG, sizeof(_RType)},    {"at", ATREG, sizeof(_RType)},    {"t1", T1REG, sizeof(_RType)},    {"s1", S1REG, sizeof(_RType)},    {"t9", T9REG, sizeof(_RType)},    {"v0", V0REG, sizeof(_RType)},    {"t2", T2REG, sizeof(_RType)},    {"s2", S2REG, sizeof(_RType)},    {"k0", K0REG, sizeof(_RType)},    {"v1", V1REG, sizeof(_RType)},    {"t3", T3REG, sizeof(_RType)},    {"s3", S3REG, sizeof(_RType)},    {"k1", K1REG, sizeof(_RType)},    {"a0", A0REG, sizeof(_RType)},    {"t4", T4REG, sizeof(_RType)},    {"s4", S4REG, sizeof(_RType)},    {"gp", GPREG, sizeof(_RType)},    {"a1", A1REG, sizeof(_RType)},    {"t5", T5REG, sizeof(_RType)},    {"s5", S5REG, sizeof(_RType)},    {"sp", SPREG, sizeof(_RType)},    {"a2", A2REG, sizeof(_RType)},    {"t6", T6REG, sizeof(_RType)},    {"s6", S6REG, sizeof(_RType)},    {"s8", S8REG, sizeof(_RType)},    {"a3", A3REG, sizeof(_RType)},    {"t7", T7REG, sizeof(_RType)},        {"s7", S7REG, sizeof(_RType)},    {"ra", RAREG, sizeof(_RType)},    {"divlo", LOREG, sizeof(_RType)},    {"divhi", HIREG, sizeof(_RType)},    {"sr", SR_OFFSET, sizeof(ULONG)},    {"pc", PC_OFFSET, sizeof(INSTR *)},#elif  (_WRS_FP_REGISTER_SIZE == 8)    {"$0", ZEROREG, sizeof(_RType)},    {"t0", T0REG, sizeof(_RType)},    {"s0", S0REG, sizeof(_RType)},    {"at", ATREG, sizeof(_RType)},    {"t1", T1REG, sizeof(_RType)},    {"s1", S1REG, sizeof(_RType)},    {"v0", V0REG, sizeof(_RType)},    {"t2", T2REG, sizeof(_RType)},    {"s2", S2REG, sizeof(_RType)},    {"v1", V1REG, sizeof(_RType)},    {"t3", T3REG, sizeof(_RType)},    {"s3", S3REG, sizeof(_RType)},    {"a0", A0REG, sizeof(_RType)},    {"t4", T4REG, sizeof(_RType)},    {"s4", S4REG, sizeof(_RType)},    {"a1", A1REG, sizeof(_RType)},    {"t5", T5REG, sizeof(_RType)},    {"s5", S5REG, sizeof(_RType)},    {"a2", A2REG, sizeof(_RType)},    {"t6", T6REG, sizeof(_RType)},    {"s6", S6REG, sizeof(_RType)},    {"a3", A3REG, sizeof(_RType)},    {"t7", T7REG, sizeof(_RType)},    {"s7", S7REG, sizeof(_RType)},    {"s8", S8REG, sizeof(_RType)},        {"k0", K0REG, sizeof(_RType)},    {"", 0, 0},    {"gp", GPREG, sizeof(_RType)},    {"k1", K1REG, sizeof(_RType)},    {"t8", T8REG, sizeof(_RType)},    {"ra", RAREG, sizeof(_RType)},    {"sp", SPREG, sizeof(_RType)},    {"t9", T9REG, sizeof(_RType)},    {"divlo", LOREG, sizeof(_RType)},    {"divhi", HIREG, sizeof(_RType)},    {"sr", SR_OFFSET, sizeof(ULONG)},    {"pc", PC_OFFSET, sizeof(INSTR *)},#endif    {NULL, 0},    };/**  Default status register has FPA coprocessor on, and all interrupt lines*  enabled.*/ #ifdef _WRS_R3K_EXC_SUPPORTULONG taskSrDefault	= (SR_CU0 | SR_CU1 | SR_IMASK0 | SR_IEC);#else	/* _WRS_R3K_EXC_SUPPORT *//* * Default status register has FPA coprocessor on, and all interrupt lines * enabled. * * The status register turns on the CP0 control instructions * (SR(CU0)==1). * * For MIPS64, the SR(FR) mode switch is set to expose all 32 * double-sized floating-point registers to software. We also * set SR(CU3)==1 to globally enable MIPS IV instructions in that case. * */#if (CPU==MIPS64)#define SR_ARCH			SR_CU3#define	SR_FLOAT_MODE		(SR_FR)#elif (CPU==MIPS32)#define SR_ARCH			(0)#define	SR_FLOAT_MODE		(0)#else#error "invalid CPU value"#endif#define SR_KERNEL_MODE		(SR_IMASK0 | SR_KSU_K | SR_IE)#define	SR_KERNEL_INT_MODE	(SR_ARCH | SR_CU1 | SR_CU0)ULONG taskSrDefault	= (SR_FLOAT_MODE | SR_KERNEL_INT_MODE | SR_KERNEL_MODE);#endif	/* _WRS_R3K_EXC_SUPPORT *//********************************************************************************* taskRegsInit - initialize a task's registers** During task initialization this routine is called to initialize the specified* task's registers to the default values.* * NOMANUAL* ARGSUSED*/void taskRegsInit    (    WIND_TCB	*pTcb,		/* pointer TCB to initialize */    char	*pStackBase 	/* bottom of task's stack */    )    {    FAST int ix;    IMPORT ULONG _gp;		/* compiler generated global pointer value */     pTcb->regs.sr = taskSrDefault;		/* set status register */    pTcb->regs.pc = (INSTR *)vxTaskEntry;	/* set entry point */    pTcb->regs.lo = 0;    pTcb->regs.hi = 0;    pTcb->regs.cause = 0;    pTcb->regs.fpcsr = 0;    for (ix = 0; ix < 32; ++ix)	pTcb->regs.gpreg[ix] = 0;		/* initialize general regs */    pTcb->regs.gpReg = (_RType) &_gp;	/* load current global pointer */    /* initial stack pointer is just after MAX_TASK_ARGS task arguments */    pTcb->regs.spReg = (_RType) ((int)(pStackBase				       - (MAX_TASK_ARGS * sizeof (_RType))));    }/********************************************************************************* taskArgsSet - set a task's arguments** During task initialization this routine is called to push the specified* arguments onto the task's stack.** NOMANUAL* ARGSUSED*/void taskArgsSet    (    WIND_TCB	*pTcb,			/* pointer TCB to initialize */    char	*pStackBase,		/* bottom of task's stack */    int		pArgs[] 		/* array of startup arguments */    )    {    FAST int ix;    FAST _RType *sp;    /* push args on the stack */    sp = (_RType *) pStackBase;		/* start at bottom of stack */#if	  (_WRS_INT_REGISTER_SIZE == 4)    for (ix = MAX_TASK_ARGS - 1; ix >= 0; --ix)	*--sp = pArgs[ix];		/* put arguments onto stack */#elif  (_WRS_INT_REGISTER_SIZE == 8)    /* Make sure the argument is sign-extended */    for (ix = MAX_TASK_ARGS - 1; ix >= 0; --ix)	*--sp = (long long) pArgs[ix];		/* put arguments onto stack */#endif	/* _WRS_INT_REGISTER_SIZE */    pTcb->regs.a0Reg = pArgs[0];	/* load register parameter 1 */    pTcb->regs.a1Reg = pArgs[1];	/* load register parameter 2 */    pTcb->regs.a2Reg = pArgs[2];	/* load register parameter 3 */    pTcb->regs.a3Reg = pArgs[3];	/* load register parameter 4 */    }/********************************************************************************* taskRtnValueSet - set a task's subroutine return value** This routine sets register v0, the return code, to the specified value.  It* may only be called for tasks other than the executing task.** NOMANUAL* ARGSUSED*/void taskRtnValueSet    (    WIND_TCB	*pTcb,		/* pointer TCB for return value */    int		returnValue 	/* return value to fill into WIND_TCB */    )    {    pTcb->regs.v0Reg = returnValue;    }/********************************************************************************* taskArgsGet - get a task's arguments** This routine is utilized during task restart to recover the original task* arguments.** NOMANUAL* ARGSUSED*/void taskArgsGet    (    WIND_TCB *pTcb,		/* pointer TCB to initialize */    char *pStackBase,		/* bottom of task's stack */    int  pArgs[] 		/* array of arguments to fill */    )    {    FAST int ix;    FAST _RType *sp;    /* push args on the stack */    sp = (_RType *) pStackBase;			/* start at bottom of stack */    for (ix = MAX_TASK_ARGS - 1; ix >= 0; --ix)	pArgs[ix] = (int) *--sp;		/* fill arguments from stack */    }/********************************************************************************* taskSRSet - set task status register** This routine sets the status register of a specified non-executing task* (i.e., the TCB must not be that of the calling task).  ** RETURNS: OK, or ERROR if the task ID is invalid.*/STATUS taskSRSet    (    int    tid,	 	/* task ID */    UINT32 sr 		/* new SR  */    )    {    FAST WIND_TCB *pTcb = taskTcb (tid);    if (pTcb == NULL)		/* task non-existent */	return (ERROR);    pTcb->regs.sr = sr;    return (OK);    }/********************************************************************************* taskSRInit - initialize the default task status register** This routine sets the default status register for system wide tasks.* This will be the value of the status register that all tasks are * spawned with therefore it must be called before kernelInit.** RETURNS: Previous value of default status register.*/ULONG taskSRInit    (    ULONG newValue 		/* new default task status register  */    )    {    ULONG oldValue;    oldValue = taskSrDefault;#if (_WRS_FP_REGISTER_SIZE == 8)    /* If CU1 is enabled, also enable extended FP regs */    if (newValue & SR_CU1)	newValue |= SR_FR;#endif	/* _WRS_FP_REGISTER_SIZE */    taskSrDefault = newValue;    return (oldValue);    }/******************************************************************************** taskArchRegsShow - display the contents of a task's registers** This routine displays the register contents of a specified task* on standard output.** NOTE* This function doesn't really belong here.** RETURNS: N/A** NOMANUAL*/voidtaskArchRegsShow    (     REG_SET	*pRegSet		/* register set */    )    {    int		ix;    int *	pReg;		/* points to register value */    /* print out registers */#if (_WRS_INT_REGISTER_SIZE == 8)    _RType	reg;	        /* CPU register value */    unsigned int hi;		/* high half of reg */    unsigned int lo;		/* low half of reg */    /* 64-bit registers */    for (ix = 0; taskRegName[ix].regName != NULL; ix++)	{	if ((ix % 3) == 0)	    printf ("\n");	else	    printf ("%3s","");	if (taskRegName[ix].regName[0] != EOS)	    {	    if (taskRegName[ix].regWidth == sizeof(_RType))		{		reg = *(_RType *)((int)pRegSet + taskRegName[ix].regOff);		hi = reg >> 32;		lo = reg;		if (hi)		    printf ("%-5s = %8x%08x", taskRegName[ix].regName, hi, lo);		else		    printf ("%-5s = %8s%8x", taskRegName[ix].regName, "", lo);		}	    else		{		pReg = (int *) ((int)pRegSet + taskRegName[ix].regOff);		printf ("%-5s = %8x%8s", taskRegName[ix].regName, *pReg, "");		}	    }	else	    printf ("%24s", "");	}    printf ("\n");#elif (_WRS_INT_REGISTER_SIZE == 4)    /* 32-bit registers */    for (ix = 0; taskRegName[ix].regName != NULL; ix++)	{	if ((ix % 4) == 0)	    printf ("\n");	else	    printf ("%3s","");	if (taskRegName[ix].regName[0] != EOS)	    {	    pReg = (int *) ((int)pRegSet + taskRegName[ix].regOff);            printf ("%-5s = %8x", taskRegName[ix].regName, *pReg);	    }	else	    printf ("%16s", "");	}#else	/* _WRS_INT_REGISTER_SIZE */#error "invalid _WRS_INT_REGISTER_SIZE value"#endif	/* _WRS_INT_REGISTER_SIZE */    printf ("\n");    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频观看| 亚洲视频资源在线| 欧美美女直播网站| 欧美日韩亚洲国产综合| 欧美在线free| 欧美日韩在线一区二区| 欧美在线一二三四区| 在线观看国产91| 91极品美女在线| 欧美日韩一区视频| 7777精品伊人久久久大香线蕉最新版 | 国产精品亲子伦对白| 国产亚洲精品aa| 国产精品无码永久免费888| 国产精品美女久久久久av爽李琼 | 亚洲男女毛片无遮挡| 国产精品麻豆欧美日韩ww| 中文字幕亚洲区| 亚洲国产美女搞黄色| 午夜精品久久久久久久99樱桃| 亚洲bdsm女犯bdsm网站| 久久9热精品视频| 国产高清成人在线| 在线观看国产91| 久久看人人爽人人| 一区二区三区四区高清精品免费观看 | 国内精品自线一区二区三区视频| 亚洲成人777| 国产在线精品一区二区不卡了| 国产精品亚洲人在线观看| 99精品欧美一区二区蜜桃免费 | 亚洲精品一区二区三区蜜桃下载 | 色婷婷狠狠综合| 国产一区二区在线影院| 色偷偷88欧美精品久久久| 欧美性一区二区| 日韩一区二区三区精品视频| 日韩你懂的在线播放| 国产精品乱子久久久久| 一区二区三区91| 青青草原综合久久大伊人精品 | 日韩欧美国产电影| 久久精品夜色噜噜亚洲a∨| 2020国产精品自拍| 亚洲一级电影视频| 国产精品自拍一区| 91精品1区2区| 久久久综合网站| 亚洲福利一区二区| 国产激情视频一区二区三区欧美 | 国产·精品毛片| 欧美午夜电影网| 久久理论电影网| 一区二区三区国产豹纹内裤在线| 日本亚洲免费观看| 91免费视频观看| 精品国产91洋老外米糕| 一区二区三区 在线观看视频| 精品影视av免费| 欧美影视一区在线| 欧美精品一区二区三区很污很色的| 中文字幕在线观看不卡| 人人狠狠综合久久亚洲| 99国产精品国产精品久久| 欧美v日韩v国产v| 亚洲国产日韩a在线播放性色| 国产a视频精品免费观看| 欧美一卡2卡三卡4卡5免费| 亚洲欧美乱综合| 福利91精品一区二区三区| 欧美高清www午色夜在线视频| 亚洲一区成人在线| 91小视频免费看| 国产精品高潮久久久久无| 麻豆成人久久精品二区三区红 | 樱花影视一区二区| 国产福利一区在线观看| 日韩三级伦理片妻子的秘密按摩| 一区二区三区四区蜜桃| 91日韩在线专区| 亚洲视频一区二区在线| 成人精品一区二区三区四区 | 日韩欧美二区三区| 天天操天天色综合| 日韩一区二区三区三四区视频在线观看| 中文字幕日本不卡| 成人av网在线| 国产精品毛片a∨一区二区三区| 国产成人亚洲综合a∨婷婷| 精品国产露脸精彩对白 | 色婷婷亚洲精品| 国产夜色精品一区二区av| 粉嫩一区二区三区在线看| 国产精品入口麻豆九色| 国产成人精品免费网站| 中文字幕在线不卡| 色综合网站在线| 亚洲一区二区三区视频在线| 欧美日韩一区视频| 美女久久久精品| 久久久三级国产网站| 国产成人综合精品三级| 国产精品久久久久久妇女6080| 成人18视频日本| 一区二区三区不卡视频| 色婷婷综合久久久| 天堂影院一区二区| 亚洲精品在线观| www.欧美.com| 亚洲v精品v日韩v欧美v专区| 欧美日韩日日夜夜| 久久99精品网久久| 国产精品无遮挡| 欧美日韩不卡一区二区| 免费在线一区观看| 国产精品久久国产精麻豆99网站| 成人精品国产一区二区4080| 亚洲视频网在线直播| 7777女厕盗摄久久久| 国产成人精品免费一区二区| 伊人性伊人情综合网| 日韩欧美一级二级三级久久久| 国产精品一区二区在线观看网站| 亚洲欧美一区二区视频| 91麻豆精品国产91久久久久 | 成人黄色小视频| 亚洲电影一级黄| 国产午夜精品一区二区三区嫩草| aaa亚洲精品| 国内外精品视频| 亚洲一区二区精品久久av| 久久精品在这里| 欧美日韩综合一区| 国产精品538一区二区在线| 亚洲国产裸拍裸体视频在线观看乱了| 91亚洲国产成人精品一区二区三| 蜜臀91精品一区二区三区| 国产精品灌醉下药二区| 欧美一区二区三区白人| 99国产精品一区| 韩国av一区二区三区四区| 亚洲综合一区二区三区| 国产农村妇女毛片精品久久麻豆| 欧美另类videos死尸| 成人app网站| 久久99精品国产.久久久久久| 亚洲黄色录像片| 国产精品美女久久久久久2018| 日韩欧美电影在线| 欧美欧美午夜aⅴ在线观看| 99精品偷自拍| 国产一区二区电影| 国产成人亚洲综合色影视| av在线综合网| 国产综合色在线视频区| 天天射综合影视| 亚洲一区电影777| 亚洲黄色av一区| 亚洲乱码国产乱码精品精98午夜 | 久草中文综合在线| 日韩av中文字幕一区二区三区| 中文字幕视频一区| 亚洲天堂精品在线观看| 中文字幕日本不卡| 中文字幕高清不卡| 国产欧美日韩在线看| 久久综合久久综合久久综合| 91精品国产aⅴ一区二区| 欧美午夜免费电影| 欧美亚洲日本一区| 欧美日韩欧美一区二区| 3d动漫精品啪啪1区2区免费| 在线观看91av| 2020国产精品自拍| 久久色成人在线| 久久综合色婷婷| 中文字幕欧美激情| 国产精品女主播av| 中文字幕在线播放不卡一区| 亚洲三级久久久| 亚洲制服欧美中文字幕中文字幕| 亚洲欧洲美洲综合色网| 久久久久久久国产精品影院| 中文字幕中文字幕在线一区 | 欧美亚洲禁片免费| 制服丝袜成人动漫| 精品处破学生在线二十三| 久久久九九九九| 国产精品国产三级国产aⅴ无密码| 国产精品国产三级国产普通话三级 | 国产性色一区二区| 国产精品国产a| 视频一区二区三区在线| 国产在线国偷精品产拍免费yy| 国产一区二区久久| 一本久久a久久精品亚洲| 欧美一区二区大片| 中文字幕中文字幕中文字幕亚洲无线| 亚洲高清在线视频| 国产一区不卡在线|