⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bbpc_mtx.c

📁 澳洲人写的Cortex,包括uC_IP协议栈
💻 C
📖 第 1 页 / 共 2 页
字号:
    <font color="#6920ac">/* completion message */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: Example: 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>());    <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(<a href="TICK_MS_TO_TICKS.FIND-DEF">TICK_MS_TO_TICKS</a>(1000));    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font><font color="blue">Error_Exc:</font>    <b>return</b>;}<font color="#6920ac">/* The Producer thread */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="Producer">Producer</a></font></b>(<i>crtx_Void_t</i>){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>crtx_Uint32_t</i> Item;    <i>crtx_Uint32_t</i> Napping;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <b>while</b>(1)    {        Item = <a href="rand.FIND-FUNC">rand</a>();        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: produced item %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>(), Item);        <a href="#Deposit">Deposit</a>(Item);        Napping = <a href="rand.FIND-FUNC">rand</a>()%(1000*<a href="PNAP.FIND-DEF">PNAP</a>);        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: deposited item %ld and napping for %ld msecs\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>(), Item, Napping);        <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(<a href="TICK_MS_TO_TICKS.FIND-DEF">TICK_MS_TO_TICKS</a>(Napping));    }    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* The Consumer thread */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="Consumer">Consumer</a></font></b>(<i>crtx_Void_t</i>){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>crtx_Uint32_t</i> Item;    <i>crtx_Uint32_t</i> Napping;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <b>while</b>(1)    {        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: wants to consume ...\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>());        Item = <a href="#Fetch">Fetch</a>();        Napping = <a href="rand.FIND-FUNC">rand</a>()%(1000*<a href="CNAP.FIND-DEF">CNAP</a>);        <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: fetched item %ld and napping for %ld msecs\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>(), Item, Napping);        <a href="task_Sleep.FIND-FUNC">task_Sleep</a>(<a href="TICK_MS_TO_TICKS.FIND-DEF">TICK_MS_TO_TICKS</a>(Napping));    }    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* The bounded buffer deposit routine */</font><font size="+1"><i>crtx_Void_t</i> <b><font color="azure1"><a name="Deposit">Deposit</a></font></b>(<i>crtx_Uint32_t</i> Item_a){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <font color="#6920ac">/* None */</font><font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="mutx_Lock.FIND-FUNC">mutx_Lock</a>(pMutex);          <font color="#6920ac">/* lock mutex */</font>    <b>while</b> (Count == <a href="BOUNDED_BUFFER_SIZE.FIND-DEF">BOUNDED_BUFFER_SIZE</a>)    {        <a href="mutx_Wait.FIND-FUNC">mutx_Wait</a>(pNotFull, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>);    }    Buffer[PutIn] = Item_a;     <font color="#6920ac">/* put item in buffer */</font>                                <font color="#6920ac">/* increment PutIn index */</font>    PutIn = (PutIn + 1) % <a href="BOUNDED_BUFFER_SIZE.FIND-DEF">BOUNDED_BUFFER_SIZE</a>;    Count++;                    <font color="#6920ac">/* increment items counter */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: Deposit: there are now %d item(s) in the buffer\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>(), Count);    <a href="mutx_Signal.FIND-FUNC">mutx_Signal</a>(pNotEmpty);     <font color="#6920ac">/* signal that buffer is not empty */</font>    <a href="mutx_Unlock.FIND-FUNC">mutx_Unlock</a>(pMutex);        <font color="#6920ac">/* release mutex */</font>    <b>return</b>;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}<font color="#6920ac">/* The bounded buffer fetch routine */</font><font size="+1"><i>crtx_Uint32_t</i> <b><font color="azure1"><a name="Fetch">Fetch</a></font></b>(<i>crtx_Void_t</i>){</font><font color="#6920ac">/********************* *  LOCAL VARIABLES  * *********************/</font>    <i>crtx_Uint32_t</i>   Item;<font color="#6920ac">/********************* *  PROCEDURE LOGIC  * *********************/</font>    <a href="mutx_Lock.FIND-FUNC">mutx_Lock</a>(pMutex);          <font color="#6920ac">/* lock mutex */</font>    <b>while</b> (Count == 0)    {        <a href="mutx_Wait.FIND-FUNC">mutx_Wait</a>(pNotEmpty, <a href="CRTX_NULL.FIND-DEF">CRTX_NULL</a>);    }    Item = Buffer[TakeOut];     <font color="#6920ac">/* take item form the buffer */</font>                                <font color="#6920ac">/* increment TakeOut index */</font>    TakeOut = (TakeOut + 1) % <a href="BOUNDED_BUFFER_SIZE.FIND-DEF">BOUNDED_BUFFER_SIZE</a>;    Count--;                    <font color="#6920ac">/* decriment item counter */</font>    <a href="printf.FIND-FUNC">printf</a>(<font color="DarkGreen">"%s[%d]: Fetch: there are now %d item(s) in the buffer\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>(), Count);    <a href="mutx_Signal.FIND-FUNC">mutx_Signal</a>(pNotFull);      <font color="#6920ac">/* signal that buffer is not full */</font>    <a href="mutx_Unlock.FIND-FUNC">mutx_Unlock</a>(pMutex);        <font color="#6920ac">/* release mutex */</font>    <b>return</b> Item;<font color="#6920ac">/************************ *  EXCEPTION HANDLING  * ************************/</font>    <font color="#6920ac">/* None */</font>}</pre></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -