311 lines
28 KiB
HTML
311 lines
28 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.9.1"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>ECAT_Slave_in_ПЧ2П_c402: Файл mailbox.c</title>
|
|
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../jquery.js"></script>
|
|
<script type="text/javascript" src="../../dynsections.js"></script>
|
|
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../resize.js"></script>
|
|
<script type="text/javascript" src="../../navtreedata.js"></script>
|
|
<script type="text/javascript" src="../../navtree.js"></script>
|
|
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="../../search/searchdata.js"></script>
|
|
<script type="text/javascript" src="../../search/search.js"></script>
|
|
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectlogo"><img alt="Logo" src="../../Diakont3.jpg"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">ECAT_Slave_in_ПЧ2П_c402
|
|
 <span id="projectnumber">0.8</span>
|
|
</div>
|
|
<div id="projectbrief">Реализация EtherCAT Slave для CM TMS320F28388D</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Создано системой Doxygen 1.9.1 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
var searchBox = new SearchBox("searchBox", "../../search",false,'Поиск','.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="../../menudata.js"></script>
|
|
<script type="text/javascript" src="../../menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(function() {
|
|
initMenu('../../',true,false,'search.php','Поиск');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('dc/d09/mailbox_8c.html','../../'); initResizable(); });
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="summary">
|
|
<a href="#define-members">Макросы</a> |
|
|
<a href="#func-members">Функции</a> |
|
|
<a href="#var-members">Переменные</a> </div>
|
|
<div class="headertitle">
|
|
<div class="title">Файл mailbox.c<div class="ingroups"><a class="el" href="../../d6/db6/group___mailbox.html">Mailbox Functions</a></div></div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>Implementation.
|
|
<a href="#details">Подробнее...</a></p>
|
|
<div class="textblock"><code>#include "<a class="el" href="../../de/d55/ecat__def_8h_source.html">ecat_def.h</a>"</code><br />
|
|
<code>#include "<a class="el" href="../../d9/d8b/ecatslv_8h_source.html">ecatslv.h</a>"</code><br />
|
|
<code>#include "<a class="el" href="../../d1/d84/mailbox_8h_source.html">mailbox.h</a>"</code><br />
|
|
<code>#include "<a class="el" href="../../d6/da5/ecatcoe_8h_source.html">ecatcoe.h</a>"</code><br />
|
|
<code>#include "<a class="el" href="../../db/d5c/ecatfoe_8h_source.html">ecatfoe.h</a>"</code><br />
|
|
</div><div class="textblock"><div class="dynheader">
|
|
Граф включаемых заголовочных файлов для mailbox.c:</div>
|
|
<div class="dyncontent">
|
|
<div class="center"><iframe scrolling="no" frameborder="0" src="../../d3/d76/mailbox_8c__incl.svg" width="504" height="495"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
</div>
|
|
<p><a href="../../dc/d09/mailbox_8c_source.html">См. исходные тексты.</a></p>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
|
|
Макросы</h2></td></tr>
|
|
<tr class="memitem:gada839ef1c5225425353879ecd1e0e519"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#gada839ef1c5225425353879ecd1e0e519">_MAILBOX_</a>   1</td></tr>
|
|
<tr class="separator:gada839ef1c5225425353879ecd1e0e519"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
|
Функции</h2></td></tr>
|
|
<tr class="memitem:gaef3e0f5065b884dd28560cc1da7a8347"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#ad8ce12d83f204245685f98caf9d03944">UINT8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#gaef3e0f5065b884dd28560cc1da7a8347">PutInMbxQueue</a> (<a class="el" href="../../d6/db6/group___mailbox.html#gacb02a223d7fd16ab2e16795a6b440347">TMBX</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pMbx, <a class="el" href="../../d9/dea/struct_t_m_b_x_q_u_e_u_e.html">TMBXQUEUE</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pQueue)</td></tr>
|
|
<tr class="separator:gaef3e0f5065b884dd28560cc1da7a8347"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga94506b28904f3499832b5db9ba3192ac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../d6/db6/group___mailbox.html#gacb02a223d7fd16ab2e16795a6b440347">TMBX</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga94506b28904f3499832b5db9ba3192ac">GetOutOfMbxQueue</a> (<a class="el" href="../../d9/dea/struct_t_m_b_x_q_u_e_u_e.html">TMBXQUEUE</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pQueue)</td></tr>
|
|
<tr class="separator:ga94506b28904f3499832b5db9ba3192ac"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga6b06545f8b5a846627db49ba48fb802d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga6b06545f8b5a846627db49ba48fb802d">MBX_Init</a> (void)</td></tr>
|
|
<tr class="memdesc:ga6b06545f8b5a846627db49ba48fb802d"><td class="mdescLeft"> </td><td class="mdescRight">This function intialize the Mailbox Interface. <a href="../../d6/db6/group___mailbox.html#ga6b06545f8b5a846627db49ba48fb802d">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga6b06545f8b5a846627db49ba48fb802d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga499ed60c2ca77715c1a51b56545ee7c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#ab1922c2d8643eb7da964d427604e992e">UINT16</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga499ed60c2ca77715c1a51b56545ee7c0">MBX_StartMailboxHandler</a> (void)</td></tr>
|
|
<tr class="memdesc:ga499ed60c2ca77715c1a51b56545ee7c0"><td class="mdescLeft"> </td><td class="mdescRight">This function includes the state transition from INIT to. <a href="../../d6/db6/group___mailbox.html#ga499ed60c2ca77715c1a51b56545ee7c0">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga499ed60c2ca77715c1a51b56545ee7c0"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga0b3e34d6ce0157ba8a80801a54025969"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga0b3e34d6ce0157ba8a80801a54025969">MBX_StopMailboxHandler</a> (void)</td></tr>
|
|
<tr class="memdesc:ga0b3e34d6ce0157ba8a80801a54025969"><td class="mdescLeft"> </td><td class="mdescRight">This function includes the state transition from. <a href="../../d6/db6/group___mailbox.html#ga0b3e34d6ce0157ba8a80801a54025969">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga0b3e34d6ce0157ba8a80801a54025969"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga1fdaabc619ee0bb189574d5c4f989d43"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#ad8ce12d83f204245685f98caf9d03944">UINT8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga1fdaabc619ee0bb189574d5c4f989d43">MailboxServiceInd</a> (<a class="el" href="../../d6/db6/group___mailbox.html#gacb02a223d7fd16ab2e16795a6b440347">TMBX</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pMbx)</td></tr>
|
|
<tr class="memdesc:ga1fdaabc619ee0bb189574d5c4f989d43"><td class="mdescLeft"> </td><td class="mdescRight">The function checks the mailbox header for the requested service and calls the. <a href="../../d6/db6/group___mailbox.html#ga1fdaabc619ee0bb189574d5c4f989d43">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga1fdaabc619ee0bb189574d5c4f989d43"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gaeaab6c1a95eb88d343bbeb04d268c78c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#gaeaab6c1a95eb88d343bbeb04d268c78c">MBX_MailboxWriteInd</a> (<a class="el" href="../../d6/db6/group___mailbox.html#gacb02a223d7fd16ab2e16795a6b440347">TMBX</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pMbx)</td></tr>
|
|
<tr class="memdesc:gaeaab6c1a95eb88d343bbeb04d268c78c"><td class="mdescLeft"> </td><td class="mdescRight">This function is called when the Master has written the Receive-Mailbox. <a href="../../d6/db6/group___mailbox.html#gaeaab6c1a95eb88d343bbeb04d268c78c">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:gaeaab6c1a95eb88d343bbeb04d268c78c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gac01d66e6d768b88214b6f886c61d6147"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#gac01d66e6d768b88214b6f886c61d6147">MBX_MailboxReadInd</a> (void)</td></tr>
|
|
<tr class="memdesc:gac01d66e6d768b88214b6f886c61d6147"><td class="mdescLeft"> </td><td class="mdescRight">This function is called when the Master has read the Send-Mailbox. <a href="../../d6/db6/group___mailbox.html#gac01d66e6d768b88214b6f886c61d6147">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:gac01d66e6d768b88214b6f886c61d6147"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:gac477386846f63a8300f9e6f411acadc9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#gac477386846f63a8300f9e6f411acadc9">MBX_MailboxRepeatReq</a> (void)</td></tr>
|
|
<tr class="memdesc:gac477386846f63a8300f9e6f411acadc9"><td class="mdescLeft"> </td><td class="mdescRight">This function is called if the Master has requested a resending of the last. <a href="../../d6/db6/group___mailbox.html#gac477386846f63a8300f9e6f411acadc9">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:gac477386846f63a8300f9e6f411acadc9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga9d512d71d2959d4780252dee25268def"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#ad8ce12d83f204245685f98caf9d03944">UINT8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga9d512d71d2959d4780252dee25268def">MBX_MailboxSendReq</a> (<a class="el" href="../../d6/db6/group___mailbox.html#gacb02a223d7fd16ab2e16795a6b440347">TMBX</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pMbx, <a class="el" href="../../de/d55/ecat__def_8h.html#ad8ce12d83f204245685f98caf9d03944">UINT8</a> flags)</td></tr>
|
|
<tr class="memdesc:ga9d512d71d2959d4780252dee25268def"><td class="mdescLeft"> </td><td class="mdescRight">This function puts a new Mailbox service in the Send Mailbox. <a href="../../d6/db6/group___mailbox.html#ga9d512d71d2959d4780252dee25268def">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga9d512d71d2959d4780252dee25268def"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga89b696c2f3db8369da2e59994a812f8d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga89b696c2f3db8369da2e59994a812f8d">MBX_CheckAndCopyMailbox</a> (void)</td></tr>
|
|
<tr class="memdesc:ga89b696c2f3db8369da2e59994a812f8d"><td class="mdescLeft"> </td><td class="mdescRight">This function is used to check if the received mailbox command can be processed. <a href="../../d6/db6/group___mailbox.html#ga89b696c2f3db8369da2e59994a812f8d">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga89b696c2f3db8369da2e59994a812f8d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga2c176cf26d7e69442a2df95299c48ab5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#ad8ce12d83f204245685f98caf9d03944">UINT8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga2c176cf26d7e69442a2df95299c48ab5">MBX_CopyToSendMailbox</a> (<a class="el" href="../../d6/db6/group___mailbox.html#gacb02a223d7fd16ab2e16795a6b440347">TMBX</a> <a class="el" href="../../de/d55/ecat__def_8h.html#aa0fddd0a6a2fbcad8e365fbb1e7a50fa">MBXMEM</a> *pMbx)</td></tr>
|
|
<tr class="memdesc:ga2c176cf26d7e69442a2df95299c48ab5"><td class="mdescLeft"> </td><td class="mdescRight">This function copies data to the Send Mailbox. <a href="../../d6/db6/group___mailbox.html#ga2c176cf26d7e69442a2df95299c48ab5">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga2c176cf26d7e69442a2df95299c48ab5"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga8beea7a777598316004ce74de245a97a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga8beea7a777598316004ce74de245a97a">MBX_Main</a> (void)</td></tr>
|
|
<tr class="memdesc:ga8beea7a777598316004ce74de245a97a"><td class="mdescLeft"> </td><td class="mdescRight">This function is called cyclically to check if a received Mailbox service was stored. <a href="../../d6/db6/group___mailbox.html#ga8beea7a777598316004ce74de245a97a">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga8beea7a777598316004ce74de245a97a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
|
|
Переменные</h2></td></tr>
|
|
<tr class="memitem:gaac0535944eb5099bf3d8850dabfe271a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#a72fdcd7d0b4e0ac18d761b192a439a2a">VARVOLATILE</a> <a class="el" href="../../de/d55/ecat__def_8h.html#ad8ce12d83f204245685f98caf9d03944">UINT8</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#gaac0535944eb5099bf3d8850dabfe271a">u8dummy</a></td></tr>
|
|
<tr class="separator:gaac0535944eb5099bf3d8850dabfe271a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
<tr class="memitem:ga44e92071609e4f3856bad12e5509ba95"><td class="memItemLeft" align="right" valign="top"><a class="el" href="../../de/d55/ecat__def_8h.html#ae4cc35dcc70810fa972cc8a5185a28fa">BOOL</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../d6/db6/group___mailbox.html#ga44e92071609e4f3856bad12e5509ba95">bNoMbxMemoryAvailable</a></td></tr>
|
|
<tr class="memdesc:ga44e92071609e4f3856bad12e5509ba95"><td class="mdescLeft"> </td><td class="mdescRight">Indicates if enough dynamic memory is available to handle at least one mailbox datagram. <a href="../../d6/db6/group___mailbox.html#ga44e92071609e4f3856bad12e5509ba95">Подробнее...</a><br /></td></tr>
|
|
<tr class="separator:ga44e92071609e4f3856bad12e5509ba95"><td class="memSeparator" colspan="2"> </td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 class="groupheader">Подробное описание</h2>
|
|
<div class="textblock"><p>Implementation. </p>
|
|
<dl class="section author"><dt>Автор</dt><dd><a href="#" onclick="location.href='mai'+'lto:'+'Eth'+'er'+'cat'+'SS'+'C@b'+'ec'+'kho'+'ff'+'.co'+'m'; return false;">Ether<span style="display: none;">.nosp@m.</span>catS<span style="display: none;">.nosp@m.</span>SC@be<span style="display: none;">.nosp@m.</span>ckho<span style="display: none;">.nosp@m.</span>ff.co<span style="display: none;">.nosp@m.</span>m</a></dd></dl>
|
|
<p><br />
|
|
Description of the mailbox buffer handling (MAILBOX_QUEUE = 0):<br />
|
|
There are two mailbox buffer for sending and receiving mailbox services.<br />
|
|
Normal operation:<br />
|
|
When starting the mailbox handler psWriteMbx contains mailbox buffer 1,<br />
|
|
psReadMbx, psRepeatMbx and psStoreMbx are 0.<br />
|
|
In this state a repeat request would be ignored because there was no service sent yet.<br />
|
|
When the first mailbox service is sent (in MBX_CopyToSendMailbox), psWriteMbx gets mailbox buffer 2<br />
|
|
and psReadMbx gets the sent mailbox buffer 1, psRepeatMbx and psStoreMbx are still 0.<br />
|
|
When the first mailbox service was read from the master, the sent mailbox buffer 1 is stored<br />
|
|
in psRepeatMbx (in MBX_MailboxReadInd).<br />
|
|
After that psReadMbx gets always the actual sent mailbox buffer, psWriteMbx is set to 0 (another<br />
|
|
received mailbox service from the master will not be handled until the sent mailbox service was read<br />
|
|
and MBX_MailboxReadInd was called).<br />
|
|
When the mailbox service is read, psWriteMbx gets the Buffer of psRepeatMbx and psRepeatMbx gets the <br />
|
|
buffer of psReadMbx.<br />
|
|
Repeat Request from the master:<br />
|
|
When a Repeat from the master is requested (MBX_MailboxRepeatReq), there are three different possibilities:<br />
|
|
</p><ol type="1">
|
|
<li>no mailbox service was sent since the mailbox handler was started (psRepeatMbx = 0): nothing to do<br />
|
|
</li>
|
|
<li>the acknowledge of the last sent mailbox service was received (in MBX_MailboxReadInd) (bSendMbxIsFull = 0):<br />
|
|
the last sent mailbox service (psRepeatMbx) will be sent again (in MBX_CopyToSendMailbox) and stored in psReadMbx,<br />
|
|
psRepeatMbx will be set to 0<br />
|
|
</li>
|
|
<li>the acknowledge of the last sent mailbox service was not received (psReadMbx and psRepeatMbx contain different buffers,<br />
|
|
psReadMbx is still in the mailbox (because MBX_MailboxReadInd is not called yet, bSendMbxIsFull = 1): <br />
|
|
psReadMbx will be deleted in the mailbox (call of DisableSyncManChannel and EnableSyncManChannel) and<br />
|
|
stored in psStoreMbx, psRepeatMbx will be sent again (in MBX_CopyToSendMailbox) and stored in psReadMbx,<br />
|
|
psRepeatMbx will be set to 0.<br />
|
|
When the repeated mailbox service was sent (call of MBX_MailboxReadInd), psReadMbx will be stored in psRepeatMbx<br />
|
|
and psStoreMbx will be sent (in MBX_CopyToSendMailbox) and stored in psReadMbx, psStoreMbx will be set to 0.<br />
|
|
</li>
|
|
</ol>
|
|
<p><br />
|
|
Description of the mailbox buffer handling (MAILBOX_QUEUE = 1):<br />
|
|
There are two mailbox buffer for sending and receiving mailbox services.<br />
|
|
Normal operation (psWriteMbx is only used for local storage):<br />
|
|
When starting the mailbox handler psReadMbx, psRepeatMbx and psStoreMbx are 0.<br />
|
|
In this state a repeat request would be ignored because there was no service sent yet.<br />
|
|
When a mailbox service is received from the master (in MBX_CheckAndCopyMailbox) a mailbox buffer<br />
|
|
will be get with APPL_AllocMailboxBuffer and the corresponding protocol service function will<br />
|
|
be called (in MBX_WriteMailboxInd). This buffer shall be used for the protocol service response.<br />
|
|
When the first mailbox service is sent (in MBX_CopyToSendMailbox), psReadMbx gets the sent mailbox buffer,<br />
|
|
psRepeatMbx and psStoreMbx are still 0.<br />
|
|
When the first mailbox service was read from the master, the sent mailbox buffer (psReadMbx) is stored<br />
|
|
in psRepeatMbx (in MBX_MailboxReadInd).<br />
|
|
After that psReadMbx gets always the actual sent mailbox buffer (in MBX_CopyToSendMailbox)<br />
|
|
When the mailbox service is read, psRepeatMbx is returned (with APPL_FreeMailboxBuffer) and psRepeatMbx gets the <br />
|
|
buffer of psReadMbx.<br />
|
|
Repeat Request from the master:<br />
|
|
When a Repeat from the master is requested (MBX_MailboxRepeatReq), there are three different possibilities:<br />
|
|
</p><ol type="1">
|
|
<li>no mailbox service was sent since the mailbox handler was started (psRepeatMbx = 0): nothing to do<br />
|
|
</li>
|
|
<li>the acknowledge of the last sent mailbox service was received (in MBX_MailboxReadInd) (bSendMbxIsFull = 0):<br />
|
|
the last sent mailbox service (psRepeatMbx) will be sent again (in MBX_CopyToSendMailbox) and stored in psReadMbx,<br />
|
|
psRepeatMbx will be set to 0<br />
|
|
</li>
|
|
<li>the acknowledge of the last sent mailbox service was not received (psReadMbx and psRepeatMbx contain different buffers,<br />
|
|
psReadMbx is still in the mailbox (because MBX_MailboxReadInd is not called yet, bSendMbxIsFull = 1): <br />
|
|
psReadMbx will be deleted in the mailbox (call of DisableSyncManChannel and EnableSyncManChannel) and<br />
|
|
stored in psStoreMbx, psRepeatMbx will be sent again (in MBX_CopyToSendMailbox) and stored in psReadMbx,<br />
|
|
psRepeatMbx will be set to 0.<br />
|
|
When the repeated mailbox service was sent (call of MBX_MailboxReadInd), psReadMbx will be stored in psRepeatMbx<br />
|
|
and psStoreMbx will be sent (in MBX_CopyToSendMailbox) and stored in psReadMbx, psStoreMbx will be set to 0.</li>
|
|
</ol>
|
|
<dl class="section version"><dt>Версия</dt><dd>5.13</dd></dl>
|
|
<p><br />
|
|
Changes to version V5.12:<br />
|
|
V5.13 EOE1: <br />
|
|
V5.13 MBX2: clear unused bytes before write mailbox response<br />
|
|
V5.13 MBX3: fix potential double free memory and lost of last read mailbox data<br />
|
|
V5.13 TEST3: 0x2040.4 send ARP on unsupported mailbox request<br />
|
|
<br />
|
|
Changes to version V5.11:<br />
|
|
V5.12 EOE5: free pending buffer in EoE_Init, EoE_Init is called on startup and PI transition<br />
|
|
V5.12 MBX1: use only 16Bit variables to write the last byte of the mailbox buffer in case of ESC_16BIT_Access,update clear message queue in case of stop mailbox handler<br />
|
|
V5.12 MBX2: do not set the pending indication in case of a EoE request, application triggered eoe datagram update<br />
|
|
V5.12 MBX3: handle incomplete mailbox communication<br />
|
|
V5.12 MBX4: in case of a disable mailbox queue and two consecutive foe uploads the mailbox receive handler is blocked<br />
|
|
<br />
|
|
Changes to version V5.10:<br />
|
|
V5.11 ECAT10: change PROTO handling to prevent compiler errors<br />
|
|
V5.11 ECAT7: add missing big endian swapping<br />
|
|
V5.11 HW1: "move hardware independent functions ""HW_DisableSyncManChannel()"", ""HW_EnableSyncManChannel()"", ""HW_GetSyncMan()"", ""HW_ResetALEventMask()"", ""HW_SetALEventMask()"" to ecatalv.c"<br />
|
|
V5.11 MBX2: "check in IP if enough dynamic memory is available to handle mailbox communication, if it is not the case the mbx error ""no memory"" is returned on any mbx request"<br />
|
|
V5.11 MBX3: set application triggered emergency and EoE data to pending if no mailbox queue is supported and another mailbox request is currently handled, Handle only one mailbox request at a time (in case that MAILBPX_QUEUE is disabled)<br />
|
|
V5.11 TEST4: add new mailbox test behavior (the master mailbox cnt shall be incremented by 1 and the slave mailbox cnt is alternating)<br />
|
|
<br />
|
|
Changes to version V5.01:<br />
|
|
V5.10 EOE3: Change local send frame pending indication variable to a global variable (it need to be resetted if the mailbox is stopped and a frame is pending)<br />
|
|
V5.10 ESC6: Update SyncManager register size (only for 8Bit ESC access)<br />
|
|
V5.10 MBX2: Allocate only memory for current configured mailbox size (max supported size was allocated before)<br />
|
|
<br />
|
|
Changes to version V5.0:<br />
|
|
V5.01 ESC2: Add missed value swapping<br />
|
|
V5.01 MBX2: Return an error if length specified in mailbnox header is too large.<br />
|
|
<br />
|
|
Changes to version V4.40:<br />
|
|
V5.0 ECAT3: Global dummy variables used for dummy ESC operations.<br />
|
|
V5.0 ESC1: ESC 32Bit Access added.<br />
|
|
V5.0 MBX2: Prevent double swapping (MBX repeat service) of MBX length field.<br />
|
|
V5.0 MBX4: Unlock SM buffer based on SM state.<br />
|
|
<br />
|
|
Changes to version V4.11:<br />
|
|
V4.40 MBX8: Handle pending mailbox data even if mailbox queue is enabled<br />
|
|
V4.40 MBX7: Reset SyncManger 1 Repeat Acknowledge bit if local variable is reset<br />
|
|
V4.40 EMCY2: Send queued emergency messages<br />
|
|
V4.40 BOOT2: Support only FoE in Bootstrap state<br />
|
|
V4.40 MBX5: Prevent multiple free buffer<br />
|
|
V4.40 MBX6: change return value if no mailbox buffer is available<br />
|
|
<br />
|
|
Changes to version V4.08:<br />
|
|
V4.11 MBX 1: free some dynamic memory to avoid memory leaks in the mailbox queue<br />
|
|
<br />
|
|
Changes to version V4.07:<br />
|
|
V4.10 MBX 1: check Mailbox message buffer and print emergency messages<br />
|
|
during state change Init -> PreOP<br />
|
|
<br />
|
|
Changes to version V4.07:<br />
|
|
V4.08 MBX 1: The mailbox queue was added (switch MAILBOX_QUEUE), if the<br />
|
|
mailbox should be handled in the ESC-Interrupt Service Routine<br />
|
|
the defines ENTER_MBX_CRITICAL and LEAVE_MBX_CRITICAL could be used<br />
|
|
to disable the interrupts or change the priority<br />
|
|
V4.08 AOE 1: AoE was added<br />
|
|
<br />
|
|
Changes to version V4.06:<br />
|
|
V4.07 ECAT 1: The sources for SPI and MCI were merged (in <a class="el" href="../../de/d55/ecat__def_8h.html">ecat_def.h</a><br />
|
|
set the switch MCI_HW to 1 when using the MCI,<br />
|
|
set the switch SPI_HW to 1 when using the SPI </p>
|
|
|
|
<p class="definition">См. определение в файле <a class="el" href="../../dc/d09/mailbox_8c_source.html">mailbox.c</a></p>
|
|
</div></div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="../../dc/d09/mailbox_8c.html">mailbox.c</a></li>
|
|
<li class="footer">Создано системой <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|