?? main.c
字號:
<HTML><HEAD><TITLE>/home/asysweb/public_html/cortex/tests/mtx_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="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><b><font color='DarkGreen'>#include</font></b> <a href="mtx_test.h.FIND-INC"><font color="blue">"mtx_test.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->WaitCntr++; <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(0); } <font color="#6920ac">/* initialise message */</font> pContext->MsgAlloc++; <font color="#6920ac">/* message has been allocated */</font> <a href="MSG_POOL.FIND-DEF">MSG_POOL</a>(pMsg) = &<a href="MY_POOL.FIND-DEF">MY_POOL</a>(); pMsg->Key = (<i>rlst_Key_t</i>)pMsg>>2 & 0xFF; pMsg->GroupID = <a href="MY_GROUP.FIND-DEF">MY_GROUP</a>(); pMsg->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->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->WaitCntr++; <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(0); } <font color="#6920ac">/* complete message initialisation */</font> pContext->MsgGet++; <font color="#6920ac">/* message has been received */</font> pMsg->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->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>(&SysTime); Throughput = ComQueue.PutCntr - PutCntrPrev; <b>if</b> (Throughput > MaxThroughput) MaxThroughput = Throughput; <b>if</b> (Throughput < 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<<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++) { <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, &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<<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, &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, &IdleTask, <a href="CRTX_FALSE.FIND-DEF">CRTX_FALSE</a>); TotalCycles += IdleTask.Ticks;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -