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 &lt; <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, &amp;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 &lt; <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, &amp;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>(&amp;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 &lt; <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 &lt; <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 &lt; <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 &lt; <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 &lt; <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 &lt; <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 &lt; <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 &lt; <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 + -
显示快捷键?