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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { Status = <a href="MemPoolCreate.FIND-FUNC">MemPoolCreate</a>(&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>(&ComQueue); <font color="#6920ac">/* create producer tasks */</font> <b>for</b> (i=0; i<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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>*)&ProdTbl_g[i][j]; Attr.pName = TaskName; ProdTbl_g[i][j].TaskID = <a href="task_Create1.FIND-FUNC">task_Create1</a>(Producer, &Attr, &Status, 1, (<i>crtx_Void_t</i>**)&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<<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>*)&ConsTbl_g[i]; Attr.pName = TaskName; ConsTbl_g[i].TaskID = <a href="task_Create1.FIND-FUNC">task_Create1</a>(Consumer, &Attr, &Status, 1, (<i>crtx_Void_t</i>**)&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<<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++) { ConsTblPrev_g[i] = ConsTbl_g[i]; } <b>for</b> (i=0; i<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<=<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<<a href="NUM_OF_CONSUMERS.FIND-DEF">NUM_OF_CONSUMERS</a>; i++) { ConsTblPrev_g[i] = ConsTbl_g[i]; } <b>for</b> (i=0; i<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <b>for</b> (j=0; j<<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<<a href="NUM_OF_GROUPS.FIND-DEF">NUM_OF_GROUPS</a>; i++) { <a href="MemPoolDelete.FIND-FUNC">MemPoolDelete</a>(&PoolTab[i]); } <font color="#6920ac">/* destroy communication queue */</font> <a href="ComQueueDelete.FIND-FUNC">ComQueueDelete</a>(&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 + -
显示快捷键?