exc_core.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 180 行
C
180 行
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/kernel/src/exc_core.c</TITLE></HEAD><BODY><pre><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/* */</font><font color="#6920ac">/* Copyright (c) 1997-1999 Australian Real Time Embedded Systems */</font><font color="#6920ac">/* */</font><font color="#6920ac">/* PROPRIETARY RIGHTS of Australian Real Time Embedded Systems */</font><font color="#6920ac">/* are involved in the subject matter of this material. All reproduction,*/</font><font color="#6920ac">/* manufacturing, use, and sales rights pertaining to this subject matter*/</font><font color="#6920ac">/* are governed by the license agreement. The recipient of this software */</font><font color="#6920ac">/* implicitly accepts the terms of the license. */</font><font color="#6920ac">/* */</font><font color="#6920ac">/*************************************************************************/</font><font color="#6920ac">/************************************************************************** * * FILE NAME * * exc_core.c * * SYSTEM COMPONENT * * Exception Handling Component * * DESCRIPTION * * This file contains the core services for Exception * Management Component. * * SERVICES * * excp_Raise * * SCCS HISTORY * * @(#)exc_core.c 1.5, 01/25/99, 00:30:11 * * AUTHOR * * Vadim N. Azarovsky * * CREATED * * 20-Mar-1997 by Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * **************************************************************************/</font><b><font color='DarkGreen'>#include</font></b> <a href="exc_defs.h.FIND-INC"><font color="blue">"exc_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="ass_defs.h.FIND-INC"><font color="blue">"ass_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="sys_defs.h.FIND-INC"><font color="blue">"sys_defs.h"</font></a><i>excp_StackFrame_t</i> *excp_Stack_g = <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>;<font color="#6920ac">/************************************************************************** * * SERVICE NAME * * excp_Raise * * SYNOPSIS * * #include "exc_extr.h" * EXCP_RAISE(exception); * EXCP_RAISE_SPECIFIC(exception,data); * EXCP_RERAISED; * excp_Raise(exception, __FILE__, __LINE__, data); * * DESCRIPTION * * Raise specified exception within current thread context. This * procedure usually called indirectly throught EXCP_RAISE, * EXCP_RERAISE or EXCP_RAISE_SPECIFIC macros. * * If there is exception frame (excp_StackFrame_t) at the top * of the exception stack (excp_Stack_g) this procedure fills * in the pException, pFile, Line and pData fields, pops the * exception stack, and calls longjmp to pass control to the * nearlest exception handler. * * If exception stack if empty then uncaught exception will * be announced. * * ARGUMENTS * * o Exception descriptor; * o file name where exception occured; * o line number where exception occured; * o exception specific data; * * RETURN VALUE * * None * * USAGE * * o Application level; * o Used by OS level to inform application level about detected * errors or resource shortage; * * CONSTAINS * * Not allowed for within ISR * * AUTOR * * Vadim N. Azarovsky * * REVISION HISTORY * * NAME DATE REMARKS * VA 20-Mar-1997 Created initial version * **************************************************************************/</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="excp_Raise">excp_Raise</a></font></b>( <i>excp_Descr_t</i> *pException_a, <i>crtx_Char_t</i> *pFile_a, <i>crtx_Int_t</i> Line_a, <i>crtx_Void_t</i> *pData_a){</font><font color="#6920ac">/********************* * LOCAL VARIABLES * *********************/</font> <i>excp_StackFrame_t</i> *pFrame = excp_Stack_g;<font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <b>if</b> (pException_a == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) <a href="syst_Fatal.FIND-FUNC">syst_Fatal</a>(<font color="DarkGreen">"excp_Raise: NULL exception control block\n"</font>); <font color="#6920ac">/* check if any exceptiption handler is currently installed */</font> <b>if</b> (pFrame == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { <b>if</b> (pException_a == &asse_Exception_g) { <font color="#6920ac">/* announce uncaught assertion exception */</font> <font color="#6920ac">/* < announce uncaught assertion exception > */</font> } <b>else</b> { <font color="#6920ac">/* announce an uncaught exception */</font> <font color="#6920ac">/* < announce an uncaught exception > */</font> } } <font color="#6920ac">/* initialise exception frame */</font> pFrame->pException = pException_a; pFrame->pFile = pFile_a; pFrame->Line = Line_a; pFrame->pData = pData_a; <font color="#6920ac">/* pop exception stack */</font> excp_Stack_g = excp_Stack_g->pPrevFrame; <b>return</b>; <font color="#6920ac">/* FIX ME: TO BE IMPLEMENED */</font> <font color="#6920ac">/* long jump to exception handler */</font> <a href="longjmp.FIND-FUNC">longjmp</a>(pFrame->Environ, excp_Raised); <font color="#6920ac">/* === NEVER GET HERE === */</font><font color="#6920ac">/************************ * EXCEPTION HANDLING * ************************/</font> <font color="#6920ac">/* None */</font>}</pre></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?