main.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 629 行 · 第 1/3 页
C
629 行
<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> 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:Mutex 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: Mutex 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 + -
显示快捷键?