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

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

?? intarchlib.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
* certain operating system functions that may block or perform I/O* operations.** This routine generally simply calls intHandlerCreate() and* intVecSet().  The address of the handler returned by intHandlerCreate()* is what actually goes in the interrupt vector.** This routine takes an interrupt vector as a parameter, which is the byte* offset into the vector table. Macros are provided to convert between interrupt* vectors and interrupt numbers, see `intArchLib'.** NOTE ARM:* ARM processors generally do not have on-chip interrupt controllers.* Control of interrupts is a BSP-specific matter. This routine calls a* BSP-specific routine to install the handler such that, when the* interrupt occurs, <routine> is called with <parameter>.** NOTE X86:* Refer to the special x86 routine intHandlerCreateI86().* * NOTE SH:* The on-chip interrupt controller (INTC) design of SH architecture depends* on the processor type, but there are some similarities.  The number of* external interrupt inputs are limited, so it may necessary to multiplex* some interrupt requests.  However most of them are auto-vectored, thus have* only one vector to an external interrupt input.  As a framework to handle* this type of multiplexed interrupt, you can use your original intConnect* code by hooking it to _func_intConnectHook pointer.  If _func_intConnectHook* is set, the SH version of intConnect() simply calls the hooked routine with* same arguments, then returns the status of hooked routine.  A sysLib sample* is shown below:** .CS* #include "intLib.h"* #include "iv.h"		/@ INUM_INTR_HIGH for SH7750/SH7700 @/** #define SYS_INT_TBL_SIZE	(255 - INUM_INTR_HIGH)** typedef struct*     {*     VOIDFUNCPTR routine;	/@ routine to be called @/*     int         parameter;	/@ parameter to be passed @/*     } SYS_INT_TBL;** LOCAL SYS_INT_TBL sysIntTbl [SYS_INT_TBL_SIZE]; /@ local vector table @/** LOCAL int sysInumVirtBase = INUM_INTR_HIGH + 1;** STATUS sysIntConnect*     (*     VOIDFUNCPTR *vec,		/@ interrupt vector to attach to     @/*     VOIDFUNCPTR routine,	/@ routine to be called              @/*     int         param		/@ parameter to be passed to routine @/*     )*     {*     FUNCPTR intDrvRtn;*  *     if (vec >= INUM_TO_IVEC (0) && vec < INUM_TO_IVEC (sysInumVirtBase))*         {*         /@ do regular intConnect() process @/**         intDrvRtn = intHandlerCreate ((FUNCPTR)routine, param);*  *         if (intDrvRtn == NULL)*             return ERROR;*  *         /@ make vector point to synthesized code @/*  *         intVecSet ((FUNCPTR *)vec, (FUNCPTR)intDrvRtn);*         }*     else*         {*         int index = IVEC_TO_INUM (vec) - sysInumVirtBase;*  *         if (index < 0 || index >= SYS_INT_TBL_SIZE)*             return ERROR;*  *         sysIntTbl [index].routine   = routine;*         sysIntTbl [index].parameter = param;*         }*  *     return OK;*     }** void sysHwInit (void)*     {*     ...*     _func_intConnectHook = (FUNCPTR)sysIntConnect;*     }** LOCAL void sysVmeIntr (void)*     {*     volatile UINT32 vec = *VME_VEC_REGISTER;	/@ get VME interrupt vector @/*     int i = vec - sysInumVirtBase;*  *     if (i >= 0 && i < SYS_INT_TBL_SIZE && sysIntTbl[i].routine != NULL)*         (*sysIntTbl[i].routine)(sysIntTbl[i].parameter);*     else*         logMsg ("uninitialized VME interrupt: vec = %d\n", vec,0,0,0,0,0);*     }** void sysHwInit2 (void)*     {*     int i;*     ...*     /@ initialize VME interrupts dispatch table @/**     for (i = 0; i < SYS_INT_TBL_SIZE; i++)*         {*         sysIntTbl[i].routine   = (VOIDFUNCPTR)NULL;*         sysIntTbl[i].parameter = NULL;*         }**     /@ connect generic VME interrupts handler @/**     intConnect (INT_VEC_VME, sysVmeIntr, NULL);*     ...*     }* .CE** The used vector numbers of SH processors are limited to certain ranges,* depending on the processor type. The `sysInumVirtBase' should be initialized* to a value higher than the last used vector number, defined as INUM_INTR_HIGH.* It is typically safe to set `sysInumVirtBase' to (INUM_INTR_HIGH + 1).** The sysIntConnect() routine simply acts as the regular intConnect() if * <vector> is smaller than INUM_TO_IVEC (sysInumVirtBase), so sysHwInit2() * connects a common VME interrupt dispatcher `sysVmeIntr' to the multiplexed* interrupt vector. If <vector> is equal to or greater than INUM_TO_IVEC * (sysInumVirtBase), the sysIntConnect() fills a local vector entry in * sysIntTbl[] with an individual VME interrupt handler, in a coordinated * manner with `sysVmeIntr'.** RETURNS: OK, or ERROR if the interrupt handler cannot be built.** SEE ALSO: intHandlerCreate(), intVecSet()*/STATUS intConnect    (    VOIDFUNCPTR *  vector,      /* interrupt vector to attach to     */    VOIDFUNCPTR    routine,     /* routine to be called              */    int            parameter    /* parameter to be passed to routine */    )    {    ...    }/********************************************************************************* intHandlerCreate - construct an interrupt handler for a C routine (MC680x0, x86, MIPS, SimSolaris)** This routine builds an interrupt handler around the specified C routine.* This interrupt handler is then suitable for connecting to a specific* vector address with intVecSet().  The interrupt handler is invoked in* supervisor mode at interrupt level.  A proper C environment is* established, the necessary registers saved, and the stack set up.** The routine can be any normal C code, except that it must not invoke* certain operating system functions that may block or perform I/O* operations.** RETURNS: A pointer to the new interrupt handler, or NULL if memory * is insufficient.* */FUNCPTR intHandlerCreate    (    FUNCPTR  routine,     /* routine to be called              */    int      parameter    /* parameter to be passed to routine */    )    {    ...    }/********************************************************************************* intLockLevelSet - set the current interrupt lock-out level (MC680x0, x86, ARM, SH, SimSolaris, SimNT)* * This routine sets the current interrupt lock-out level and stores it* in the globally accessible variable `intLockMask'.  The specified* interrupt level is masked when interrupts are locked by* intLock().  The default lock-out level (MC680x0 = 7,* x86 = 1, SH = 15) is initially set by kernelInit() when* VxWorks is initialized.** NOTE SIMSOLARIS, SIMNT:* This routine does nothing.** NOTE ARM:* On the ARM, this call establishes the interrupt level to be set when* intLock() is called.** RETURNS: N/A* * SEE ALSO: intLockLevelGet(), intLock(), taskLock()*/void intLockLevelSet    (    int  newLevel        /* new interrupt level */    )    {    ...    }/********************************************************************************* intLockLevelGet - get the current interrupt lock-out level (MC680x0, x86, ARM, SH, SimSolaris, SimNT)* * This routine returns the current interrupt lock-out level, which is* set by intLockLevelSet() and stored in the globally accessible* variable `intLockMask'.  This is the interrupt level currently* masked when interrupts are locked out by intLock().  The default* lock-out level (MC680x0 = 7, x86 = 1, SH = 15)* is initially set by kernelInit() when VxWorks is initialized.** NOTE SIMNT:* This routine does nothing.** RETURNS: The interrupt level currently stored in the interrupt* lock-out mask. (ARM = ERROR always)** SEE ALSO: intLockLevelSet()*/int intLockLevelGet (void)    {    ...    }/********************************************************************************* intVecBaseSet - set the vector (trap) base address (MC680x0, x86, MIPS, ARM, SimSolaris, SimNT)** This routine sets the vector (trap) base address.  The CPU's vector base* register is set to the specified value, and subsequent calls to intVecGet()* or intVecSet() will use this base address.  The vector base address is* initially 0, until modified by calls to this routine.** \"NOTE SPARC:* \"On SPARC processors, the vector base address must be on a 4 Kbyte boundary* \"(that is, its bottom 12 bits must be zero).* \"* NOTE 68000:* The 68000 has no vector base register; thus, this routine is a no-op for* 68000 systems.** \"NOTE I960:* \"This routine is a no-op for i960 systems.  The interrupt vector table is* \"located in sysLib, and moving it by intVecBaseSet() would require* \"resetting the processor.  Also, the vector base is cached on-chip in the* \"PRCB and thus cannot be set from this routine.* \"* NOTE MIPS:* The MIPS processors have no vector base register;* thus this routine is a no-op for this architecture.** NOTE SH77XX:* This routine sets <baseAddr> to vbr, then loads an interrupt dispatch* code to (vbr + 0x600).  When SH77XX processor accepts an interrupt request,* it sets an exception code to INTEVT register and jumps to (vbr + 0x600).* Thus this dispatch code is commonly used for all interrupts' handling.** The exception codes are 12bits width, and interleaved by 0x20.  VxWorks* for SH77XX locates a vector table at (vbr + 0x800), and defines the vector* offsets as (exception codes / 8).  This vector table is commonly used by* all interrupts, exceptions, and software traps.** All SH77XX processors have INTEVT register at address 0xffffffd8.  The SH7707* processor has yet another INTEVT2 register at address 0x04000000, to identify* its enhanced interrupt sources.  The dispatch code obtains the address* of INTEVT register from a global constant `intEvtAdrs'.  The constant is* defined in `sysLib', thus the selection of INTEVT/INTEVT2 is configurable* at BSP level.  The `intEvtAdrs' is loaded to (vbr + 4) by intVecBaseSet().** After fetching the exception code, the interrupt dispatch code applies* a new interrupt mask to the status register, and jumps to an individual* interrupt handler.  The new interrupt mask is taken from `intPrioTable[]',* which is defined in `sysALib'.  The `intPrioTable[]' is loaded to* (vbr + 0xc00) by intVecBaseSet().** NOTE ARM:* The ARM processors have no vector base register;* thus this routine is a no-op for this architecture.** NOTE SIMSOLARIS, SIMNT:* This routine does nothing.** RETURNS: N/A** SEE ALSO: intVecBaseGet(), intVecGet(), intVecSet()*/void intVecBaseSet    (    FUNCPTR *  baseAddr     /* new vector (trap) base address */    )    {    ...    }/********************************************************************************* intVecBaseGet - get the vector (trap) base address (MC680x0, x86, MIPS, ARM, SimSolaris, SimNT)** This routine returns the current vector base address, which is set* with intVecBaseSet().** RETURNS: The current vector base address* (MIPS = 0 always, ARM = 0 always, SimSolaris = 0 always and * SimNT = 0 always).** SEE ALSO: intVecBaseSet()*/FUNCPTR *intVecBaseGet (void)    {    ...    }/******************************************************************************** intVecSet - set a CPU vector (trap) (MC680x0, x86, MIPS, SH, SimSolaris, SimNT)** This routine attaches an exception/interrupt/trap handler to a specified * vector.  The vector is specified as an offset into the CPU's vector table. * This vector table starts, by default, at:* * .TS* tab(|);* l l.*     MC680x0:     | 0*     MIPS:        | `excBsrTbl' in excArchLib*     x86:         | 0*     SH702x/SH703x/SH704x/SH76xx: | `excBsrTbl' in excArchLib*     SH77xx:      | vbr + 0x800*     SimSolaris:  | 0* .TE** However, the vector table may be set to start at any address with* intVecBaseSet() (on CPUs for which it is available).  The vector table is* set up in usrInit().** This routine takes an interrupt vector as a parameter, which is the byte* offset into the vector table. Macros are provided to convert between interrupt* vectors and interrupt numbers, see `intArchLib'.** \"NOTE SPARC:* \"This routine generates code to:* \".IP (1) 4* \"save volatile registers;* \".IP (2)* \"fix possible window overflow;* \".IP (3)* \"read the processor state register into register %L0; and * \".IP (4)* \"jump to the specified address.* \".LP* \"* The intVecSet() routine puts this generated code into the trap table* entry corresponding to <vector>.* * Window overflow and window underflow are sacred to* the kernel and may not be pre-empted.  They are written here* only to track changing trap base registers (TBRs).* With the "branch anywhere" scheme (as opposed to the branch PC-relative* +/-8 megabytes) the first instruction in the vector table must not be a * change of flow control nor affect any critical registers.  The JMPL that * replaces the BA will always execute the next vector's first instruction.** \"NOTE I960:* \"Vectors 0-7 are illegal vectors; using them puts the vector into the* \"priorities/pending portion of the table, which yields undesirable* \"actions.  The i960CA caches the NMI vector in internal RAM at system* \"power-up.  This is where the vector is taken when the NMI occurs.  Thus, it* \"is important to check to see if the vector being changed is the NMI* \"vector, and, if so, to write it to internal RAM.* \"* NOTE MIPS:* On MIPS CPUs the vector table is set up statically in software.** NOTE SH77XX:* The specified interrupt handler <function> has to coordinate with an interrupt* stack frame which is specially designed for SH77XX version of VxWorks:**.CS*    [ task's stack ]       [ interrupt stack ]**	|  xxx  | high address*	|  yyy  |		+-------+*	|__zzz__|<--------------|task'sp|  0*	|	|		|INTEVT | -4*	|	| low address	|  ssr  | -8*				|_ spc _| -12 <- sp (non-nested interrupt)*				:	:*				:	:*				:_______:*                               |INTEVT |  0*                               |  ssr  | -4*                               |_ spc _| -8  <- sp (nested interrupt)*                               |       |*.CE** This interrupt stack frame is formed by a common interrupt dispatch code* which is loaded at (vbr + 0x600).  You usually do not have to pay any* attention to this stack frame, since intConnect() automatically appends* an appropriate stack manipulation code to your interrupt service routine.* The intConnect() assumes that your interrupt service routine (ISR) is

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久久久久电影| 欧美国产日韩一二三区| 日韩av电影天堂| 91精品国产综合久久久久久久| 免费观看91视频大全| 国产成人午夜99999| 94-欧美-setu| av在线播放一区二区三区| 91精品国产日韩91久久久久久| 成人一区二区三区视频| 婷婷国产在线综合| 国产精品国产三级国产aⅴ入口| 高清不卡一二三区| 岛国精品一区二区| 黄色日韩三级电影| 91浏览器入口在线观看| 91麻豆精品国产91久久久使用方法| 欧美猛男男办公室激情| 综合久久一区二区三区| 天天射综合影视| 99精品欧美一区二区蜜桃免费 | www国产精品av| 亚洲成人精品影院| 91亚洲午夜精品久久久久久| 亚洲精品一区二区在线观看| 亚洲国产人成综合网站| 成人国产精品免费网站| 中文字幕亚洲在| 成人免费毛片aaaaa**| 免费成人你懂的| 美美哒免费高清在线观看视频一区二区 | 337p亚洲精品色噜噜噜| 久久电影网站中文字幕| 美国三级日本三级久久99| 日本不卡免费在线视频| 91精品国产色综合久久不卡蜜臀| 国产午夜精品在线观看| 久久久美女艺术照精彩视频福利播放| 综合久久久久久久| 波多野结衣在线一区| 久久综合久久综合久久| 精品一区二区三区久久久| 欧美日韩成人综合在线一区二区| 亚洲人成亚洲人成在线观看图片| 国产.欧美.日韩| 综合色中文字幕| 欧美日韩一级视频| 久久国产三级精品| 久久综合色婷婷| 岛国一区二区在线观看| 亚洲色图欧美偷拍| 欧美日韩久久久| 丝袜美腿高跟呻吟高潮一区| 91精品国产91久久久久久一区二区 | 精品国产髙清在线看国产毛片| 日韩专区一卡二卡| 国产不卡视频在线播放| 日韩一区二区在线看| 国产自产v一区二区三区c| 国产精品嫩草久久久久| 欧美久久一区二区| av一本久道久久综合久久鬼色| 亚洲一区二区3| 国产视频一区二区在线观看| 色婷婷综合中文久久一本| 国产一区二区影院| 日韩高清不卡一区二区三区| 国产精品久久网站| 91精品国产综合久久香蕉的特点| 成人爱爱电影网址| 毛片av中文字幕一区二区| 一区二区三区中文字幕电影| 久久看人人爽人人| 欧美一区二区三区免费视频| 色综合久久88色综合天天| 国产乱码精品一区二区三区五月婷| 亚洲一区二区在线观看视频| 国产精品久久久久久久久免费相片 | 日韩精品中文字幕一区二区三区 | 日韩不卡一二三区| 亚洲福中文字幕伊人影院| 18成人在线视频| 亚洲精品一二三| 亚洲高清免费观看高清完整版在线观看| 久久久精品国产免大香伊 | 麻豆久久一区二区| 麻豆免费看一区二区三区| 免费高清在线一区| 国产揄拍国内精品对白| 国产福利视频一区二区三区| 丰满少妇久久久久久久| 99久久免费视频.com| 色综合久久天天综合网| 欧美日韩久久一区二区| 日韩午夜在线观看| 国产精品护士白丝一区av| 一区二区三区免费看视频| 日韩电影在线一区| 免费成人av在线| 91偷拍与自偷拍精品| 91精品啪在线观看国产60岁| 久久精品一区二区三区四区| 国产精品区一区二区三| 丝袜诱惑亚洲看片| 99久久精品99国产精品| 91精品国产综合久久婷婷香蕉| 亚洲精品在线观看网站| 亚洲一区二区三区在线看| 精品在线一区二区三区| 欧美性色aⅴ视频一区日韩精品| 日韩视频一区二区三区在线播放| 国产精品青草久久| 国精产品一区一区三区mba桃花 | 亚洲国产精品麻豆| 国产高清精品网站| 日韩精品综合一本久道在线视频| 亚洲欧美日韩精品久久久久| 国产乱子轮精品视频| 日韩欧美一区二区视频| 一区二区三区免费在线观看| 国产成人在线视频网站| 日韩欧美综合一区| 看电影不卡的网站| 日韩一区二区三区观看| 香蕉乱码成人久久天堂爱免费| 一本色道**综合亚洲精品蜜桃冫 | 懂色av一区二区三区免费看| 欧美成人一区二区三区片免费| 日韩精品一二区| 91精品国产综合久久久蜜臀粉嫩 | 日韩欧美第一区| 麻豆精品视频在线观看免费| 日韩亚洲欧美综合| 国产精品影视天天线| 综合自拍亚洲综合图不卡区| jizzjizzjizz欧美| 亚洲一二三四久久| 884aa四虎影成人精品一区| 久久99精品国产麻豆不卡| 欧美国产精品劲爆| 欧美在线观看18| 日韩av网站免费在线| 国产蜜臀av在线一区二区三区| 风流少妇一区二区| 午夜av一区二区| 国产欧美日韩麻豆91| 在线免费观看一区| 国产乱码精品1区2区3区| 一区二区三区在线免费| 91精品国产综合久久久久久漫画| 成人午夜精品在线| 婷婷国产在线综合| 一区二区三区国产精华| 国产欧美一区二区精品性| 欧美视频一区二区三区在线观看| 久久av老司机精品网站导航| 亚洲男人的天堂一区二区| 精品国产一区二区三区四区四| 色哟哟精品一区| 成人一级片网址| 国产一区二区三区电影在线观看 | 欧美sm极限捆绑bd| 91麻豆精品国产自产在线观看一区 | 国产欧美日本一区视频| 精品视频资源站| 欧美视频中文字幕| 欧美日韩黄色影视| 欧美午夜免费电影| 色综合av在线| 欧美在线观看18| 欧美亚洲综合网| 亚洲午夜精品网| 亚洲精品亚洲人成人网在线播放| 国产三级精品三级| 欧美四级电影在线观看| 91丨porny丨在线| 国产精品综合av一区二区国产馆| 一区二区三区 在线观看视频| 成人av网站在线观看免费| 免费高清视频精品| 久久99国产精品成人| 欧美高清在线一区二区| 26uuu亚洲综合色| 久久精品欧美一区二区三区麻豆| 国产调教视频一区| 亚洲婷婷综合久久一本伊一区| 亚洲日本在线看| 天天综合色天天综合| 久久99精品国产麻豆婷婷洗澡| 国产成人夜色高潮福利影视| 91在线观看美女| 制服丝袜激情欧洲亚洲| 国产欧美一区二区精品忘忧草| 中文字幕在线免费不卡| 日韩精品一二三四| 精品中文av资源站在线观看| 色女孩综合影院| 国产亚洲成aⅴ人片在线观看| 自拍偷拍亚洲综合| 国产麻豆91精品|