main.c

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

C
615
字号
        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, ProdTbl_g[i][j].MsgAlloc);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, ConsTbl_g[i].MsgFree);    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n        "</font>);    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1,                    ProdTbl_g[i][j].MsgAlloc-ProdTblPrev_g[i][j].MsgAlloc);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1,                ConsTbl_g[i].MsgFree-ConsTblPrev_g[i].MsgFree);    }    <font color="#6920ac">/* Display Number message puts and gets */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nPUT/GET "</font>);    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, ProdTbl_g[i][j].MsgPut);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, ConsTbl_g[i].MsgGet);    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n        "</font>);    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1,                    ProdTbl_g[i][j].MsgPut-ProdTblPrev_g[i][j].MsgPut);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1,                ConsTbl_g[i].MsgGet-ConsTblPrev_g[i].MsgGet);    }    <font color="#6920ac">/* Display wait counters */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nWaits   "</font>);    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, ProdTbl_g[i][j].WaitCntr);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, ConsTbl_g[i].WaitCntr);    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n        "</font>);    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1,                    ProdTbl_g[i][j].WaitCntr-ProdTblPrev_g[i][j].WaitCntr);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1,                ConsTbl_g[i].WaitCntr-ConsTblPrev_g[i].WaitCntr);    }<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* (PRINT_TEST_STATISTIC == 1) */</font></font><b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* (PRINT_FULL_STATICTIC == 1) */</font></font>    <a href="task_Enable.FIND-FUNC">task_Enable</a>();    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="crtx_Main">crtx_Main</a></font></b>(    <i>crtx_Int_t</i>  ArgC_a,     <i>crtx_Void_t</i> *pArgV_a,     <i>crtx_Void_t</i> *pEnvV_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>crtx_Int_t</i>      ArgC;    <i>crtx_Void_t</i>     *pArgV;    <i>crtx_Void_t</i>     *pEnvV;    <i>crtx_Int_t</i>      i, j;    <i>crtx_Status_t</i>   Status;    <i>task_Attr_t</i>     Attr;    <i>crtx_Char_t</i>     TaskName[<a href="TASK_MAX_NAME_LEN.FIND-DEF">TASK_MAX_NAME_LEN</a>];    <i>crtx_Int_t</i>      NoMsgsCntr;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="pltf_Init.FIND-FUNC">pltf_Init</a>(ArgC_a, pArgV_a, pEnvV_a);    ArgC  = ArgC_a;     <font color="#6920ac">/* to avoid compiler's warning */</font>    pArgV = pArgV_a;    <font color="#6920ac">/* ... */</font>    pEnvV = pEnvV_a;    <font color="#6920ac">/* ... */</font>    <font color="#6920ac">/* startup message */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n%s (Version: %s)\n\n"</font>, <a href="syst_Copyright.FIND-FUNC">syst_Copyright</a>(), <a href="syst_VersionStr.FIND-FUNC">syst_VersionStr</a>());    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]:TEST:Recursive Resource Lock (RRL)"</font>           <font color="DarkGreen">" Test Started (%d ticks/sec)  ...\n"</font>,           <a href="task_GetName.FIND-FUNC">task_GetName</a>(<a href="task_Self.FIND-FUNC">task_Self</a>()), <a href="task_Self.FIND-FUNC">task_Self</a>(), <a href="TICK_SYSTEM_TICKS_PER_SEC.FIND-DEF">TICK_SYSTEM_TICKS_PER_SEC</a>);    <font color="#6920ac">/* Create test environment */</font>    <font color="#6920ac">/* allocate memory pools for all producer groups */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        Status = <a href="MemPoolCreate.FIND-FUNC">MemPoolCreate</a>(&amp;PoolTab[i], <a href="MEM_POOL_SIZE.FIND-DEF">MEM_POOL_SIZE</a>, <i>sizeof</i>(Msg_t));        <b>if</b> (Status != <a href="MEM_POOL_SUCCESS.FIND-DEF">MEM_POOL_SUCCESS</a>)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]:ERROR: %s: %d: Cannot create pool #%d\n"</font>,                   <a href="task_GetName.FIND-FUNC">task_GetName</a>(<a href="task_Self.FIND-FUNC">task_Self</a>()), <a href="task_Self.FIND-FUNC">task_Self</a>(), <a href="__FILE__.FIND-DEF">__FILE__</a>, <a href="__LINE__.FIND-DEF">__LINE__</a>,                   i);            <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> Error_Exc;        }    }    <font color="#6920ac">/* initialise communication queue */</font>    <a href="ComQueueCreate.FIND-FUNC">ComQueueCreate</a>(&amp;ComQueue);    <font color="#6920ac">/* create producer tasks */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="sprintf.FIND-FUNC">sprintf</a>(TaskName, <font color="DarkGreen">"P %d.%d"</font>, i, j);            Attr = task_AttrDefault_g;            Attr.Priority   = <a href="PRIORITY.FIND-DEF">PRIORITY</a>;            Attr.State      = <a href="TASK_DEFERRED.FIND-DEF">TASK_DEFERRED</a>;            Attr.SchdPolicy = task_SchdTimeSharing;            Attr.TimeSlice  = <a href="TIMESLICE.FIND-DEF">TIMESLICE</a>;            Attr.pEnviron   = (<i>crtx_Void_t</i>*)&amp;ProdTbl_g[i][j];            Attr.pName      = TaskName;            ProdTbl_g[i][j].TaskID = <a href="task_Create1.FIND-FUNC">task_Create1</a>(Producer, &amp;Attr, &amp;Status,                                           1, (<i>crtx_Void_t</i>**)&amp;ProdTbl_g[i][j]);            <b>if</b> (Status != <a href="TASK_SUCCESS.FIND-DEF">TASK_SUCCESS</a>)            {                <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]:ERROR: %s: %d: task_Create: G:%d, P%d, E:%ld\n"</font>,                       <a href="task_GetName.FIND-FUNC">task_GetName</a>(<a href="task_Self.FIND-FUNC">task_Self</a>()), <a href="task_Self.FIND-FUNC">task_Self</a>(),                       <a href="__FILE__.FIND-DEF">__FILE__</a>, <a href="__LINE__.FIND-DEF">__LINE__</a>,                       i, j, Status);                <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> Error_Exc;            }            ProdTbl_g[i][j].GroupID = i;            ProdTbl_g[i][j].<a href="ID.FIND-DEF">ID</a> = j;        }    }    <font color="#6920ac">/* create consumer tasks */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="sprintf.FIND-FUNC">sprintf</a>(TaskName, <font color="DarkGreen">"C %d"</font>, i);        Attr = task_AttrDefault_g;        Attr.Priority   = <a href="PRIORITY.FIND-DEF">PRIORITY</a>;        Attr.State      = <a href="TASK_DEFERRED.FIND-DEF">TASK_DEFERRED</a>;        Attr.SchdPolicy = task_SchdTimeSharing;        Attr.TimeSlice  = <a href="TIMESLICE.FIND-DEF">TIMESLICE</a>;        Attr.pEnviron   = (<i>crtx_Void_t</i>*)&amp;ConsTbl_g[i];        Attr.pName      = TaskName;        ConsTbl_g[i].TaskID = <a href="task_Create1.FIND-FUNC">task_Create1</a>(Consumer, &amp;Attr, &amp;Status,                                            1, (<i>crtx_Void_t</i>**)&amp;ConsTbl_g[i]);        <b>if</b> (Status != <a href="TASK_SUCCESS.FIND-DEF">TASK_SUCCESS</a>)        {            <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]:ERROR: %s: %d: task_Create: C%d, E:%ld\n"</font>,                   <a href="task_GetName.FIND-FUNC">task_GetName</a>(<a href="task_Self.FIND-FUNC">task_Self</a>()), <a href="task_Self.FIND-FUNC">task_Self</a>(), <a href="__FILE__.FIND-DEF">__FILE__</a>, <a href="__LINE__.FIND-DEF">__LINE__</a>,                   i, Status);            <a href="CRTX_EXCEPTION.FIND-DEF">CRTX_EXCEPTION</a> Error_Exc;        }        ConsTbl_g[i].<a href="ID.FIND-DEF">ID</a> = i;    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        ConsTblPrev_g[i] = ConsTbl_g[i];    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            ProdTblPrev_g[i][j] = ProdTbl_g[i][j];        }    }    <font color="#6920ac">/* start all tasks */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="task_Run.FIND-FUNC">task_Run</a>(ConsTbl_g[i].TaskID);    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="task_Run.FIND-FUNC">task_Run</a>(ProdTbl_g[i][j].TaskID);        }    }    TestCycle = 1;    NoMsgsCntr = 5;    <font color="#6920ac">/* destroy test environment */</font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> NUM_TEST_CYCLES==0</font>    <b>while</b>(1)<b><font color='DarkGreen'>#else</font></b><font color="maroon"></font>    <b>for</b> ( ; TestCycle&lt;=<a href="NUM_TEST_CYCLES.FIND-DEF">NUM_TEST_CYCLES</a>; )<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* NUM_TEST_CYCLES */</font>    </font>    {        <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(<a href="TICK_SECS_TO_TICKS.FIND-DEF">TICK_SECS_TO_TICKS</a>(<a href="PRINT_INTERVAL.FIND-DEF">PRINT_INTERVAL</a>));        <b>if</b> (ComQueue.PutCntr == PutCntrPrev)        {            <b>if</b> (--NoMsgsCntr == 0)            {                <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]:ERROR: Message sending STOPED!!\n"</font>,                       <a href="task_GetName.FIND-FUNC">task_GetName</a>(<a href="task_Self.FIND-FUNC">task_Self</a>()), <a href="task_Self.FIND-FUNC">task_Self</a>());                <a href="syst_Fatal.FIND-FUNC">syst_Fatal</a>(<font color="DarkGreen">"Message sending STOPED!!"</font>);            }        }        <b>else</b>        {            NoMsgsCntr = 5;        }        <a href="#PrintStatistics">PrintStatistics</a>(8);        TestCycle++;        PutCntrPrev = ComQueue.PutCntr;        GetCntrPrev = ComQueue.GetCntr;        <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)        {            ConsTblPrev_g[i] = ConsTbl_g[i];        }        <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)        {            <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)            {                ProdTblPrev_g[i][j] = ProdTbl_g[i][j];            }        }    }    <font color="#6920ac">/* delete consumers */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <a href="task_Delete.FIND-FUNC">task_Delete</a>(ConsTbl_g[i].TaskID);    }    <font color="#6920ac">/* delete producers */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <b>for</b> (j=0; j&lt;<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>; j++)        {            <a href="task_Delete.FIND-FUNC">task_Delete</a>(ProdTbl_g[i][j].TaskID);        }    }    <font color="#6920ac">/* destroy memory pools */</font>    <b>for</b> (i=0; i&lt;<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++)    {        <a href="MemPoolDelete.FIND-FUNC">MemPoolDelete</a>(&amp;PoolTab[i]);    }    <font color="#6920ac">/* destroy communication queue */</font>    <a href="ComQueueDelete.FIND-FUNC">ComQueueDelete</a>(&amp;ComQueue);    <font color="#6920ac">/* completion message */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]:TEST: Recursive Resource Lock (RRL) Test Completed ...\n"</font>,           <a href="task_GetName.FIND-FUNC">task_GetName</a>(<a href="task_Self.FIND-FUNC">task_Self</a>()), <a href="task_Self.FIND-FUNC">task_Self</a>());    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font><font color="blue">Error_Exc:</font>    <b>return</b>;}</pre></BODY></HTML>

⌨️ 快捷键说明

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