main.c

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

C
615
字号
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/tests/rrl_test/src/main.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><b><font color='DarkGreen'>#include</font></b> <a href="cortex.h.FIND-INC"><font color="blue">"cortex.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="rrl_test.h.FIND-INC"><font color="blue">"rrl_test.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="plt_defs.h.FIND-INC"><font color="blue">"plt_defs.h"</font></a><b><font color='DarkGreen'>#include</font></b> <a href="prn_defs.h.FIND-INC"><font color="blue">"prn_defs.h"</font></a><font color="#6920ac">/* producers table */</font>PCB_t ProdTbl_g[<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>][<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>];PCB_t ProdTblPrev_g[<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>][<a href="NUM_OF_PRODUCERS.FIND-DEF">NUM_OF_PRODUCERS</a>];<font color="#6920ac">/* consumers table */</font>CCB_t ConsTbl_g[<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>];CCB_t ConsTblPrev_g[<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>];<font color="#6920ac">/* fixed size memory pools */</font>MemPool_t PoolTab[<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>];<font color="#6920ac">/* consumers/producers communication queue */</font>ComQueue_t ComQueue;<font color="#6920ac">/* test cycles counter */</font><i>crtx_Uint32_t</i> TestCycle;<i>crtx_Uint32_t</i>   PutCntrPrev;        <font color="#6920ac">/* total number of puts */</font><i>crtx_Uint32_t</i>   GetCntrPrev;        <font color="#6920ac">/* total number of puts */</font><i>crtx_Uint32_t</i>   Throughput;<i>crtx_Uint32_t</i>   MinThroughput = 0xfffffffful;<i>crtx_Uint32_t</i>   MaxThroughput = 0ul;<font color="#6920ac">/* Producer task */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="Producer">Producer</a></font></b>(    <i>crtx_Int_t</i>  ArgC_a          __attribute__((__unused__)),     <i>crtx_Void_t</i> **ppArgV_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    PCB_t   *pContext = (PCB_t*)ppArgV_a;    Msg_t   *pMsg;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pContext)    <b>while</b>(1)    {        <font color="#6920ac">/* allocate message */</font>        <b>while</b>((pMsg = <a href="ALLOC_MSG.FIND-DEF">ALLOC_MSG</a>()) == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)        {            <font color="#6920ac">/* All blocks are in used. Wait! */</font>            pContext-&gt;WaitCntr++;            <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(0);        }        <font color="#6920ac">/* initialise message */</font>        pContext-&gt;MsgAlloc++;       <font color="#6920ac">/* message has been allocated */</font>        <a href="MSG_POOL.FIND-DEF">MSG_POOL</a>(pMsg) = &amp;<a href="MY_POOL.FIND-DEF">MY_POOL</a>();        pMsg-&gt;Key      = (<i>rlst_Key_t</i>)pMsg&gt;&gt;2 &amp; 0xFF;        pMsg-&gt;GroupID  = <a href="MY_GROUP.FIND-DEF">MY_GROUP</a>();        pMsg-&gt;ProdID   = <a href="MY_ID.FIND-DEF">MY_ID</a>();        <font color="#6920ac">/* put message on communication queue */</font>        <a href="PUT_MSG.FIND-DEF">PUT_MSG</a>(pMsg);        pContext-&gt;MsgPut++;         <font color="#6920ac">/* message sent */</font>    }    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* Consumer task */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="Consumer">Consumer</a></font></b>(    <i>crtx_Int_t</i>  ArgC_a          __attribute__((__unused__)),     <i>crtx_Void_t</i> **ppArgV_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    CCB_t   *pContext = (CCB_t*)ppArgV_a;    Msg_t   *pMsg;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="CRTX_ASSERT.FIND-DEF">CRTX_ASSERT</a>(pContext)    <b>while</b>(1)    {        <font color="#6920ac">/* get message from get queue */</font>        <b>while</b>((pMsg = <a href="GET_MSG.FIND-DEF">GET_MSG</a>()) == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>)        {            <font color="#6920ac">/* Communication queue is empty. Wait! */</font>            pContext-&gt;WaitCntr++;            <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(0);        }        <font color="#6920ac">/* complete message initialisation */</font>        pContext-&gt;MsgGet++;     <font color="#6920ac">/* message has been received */</font>        pMsg-&gt;ConsID   = <a href="MY_ID.FIND-DEF">MY_ID</a>();        <font color="#6920ac">/* return message on the pool */</font>        <a href="FREE_MSG.FIND-DEF">FREE_MSG</a>(pMsg);        pContext-&gt;MsgFree++;    }    <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="PrintStatistics">PrintStatistics</a></font></b>(<i>crtx_Int_t</i> Width_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>tick_Time_t</i>         SysTime;    <i>crtx_Char_t</i>         Format[15];    <i>task_TrackerInfo_t</i>  MainTask;    <i>task_TrackerInfo_t</i>  IdleTask;    <i>crtx_Uint32_t</i>       TotalCycles = 0;    <i>crtx_Int_t</i>          i, j;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="task_Disable.FIND-FUNC">task_Disable</a>();    <a href="tick_GetSystemTime.FIND-FUNC">tick_GetSystemTime</a>(&amp;SysTime);    Throughput = ComQueue.PutCntr - PutCntrPrev;    <b>if</b> (Throughput &gt; MaxThroughput)        MaxThroughput = Throughput;    <b>if</b> (Throughput &lt; MinThroughput)        MinThroughput = Throughput;    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n%s[%d]:"</font>           <font color="DarkGreen">" ***** Test statistics on pass %ld at %02ld:%02ld:%02ld.%03ld:"</font>           <font color="DarkGreen">" Gets: %ld Puts: %ld QueLen: %d Throughput(cur,min,max):"</font>           <font color="DarkGreen">" %ld,%ld,%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>(), TestCycle,             SysTime.tv_sec/3600, (SysTime.tv_sec%3600)/60, SysTime.tv_sec%60,            SysTime.tv_nsec/1000000,           ComQueue.GetCntr, ComQueue.PutCntr, ComQueue.Queue.Length,           Throughput, MinThroughput, MaxThroughput);<b><font color='DarkGreen'>#if</font></b><font color="maroon"> (PRINT_FULL_STATICTIC == 1)</font>    <font color="#6920ac">/* Display task names */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"TASK    "</font>);    <a href="sprintf.FIND-FUNC">sprintf</a>(Format, <font color="DarkGreen">"%%-%d.%ds "</font>, Width_a-1, Width_a-1);    <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++)        {            <i>crtx_Char_t</i> *pName = <a href="task_GetName.FIND-FUNC">task_GetName</a>(ProdTbl_g[i][j].TaskID);            <a href="task_TrackerInfo.FIND-FUNC">task_TrackerInfo</a>(ProdTbl_g[i][j].TaskID, &amp;ProdTbl_g[i][j].Info,                             <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>);            TotalCycles += ProdTbl_g[i][j].Info.Ticks;            <a href="printf.FIND-FUNC">printf</a>(Format, pName);        }    }    <b>for</b> (i=0; i&lt;<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++)    {        <i>crtx_Char_t</i> *pName = <a href="task_GetName.FIND-FUNC">task_GetName</a>(ConsTbl_g[i].TaskID);        <a href="task_TrackerInfo.FIND-FUNC">task_TrackerInfo</a>(ConsTbl_g[i].TaskID, &amp;ConsTbl_g[i].Info,                         <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>);        TotalCycles += ConsTbl_g[i].Info.Ticks;        <a href="printf.FIND-FUNC">printf</a>(Format, pName);    }    <font color="#6920ac">/* idle */</font>    <a href="printf.FIND-FUNC">printf</a>(Format, <a href="task_GetName.FIND-FUNC">task_GetName</a>(0));     <a href="task_TrackerInfo.FIND-FUNC">task_TrackerInfo</a>(0, &amp;IdleTask, <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>);    TotalCycles += IdleTask.Ticks;    <font color="#6920ac">/* main */</font>    <a href="printf.FIND-FUNC">printf</a>(Format, <a href="task_GetName.FIND-FUNC">task_GetName</a>(1));     <a href="task_TrackerInfo.FIND-FUNC">task_TrackerInfo</a>(1, &amp;MainTask, <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>);    TotalCycles += MainTask.Ticks;<b><font color='DarkGreen'>#if</font></b><font color="maroon"> (PRINT_TASK_STATISTIC == 1)</font>    <font color="#6920ac">/* Display CPU % used of total */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nCPU%%    "</font>);    <a href="sprintf.FIND-FUNC">sprintf</a>(Format, <font color="DarkGreen">"%%-%dd "</font>, Width_a-1);    <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>(Format, ProdTbl_g[i][j].Info.Ticks*100/TotalCycles);        }    }    <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>(Format, ConsTbl_g[i].Info.Ticks*100/TotalCycles);    }    <a href="printf.FIND-FUNC">printf</a>(Format, IdleTask.Ticks*100/TotalCycles);    <a href="printf.FIND-FUNC">printf</a>(Format, MainTask.Ticks*100/TotalCycles);    <font color="#6920ac">/* Display number of system ticks */</font>    <a href="printf.FIND-FUNC">printf</a>( <font color="DarkGreen">"\nTICKS   "</font>);    <a href="sprintf.FIND-FUNC">sprintf</a>(Format, <font color="DarkGreen">"%%-%dd "</font>, Width_a-1);    <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>( Format, ProdTbl_g[i][j].Info.Ticks);        }    }    <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>( Format, ConsTbl_g[i].Info.Ticks);    }    <a href="printf.FIND-FUNC">printf</a>( Format, IdleTask.Ticks);    <a href="printf.FIND-FUNC">printf</a>( Format, MainTask.Ticks);    <font color="#6920ac">/* Display number of system cycles */</font>    <a href="printf.FIND-FUNC">printf</a>( <font color="DarkGreen">"\nCYCLES  "</font>);    <a href="sprintf.FIND-FUNC">sprintf</a>(Format, <font color="DarkGreen">"%%-%dd "</font>, Width_a-1);    <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>( Format, ProdTbl_g[i][j].Info.Cycles);        }    }    <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>( Format, ConsTbl_g[i].Info.Cycles);    }    <a href="printf.FIND-FUNC">printf</a>( Format, IdleTask.Cycles);    <a href="printf.FIND-FUNC">printf</a>( Format, MainTask.Cycles);    <font color="#6920ac">/* Display Number of switches */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nSWCH    "</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].Info.Switches);        }    }    <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].Info.Switches);    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, IdleTask.Switches);    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*ld "</font>, Width_a-1, MainTask.Switches);    <font color="#6920ac">/* Display stack usage (in %) */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nSTCKUSG "</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">"%-*d "</font>, Width_a-1, ProdTbl_g[i][j].Info.StackUsage);        }    }    <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">"%-*d "</font>, Width_a-1, ConsTbl_g[i].Info.StackUsage);    }    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*d "</font>, Width_a-1, IdleTask.StackUsage);    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%-*d "</font>, Width_a-1, MainTask.StackUsage);<b><font color='DarkGreen'>#endif</font></b><font color="maroon"> <font color="#6920ac">/* (PRINT_TASK_STATISTIC == 1) */</font></font><b><font color='DarkGreen'>#if</font></b><font color="maroon"> (PRINT_TEST_STATISTIC == 1)</font>    <font color="#6920ac">/* Display Number message allocations and releases */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\nALL/FRE "</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++)

⌨️ 快捷键说明

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