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 == &amp;asse_Exception_g)        {            <font color="#6920ac">/* announce uncaught assertion exception */</font>            <font color="#6920ac">/* &lt; announce uncaught assertion exception &gt; */</font>        }        <b>else</b>        {            <font color="#6920ac">/* announce an uncaught exception */</font>            <font color="#6920ac">/* &lt; announce an uncaught exception &gt; */</font>        }    }    <font color="#6920ac">/* initialise exception frame */</font>    pFrame-&gt;pException = pException_a;    pFrame-&gt;pFile      = pFile_a;    pFrame-&gt;Line       = Line_a;    pFrame-&gt;pData      = pData_a;    <font color="#6920ac">/* pop exception stack */</font>    excp_Stack_g = excp_Stack_g-&gt;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-&gt;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 + -
显示快捷键?