rdwr.c
来自「澳洲人写的Cortex,包括uC_IP协议栈」· C语言 代码 · 共 320 行 · 第 1/2 页
C
320 行
<font color="#6920ac">/* a writer goes to writer a bit */</font> DeltTime = <a href="rand.FIND-FUNC">rand</a>()%(<a href="#RDWR_WRITE_TIME">RDWR_WRITE_TIME</a>); <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(<a href="TICK_MS_TO_TICKS.FIND-DEF">TICK_MS_TO_TICKS</a>(DeltTime)); rdwr_WInfo[WriterNum_a].AccessTime += DeltTime; <font color="#6920ac">/* a writer signales to other writers that they can write new data */</font> <a href="mutx_Signal.FIND-FUNC">mutx_Signal</a>(pRdwrCondition); <a href="mutx_Unlock.FIND-FUNC">mutx_Unlock</a>(pRdwrMutex); }}<font color="#6920ac">/* main function */</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> i; <i>task_Attr_t</i> TAttr; <i>tick_Time_t</i> SysTime; <i>crtx_Char_t</i> str[20];<font color="#6920ac">/********************* * PROCEDURE LOGIC * *********************/</font> <font color="#6920ac">/* call the platform init function */</font> <a href="pltf_Init.FIND-FUNC">pltf_Init</a>(ArgC_a, pArgV_a, pEnvV_a); <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">"%d readers and %d writers of data\n"</font>, <a href="#RDWR_READERS_NUMBER">RDWR_READERS_NUMBER</a>, <a href="#RDWR_WRITERS_NUMBER">RDWR_WRITERS_NUMBER</a>); <a href="memset.FIND-FUNC">memset</a>(rdwr_RInfo, 0, <i>sizeof</i>(rdwr_RInfo)); <a href="memset.FIND-FUNC">memset</a>(rdwr_WInfo, 0, <i>sizeof</i>(rdwr_WInfo)); ReadersCounter = 0; <font color="#6920ac">/* create a mutex control block */</font> pRdwrMutex = <a href="mutx_Create.FIND-FUNC">mutx_Create</a>(<a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>); <b>if</b> (pRdwrMutex == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create mutex pRdwrMutex failed\n"</font>); <a href="exit.FIND-FUNC">exit</a>(0); } <font color="#6920ac">/* create a condition for the mutex pRdwrMutex */</font> pRdwrCondition = <a href="mutx_CondCreate.FIND-FUNC">mutx_CondCreate</a>(<a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>, pRdwrMutex, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>); <b>if</b> (pRdwrCondition == <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create condition pRdwrCondition "</font> <font color="DarkGreen">"for the mutex pRdwrMutex failed\n"</font>); <a href="exit.FIND-FUNC">exit</a>(0); } <font color="#6920ac">/* create tasks for readers */</font> <b>for</b> (i = 0; i < <a href="#RDWR_READERS_NUMBER">RDWR_READERS_NUMBER</a>; i++) { TAttr = task_AttrDefault_g; <b>if</b> (<a href="task_Create1.FIND-FUNC">task_Create1</a>((<i>task_Entry1_t</i>)rdwr_Reader, &TAttr, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>, i, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) == <a href="TASK_ILLEGAL_ID.FIND-DEF">TASK_ILLEGAL_ID</a>) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create task for the reader %d failed\n"</font>, i + 1); <a href="exit.FIND-FUNC">exit</a>(0); } } <font color="#6920ac">/* create tasks for writers */</font> <b>for</b> (i = 0; i < <a href="#RDWR_WRITERS_NUMBER">RDWR_WRITERS_NUMBER</a>; i++) { TAttr = task_AttrDefault_g; <b>if</b> (<a href="task_Create1.FIND-FUNC">task_Create1</a>((<i>task_Entry1_t</i>)rdwr_Writer, &TAttr, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>, i, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>) == <a href="TASK_ILLEGAL_ID.FIND-DEF">TASK_ILLEGAL_ID</a>) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"Create task for the writer %d failed\n"</font>, i + 1); <a href="exit.FIND-FUNC">exit</a>(0); } } <b>while</b> ( 1 ) { <font color="#6920ac">/* print reader/writer statistics */</font> <a href="tick_GetSystemTime.FIND-FUNC">tick_GetSystemTime</a>(&SysTime); <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"At %02ld:%02ld:%02ld "</font>, SysTime.tv_sec/3600, (SysTime.tv_sec%3600)/60, SysTime.tv_sec%60); <b>for</b> (i = 0; i < <a href="#RDWR_READERS_NUMBER">RDWR_READERS_NUMBER</a>; i++) { <a href="sprintf.FIND-FUNC">sprintf</a>(str,<font color="DarkGreen">"reader#%d"</font>, i + 1); <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10s"</font>, str); } <b>for</b> (i = 0; i < <a href="#RDWR_WRITERS_NUMBER">RDWR_WRITERS_NUMBER</a>; i++) { <a href="sprintf.FIND-FUNC">sprintf</a>(str,<font color="DarkGreen">"writer#%d"</font>, i + 1); <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10s"</font>, str); } <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n"</font>); <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">" %-12s "</font>,<font color="DarkGreen">"Sleep(ms)"</font>); <b>for</b> (i = 0; i < <a href="#RDWR_READERS_NUMBER">RDWR_READERS_NUMBER</a>; i++) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10ld"</font>, rdwr_RInfo[ i ].SleepTime); } <b>for</b> (i = 0; i < <a href="#RDWR_WRITERS_NUMBER">RDWR_WRITERS_NUMBER</a>; i++) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10ld"</font>, rdwr_WInfo[ i ].SleepTime); } <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n"</font>); <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">" %-12s "</font>,<font color="DarkGreen">"Access(ms)"</font>); <b>for</b> (i = 0; i < <a href="#RDWR_READERS_NUMBER">RDWR_READERS_NUMBER</a>; i++) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10ld"</font>, rdwr_RInfo[ i ].AccessTime); } <b>for</b> (i = 0; i < <a href="#RDWR_WRITERS_NUMBER">RDWR_WRITERS_NUMBER</a>; i++) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10ld"</font>, rdwr_WInfo[ i ].AccessTime); } <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n"</font>); <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">" %-12s "</font>,<font color="DarkGreen">"Cycles"</font>); <b>for</b> (i = 0; i < <a href="#RDWR_READERS_NUMBER">RDWR_READERS_NUMBER</a>; i++) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10ld"</font>, rdwr_RInfo[ i ].Cycles); } <b>for</b> (i = 0; i < <a href="#RDWR_WRITERS_NUMBER">RDWR_WRITERS_NUMBER</a>; i++) { <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%10ld"</font>, rdwr_WInfo[ i ].Cycles); } <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"\n"</font>); <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(<a href="#RDWR_PRINT_TIME">RDWR_PRINT_TIME</a>); }}</pre></BODY></HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?