swi_core.c

来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 912 行 · 第 1/3 页

C
912
字号
    <a href="hrdi_Inc.FIND-FUNC">hrdi_Inc</a>(&amp;sfti_Environ_g.Global);<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* permit global software interrupts */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_GlobalPermit">sfti_GlobalPermit</a></font></b>(    <i>crtx_Void_t</i>){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <font color="#6920ac">/*      * Let's simulate CPU interrupt system (do same sort of things as     * any respectable CPU does. Use of task scheduler     * slightly extends our virtual CPU functionalities and makes a      * link with the rest of system.     */</font>    <b>if</b> (sfti_Environ_g.Global &gt; 1)    {        <font color="#6920ac">/* global isnterrupt system is disabled */</font>        <a href="hrdi_Dec.FIND-FUNC">hrdi_Dec</a>(&amp;sfti_Environ_g.Global);        <b>return</b>;    }    <font color="#6920ac">/* about to enable global interrupt flag, but not quite yet. This     * will be done by sfti_CheckPending() after all pending interrupts     * are served. */</font>    <b>do</b>    {        <font color="#6920ac">/* service pending software interrupts */</font>        <a href="#sfti_ServicePending">sfti_ServicePending</a>();        <font color="#6920ac">/* Reschedule tasks. Note that schd_Reschedule only shall          * be called when all software interrupts are disabled          */</font>        <a href="thrd_Scheduler.FIND-FUNC">thrd_Scheduler</a>();    } <b>while</b>(<a href="#sfti_CheckPending">sfti_CheckPending</a>());    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* disable specified interrupt sources */</font><font size="+1"><i>crtx_Mask_t</i> <b><font color="azure1"><a name="sfti_Disable">sfti_Disable</a></font></b>(    <i>crtx_Mask_t</i> Mask_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <a href="CRTX_REG_1.FIND-DEF">CRTX_REG_1</a> <i>crtx_Mask_t</i> Mask;    <font color="#6920ac">/* mask of interrupts which have be                                      * re-enabled to restore original                                      * interrupt status */</font>    <a href="CRTX_REG_2.FIND-DEF">CRTX_REG_2</a> <i>hrdi_FastIntrCookie_t</i>    Cookie;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    Cookie = <a href="hrdi_FastIntrDisable.FIND-FUNC">hrdi_FastIntrDisable</a>();    <font color="#6920ac">/* make mask of interrupts to be disabled  */</font>    Mask = (Mask_a &amp; sfti_Environ_g.Enabled);    <font color="#6920ac">/* clear bits of interrupt sources to be disabled */</font>    sfti_Environ_g.Enabled &amp;= ~Mask;    <a href="hrdi_FastIntrEnable.FIND-FUNC">hrdi_FastIntrEnable</a>(Cookie);    <b>return</b> Mask;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* enable specified interrupt sources */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_Enable">sfti_Enable</a></font></b>(    <i>crtx_Mask_t</i> Mask_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <font color="#6920ac">/* disable global software interrupts flag */</font>    <a href="#sfti_GlobalForbid">sfti_GlobalForbid</a>();    <font color="#6920ac">/* set bits of interrupts sources to be enabled */</font>    <a href="SFTI_ENABLE.FIND-DEF">SFTI_ENABLE</a>(Mask_a);    <font color="#6920ac">/* enable global interrupts flag */</font>    <a href="#sfti_GlobalPermit">sfti_GlobalPermit</a>();    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* trigger software interrupt */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_Trigger">sfti_Trigger</a></font></b>(    <i>sfti_Vector_t</i> Vector_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(Vector_a&gt;=0 &amp;&amp; Vector_a&lt;<a href="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>)    <font color="#6920ac">/* simply set pending interrupt flag */</font>    <a href="hrdi_Or.FIND-FUNC">hrdi_Or</a>(&amp;sfti_Environ_g.Pending,(0x1&lt;&lt;Vector_a));    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR handler */</font><font size="+1"><i>sfti_Handler_t</i> <b><font color="azure1"><a name="sfti_GetHandler">sfti_GetHandler</a></font></b>(    <i>sfti_Vector_t</i> Vector_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(Vector_a&gt;=0 &amp;&amp; Vector_a&lt;<a href="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>)    <b>return</b> <a href="sfti_Handler.FIND-FUNC">sfti_Handler</a>(Vector_a);<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR context */</font><font size="+1"><i>sfti_Context_t</i> <b><font color="azure1"><a name="sfti_GetContext">sfti_GetContext</a></font></b>(    <i>sfti_Vector_t</i> Vector_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(Vector_a&gt;=0 &amp;&amp; Vector_a&lt;<a href="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>)    <b>return</b> <a href="sfti_Context.FIND-FUNC">sfti_Context</a>(Vector_a);<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR flags */</font><font size="+1"><i>crtx_Int_t</i> <b><font color="azure1"><a name="sfti_GetFlags">sfti_GetFlags</a></font></b>(    <i>sfti_Vector_t</i> Vector_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(Vector_a&gt;=0 &amp;&amp; Vector_a&lt;<a href="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>)    <b>return</b> <a href="sfti_Flags.FIND-FUNC">sfti_Flags</a>(Vector_a);<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* get HISR attributes */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="sfti_GetAttr">sfti_GetAttr</a></font></b>(    <i>sfti_Vector_t</i>   Vector_a,     <i>sfti_Attr_t</i>     *pAttr_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(Vector_a&gt;=0 &amp;&amp; Vector_a&lt;<a href="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>)    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pAttr_a)    *pAttr_a = <a href="sfti_Attr.FIND-FUNC">sfti_Attr</a>(Vector_a);    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* is HISR created? */</font><font size="+1"><i>crtx_Boolean_t</i> <b><font color="azure1"><a name="sfti_IsCreated">sfti_IsCreated</a></font></b>(    <i>sfti_Vector_t</i> Vector_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(Vector_a&gt;=0 &amp;&amp; Vector_a&lt;<a href="SFTI_INTR_VECTORS.FIND-DEF">SFTI_INTR_VECTORS</a>)    <b>return</b> <a href="sfti_IS_CREATED.FIND-FUNC">sfti_IS_CREATED</a>(Vector_a);<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}

⌨️ 快捷键说明

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