亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? group__mailbox.html

?? yavrtos,一款用于廣泛用于AVR單片機的RTOS,文件里是這款OS的源碼
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>YAVRTOS: Mailboxes</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.4 --><div class="tabs">  <ul>    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>    <li><a href="modules.html"><span>Modules</span></a></li>    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>    <li><a href="files.html"><span>Files</span></a></li>    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>  </ul></div><h1>Mailboxes</h1><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">int16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#g9b7e62ecd1a61eda8cfa1229df0728ef">get_current_mbox_version</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the current version of a mailbox.  <a href="#g9b7e62ecd1a61eda8cfa1229df0728ef"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#g5dbb6937f6f93f6a1c14dec5b1c197c3">read_mbox_min_version</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox, int16_t *version)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait for a mailbox to reach at least a certain version, and then start reading from it.  <a href="#g5dbb6937f6f93f6a1c14dec5b1c197c3"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#g86030bb5345670ca374ddd20ef8e4ff6">read_mbox</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox, int16_t *version)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a mailbox.  <a href="#g86030bb5345670ca374ddd20ef8e4ff6"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmailbox__t.html">mailbox_t</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#g31b8ee5f4cd547c128143d99ea1c4a96">release_mbox_read</a> ()</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Function to call when finished reading from a mailbox.  <a href="#g31b8ee5f4cd547c128143d99ea1c4a96"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#gd4cde27abfbedc7c8e854e76d71612dd">initialise_mbox</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox, void *data, const int16_t version)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialise a mailbox - this <b>must</b> be called on every mailbox before it is used.  <a href="#gd4cde27abfbedc7c8e854e76d71612dd"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#gc75646248d03b1413198765b07ba54ad">write_mbox</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox, void *data, uint8_t wait_for_receivers, uint8_t wait_for_empty_nullify)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Write to a mailbox.  <a href="#gc75646248d03b1413198765b07ba54ad"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">int8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#g87f02ab5b46654ae26b06851b2390132">write_mbox_now</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox, void *data)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attempt to write to a mailbox.  <a href="#g87f02ab5b46654ae26b06851b2390132"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__mailbox.html#gf670250659f0942849aa85f0f94af9f0">wait_for_receiver</a> (<a class="el" href="structmailbox__t.html">mailbox_t</a> *mbox)</td></tr><tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait for a task to be suspended while trying to read from a mailbox.  <a href="#gf670250659f0942849aa85f0f94af9f0"></a><br></td></tr></table><hr><a name="_details"></a><h2>Detailed Description</h2>Mailboxes are used to pass information between tasks.<p>Mailboxes contain a pointer to the mailbox data, and a version number. Tasks can both read from and write to mailboxes. The rules governing mailboxes are <ul><li>A task can only read from one mailbox at a time - the task must finish reading a mailbox before it can start reading another one </li><li>A task cannot write to a mailbox while there are other tasks reading from it </li><li>A mailbox can contain only one "message" at a time</li></ul>Mailboxes <b>must</b> be initialised with <a class="el" href="group__mailbox.html#gd4cde27abfbedc7c8e854e76d71612dd" title="Initialise a mailbox - this must be called on every mailbox before it is used.">initialise_mbox()</a>. Tasks can write to mailboxes with <a class="el" href="group__mailbox.html#gc75646248d03b1413198765b07ba54ad" title="Write to a mailbox.">write_mbox()</a> or <a class="el" href="group__mailbox.html#g87f02ab5b46654ae26b06851b2390132" title="Attempt to write to a mailbox.">write_mbox_now()</a>. Tasks can read from mailboxes with <a class="el" href="group__mailbox.html#g86030bb5345670ca374ddd20ef8e4ff6" title="Read a mailbox.">read_mbox()</a> or <a class="el" href="group__mailbox.html#g5dbb6937f6f93f6a1c14dec5b1c197c3" title="Wait for a mailbox to reach at least a certain version, and then start reading from...">read_mbox_min_version()</a>, and <b>must</b> subsequently call <a class="el" href="group__mailbox.html#g31b8ee5f4cd547c128143d99ea1c4a96" title="Function to call when finished reading from a mailbox.">release_mbox_read()</a> when they are done reading from the mailbox. Other functions governing the use of mailboxes are <a class="el" href="group__mailbox.html#g9b7e62ecd1a61eda8cfa1229df0728ef" title="Get the current version of a mailbox.">get_current_mbox_version()</a> and <a class="el" href="group__mailbox.html#gf670250659f0942849aa85f0f94af9f0" title="Wait for a task to be suspended while trying to read from a mailbox.">wait_for_receiver()</a>.<p>Mailboxes can be synchronous or asynchronous. When task A writes to a mailbox, its version number is incremented. If task B has been waiting for that version of the mailbox, it is immediately marked as reading the mailbox, hence other tasks are prevented from writing to the mailbox until task B has finished reading from it. Of course, if there wasn't a task B waiting for the data, then a task C could over-write what task A wrote to the mailbox without any task ever seeing what task A wrote. To mitigate this problem, task A is able to request that a certain minimum number of tasks be waiting for the mailbox to be updated before the data is written to the mailbox - hence task A is guaranteed that the data it writes is seen.<p>It is the responsibility of the task that writes to the mailbox to allocate memory for the mailbox data. To prevent problems arising from the memory allocation going out of scope before all the reading tasks have finished reading the data, a writing task is able to request that all reading tasks finish reading before control is passed back to the writing task. Not only that, but the writing task is also able to request that the mailbox data be "nullified" (i.e. that a new version of the mailbox with a null data pointer be published) as soon as all the reading tasks have finished reading, thereby ensuring that no subsequent reading tasks will attempt to read the writing tasks' data.<p>See <a class="el" href="usage-mbox.html">using mailboxes</a> for information on how to use mailboxes <hr><h2>Function Documentation</h2><a class="anchor" name="g9b7e62ecd1a61eda8cfa1229df0728ef"></a><!-- doxytag: member="task.h::get_current_mbox_version" ref="g9b7e62ecd1a61eda8cfa1229df0728ef" args="(mailbox_t *mbox)" --><div class="memitem"><div class="memproto">      <table class="memname">        <tr>          <td class="memname">int16_t get_current_mbox_version           </td>          <td>(</td>          <td class="paramtype"><a class="el" href="structmailbox__t.html">mailbox_t</a> *&nbsp;</td>          <td class="paramname"> <em>mbox</em>          </td>          <td>&nbsp;)&nbsp;</td>          <td width="100%"></td>        </tr>      </table></div><div class="memdoc"><p>Get the current version of a mailbox. <p>This function can be called by an ISR, by any task, or even before the RTOS starts </div></div><p><a class="anchor" name="gd4cde27abfbedc7c8e854e76d71612dd"></a><!-- doxytag: member="task.h::initialise_mbox" ref="gd4cde27abfbedc7c8e854e76d71612dd" args="(mailbox_t *mbox, void *data, const int16_t version)" --><div class="memitem"><div class="memproto">      <table class="memname">        <tr>          <td class="memname">void initialise_mbox           </td>          <td>(</td>          <td class="paramtype"><a class="el" href="structmailbox__t.html">mailbox_t</a> *&nbsp;</td>          <td class="paramname"> <em>mbox</em>, </td>        </tr>        <tr>          <td class="paramkey"></td>          <td></td>          <td class="paramtype">void *&nbsp;</td>          <td class="paramname"> <em>data</em>, </td>        </tr>        <tr>          <td class="paramkey"></td>          <td></td>          <td class="paramtype">const int16_t&nbsp;</td>          <td class="paramname"> <em>version</em></td><td>&nbsp;</td>        </tr>        <tr>          <td></td>          <td>)</td>          <td></td><td></td><td width="100%"></td>        </tr>      </table></div><div class="memdoc"><p>Initialise a mailbox - this <b>must</b> be called on every mailbox before it is used. <p>The arguments are <ul><li><code>mbox</code> - the mailbox to initialise </li><li><code>data</code> - the pointer to the mailbox data. This is the value that will be returned by <a class="el" href="group__mailbox.html#g86030bb5345670ca374ddd20ef8e4ff6" title="Read a mailbox.">read_mbox()</a> and <a class="el" href="group__mailbox.html#g5dbb6937f6f93f6a1c14dec5b1c197c3" title="Wait for a mailbox to reach at least a certain version, and then start reading from...">read_mbox_min_version()</a>. It is acceptable to set this value to zero - though callers to <a class="el" href="group__mailbox.html#g86030bb5345670ca374ddd20ef8e4ff6" title="Read a mailbox.">read_mbox()</a> and <a class="el" href="group__mailbox.html#g5dbb6937f6f93f6a1c14dec5b1c197c3" title="Wait for a mailbox to reach at least a certain version, and then start reading from...">read_mbox_min_version()</a> would need to be aware that the return value could be zero. </li><li><code>version</code> - the initial version of the mailbox </li></ul></div></div><p><a class="anchor" name="g86030bb5345670ca374ddd20ef8e4ff6"></a><!-- doxytag: member="task.h::read_mbox" ref="g86030bb5345670ca374ddd20ef8e4ff6" args="(mailbox_t *mbox, int16_t *version)" --><div class="memitem"><div class="memproto">      <table class="memname">        <tr>          <td class="memname">void* read_mbox           </td>          <td>(</td>          <td class="paramtype"><a class="el" href="structmailbox__t.html">mailbox_t</a> *&nbsp;</td>          <td class="paramname"> <em>mbox</em>, </td>        </tr>        <tr>          <td class="paramkey"></td>          <td></td>          <td class="paramtype">int16_t *&nbsp;</td>          <td class="paramname"> <em>version</em></td><td>&nbsp;</td>        </tr>        <tr>          <td></td>          <td>)</td>          <td></td><td></td><td width="100%"></td>        </tr>      </table></div><div class="memdoc"><p>Read a mailbox. <p>This function reads a mailbox regardless of the version of the mailbox.<p><dl class="attention" compact><dt><b>Attention:</b></dt><dd>It is <b>vital</b> that <a class="el" href="group__mailbox.html#g31b8ee5f4cd547c128143d99ea1c4a96" title="Function to call when finished reading from a mailbox.">release_mbox_read()</a> be called to release the mailbox for other tasks to write to it when the calling task has finished reading the mailbox data</dd></dl>The arguments are <ul><li><code>mbox</code> - the mailbox to read </li><li><code>version</code> - if not null, the version of the mailbox will be written to this address</li></ul>The return value is a pointer to the mailbox data. Note that a zero return value does not mean that the mailbox read failed - it means that the mailbox was empty - and hence <a class="el" href="group__mailbox.html#g31b8ee5f4cd547c128143d99ea1c4a96" title="Function to call when finished reading from a mailbox.">release_mbox_read()</a> must still be called.<p>Since this function can cause a suspension (i.e. if the mailbox hasn't reached the specified version), it can only be called from a task with a non-zero priority </div></div><p><a class="anchor" name="g5dbb6937f6f93f6a1c14dec5b1c197c3"></a><!-- doxytag: member="task.h::read_mbox_min_version" ref="g5dbb6937f6f93f6a1c14dec5b1c197c3" args="(mailbox_t *mbox, int16_t *version)" --><div class="memitem"><div class="memproto">      <table class="memname">        <tr>          <td class="memname">void* read_mbox_min_version           </td>          <td>(</td>          <td class="paramtype"><a class="el" href="structmailbox__t.html">mailbox_t</a> *&nbsp;</td>          <td class="paramname"> <em>mbox</em>, </td>        </tr>        <tr>          <td class="paramkey"></td>          <td></td>          <td class="paramtype">int16_t *&nbsp;</td>          <td class="paramname"> <em>version</em></td><td>&nbsp;</td>        </tr>        <tr>          <td></td>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区黄| 亚洲综合av网| 一个色妞综合视频在线观看| 日本在线不卡一区| 成人免费视频一区| 91精品视频网| 一区二区三区免费看视频| 国内不卡的二区三区中文字幕| 欧美中文字幕亚洲一区二区va在线 | 久久99精品久久久| 色琪琪一区二区三区亚洲区| 日本一区二区三区视频视频| 免费人成黄页网站在线一区二区 | 国产一区二区在线观看视频| 欧美中文字幕一二三区视频| 日韩码欧中文字| 国产黄色精品视频| 精品国产1区二区| 久久超碰97中文字幕| 欧美性大战久久久久久久蜜臀| 亚洲欧美日韩国产中文在线| 成人性生交大片免费看在线播放| 久久理论电影网| 国内精品在线播放| 久久一二三国产| 免费观看久久久4p| 日韩视频中午一区| 日本系列欧美系列| 欧美精品v国产精品v日韩精品| 亚洲影院久久精品| 欧美三级在线视频| 一卡二卡欧美日韩| 欧美日韩高清一区二区| 亚洲成av人综合在线观看| 在线视频观看一区| 视频在线在亚洲| 日韩午夜在线观看视频| 老汉av免费一区二区三区| 精品国产三级电影在线观看| 精品一区二区免费| 久久久五月婷婷| 福利一区二区在线| 亚洲欧美日韩综合aⅴ视频| 色婷婷综合久色| 亚洲成a人片在线观看中文| 4438亚洲最大| 国内精品伊人久久久久av一坑| 国产日产欧美一区二区视频| 成年人网站91| 一区二区三区**美女毛片| 欧美久久婷婷综合色| 久久精品国产精品亚洲精品| 久久久亚洲精品一区二区三区| 成人午夜私人影院| 一区二区三区高清不卡| 制服丝袜日韩国产| 国产一区二区伦理片| 国产精品久久看| 欧美三级韩国三级日本三斤 | 亚洲另类中文字| 欧美精品丝袜久久久中文字幕| 久久精品国产99| 国产精品天美传媒| 欧美精品v日韩精品v韩国精品v| 国产麻豆成人传媒免费观看| 亚洲欧美在线视频观看| 欧美日本在线播放| 国产sm精品调教视频网站| 亚洲午夜久久久久久久久电影网 | 欧美日韩不卡一区二区| 九一久久久久久| 亚洲精品成人在线| 久久嫩草精品久久久久| 欧美性大战xxxxx久久久| 狠狠色丁香久久婷婷综| 亚洲美女免费在线| 精品少妇一区二区三区免费观看 | 欧美精品日韩综合在线| 大桥未久av一区二区三区中文| 日欧美一区二区| 国产精品久久久久久久久免费相片 | 丝袜诱惑制服诱惑色一区在线观看| 久久婷婷成人综合色| 欧美在线视频不卡| eeuss国产一区二区三区| 日本中文字幕一区二区有限公司| 中文字幕综合网| 久久久久久久久久看片| 欧美三级日本三级少妇99| 99精品国产91久久久久久| 日本不卡的三区四区五区| 亚洲欧美视频在线观看视频| 国产欧美一区二区精品性| 欧美精品tushy高清| 欧美亚洲自拍偷拍| a亚洲天堂av| 国产成人午夜精品影院观看视频| 日本视频在线一区| 亚洲夂夂婷婷色拍ww47| 亚洲福利视频三区| 最新国产精品久久精品| 国产视频一区二区在线| 亚洲精品在线观看视频| 91精品国产全国免费观看| 欧美日韩中字一区| 91成人看片片| 91高清视频免费看| 欧美性受极品xxxx喷水| 91丨九色丨国产丨porny| 成人黄色片在线观看| 成人性生交大合| 成人一级片在线观看| 成人禁用看黄a在线| 高清shemale亚洲人妖| 成人h版在线观看| 91女厕偷拍女厕偷拍高清| 99精品视频在线播放观看| 91视频国产观看| 色综合一个色综合| 欧美在线视频你懂得| 欧美日韩中文精品| 制服丝袜激情欧洲亚洲| 欧美tk—视频vk| 欧美经典一区二区| 欧美国产1区2区| 一区二区三区中文在线| 午夜电影一区二区三区| 免播放器亚洲一区| 国产精品自拍网站| 色嗨嗨av一区二区三区| 欧美日韩一卡二卡| 欧美mv和日韩mv国产网站| 国产拍揄自揄精品视频麻豆| 国产精品国产三级国产aⅴ入口| 亚洲欧美日韩小说| 日韩av一区二区三区| 精油按摩中文字幕久久| 成人黄色小视频在线观看| 欧美在线观看视频在线| 欧美成人高清电影在线| 国产精品久久久久久久浪潮网站| 亚洲欧洲三级电影| 视频一区二区三区在线| 国产麻豆欧美日韩一区| 91猫先生在线| 日韩欧美一区二区三区在线| 欧美激情中文字幕| 亚洲高清在线精品| 国产成人av电影在线播放| 在线免费一区三区| 久久久99久久| 亚洲电影一级片| 国产成人亚洲综合a∨猫咪| 欧美性猛交xxxxxxxx| 久久亚洲一级片| 一区二区三区四区高清精品免费观看| 老司机精品视频线观看86| 色狠狠综合天天综合综合| 精品美女一区二区| 亚洲高清在线精品| 成人av第一页| 欧美mv日韩mv亚洲| 午夜私人影院久久久久| 成人午夜激情影院| 日韩欧美一级在线播放| 亚洲久草在线视频| 国产精品一级片| 欧美精品久久久久久久多人混战| 日韩高清在线一区| 精品日韩在线一区| 欧美国产激情一区二区三区蜜月| 亚洲一区在线观看网站| 国产成人在线电影| 日韩一区二区三区精品视频| 亚洲自拍偷拍九九九| 国产成人精品aa毛片| 欧美一区二区三区思思人| 亚洲欧美一区二区三区国产精品 | 国产乱码精品一区二区三区五月婷| 在线免费观看不卡av| 国产精品久久久久久户外露出| 久久精品国产99国产| 91精品国产福利在线观看| 亚洲三级视频在线观看| 成人的网站免费观看| 亚洲国产精品精华液ab| 国内精品自线一区二区三区视频| 欧美一级一区二区| 偷拍与自拍一区| 欧美区一区二区三区| 亚洲综合成人在线视频| 欧美在线观看一二区| 一区二区三区日韩在线观看| 91一区二区三区在线观看| 国产精品丝袜黑色高跟| 成人午夜私人影院| 国产精品亲子乱子伦xxxx裸| 北岛玲一区二区三区四区| 国产亚洲一本大道中文在线| 国产一区二区久久|