embeddedsw/ThirdParty/sw_services/lwip140/doc/html/mem_8c.html
Jagannadha Sutradharudu Teki 2c8f92039d embeddesw: Add initial code support
Added initial support Xilinx Embedded Software.

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
2014-06-24 16:45:01 +05:30

299 lines
15 KiB
HTML
Executable file

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>2014.1_doc: U:/hsm_publish/HEAD/data/embeddedsw/ThirdParty/sw_services/lwip140_v2_0/src/lwip-1.4.0/src/core/mem.c File Reference</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.4.5 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
</ul></div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>File&nbsp;Members</span></a></li>
</ul></div>
<div class="nav">
<a class="el" href="dir_U_3A_2F.html">U:</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2F.html">hsm_publish</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2F.html">HEAD</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2F.html">data</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2F.html">embeddedsw</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2F.html">ThirdParty</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2Fsw_5Fservices_2F.html">sw_services</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2Fsw_5Fservices_2Flwip140_5Fv2_5F0_2F.html">lwip140_v2_0</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2Fsw_5Fservices_2Flwip140_5Fv2_5F0_2Fsrc_2F.html">src</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2Fsw_5Fservices_2Flwip140_5Fv2_5F0_2Fsrc_2Flwip_2D1_2E4_2E0_2F.html">lwip-1.4.0</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2Fsw_5Fservices_2Flwip140_5Fv2_5F0_2Fsrc_2Flwip_2D1_2E4_2E0_2Fsrc_2F.html">src</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_U_3A_2Fhsm_5Fpublish_2FHEAD_2Fdata_2Fembeddedsw_2FThirdParty_2Fsw_5Fservices_2Flwip140_5Fv2_5F0_2Fsrc_2Flwip_2D1_2E4_2E0_2Fsrc_2Fcore_2F.html">core</a></div>
<h1>mem.c File Reference</h1><code>#include &quot;<a class="el" href="opt_8h.html">lwip/opt.h</a>&quot;</code><br>
<code>#include &quot;lwip/def.h&quot;</code><br>
<code>#include &quot;lwip/mem.h&quot;</code><br>
<code>#include &quot;lwip/sys.h&quot;</code><br>
<code>#include &quot;lwip/stats.h&quot;</code><br>
<code>#include &quot;lwip/err.h&quot;</code><br>
<code>#include &lt;string.h&gt;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmem.html">mem</a></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#35eea272cb036ddc349d4539895078ba">MIN_SIZE</a>&nbsp;&nbsp;&nbsp;12</td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#bef8f03703a470a2aa9588bbeb97e9b6">mem_init</a> (void)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#9cbfbd803a741e8b3174a8f2f7c876d2">mem_free</a> (void *rmem)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#7043429662609656d8dea392e37c2ca4">mem_trim</a> (void *rmem, mem_size_t newsize)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#87fcc44de50525bceed1be99710ef437">mem_malloc</a> (mem_size_t size)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#0d304c8681488594c17b3992de34c63f">mem_calloc</a> (mem_size_t count, mem_size_t size)</td></tr>
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">u8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="mem_8c.html#70289966e22b0a2abfedc4845a0576fe">ram_heap</a> [MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT]</td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Dynamic memory manager<p>
This is a lightweight replacement for the standard C library malloc().<p>
If you want to use the standard C library malloc() instead, define MEM_LIBC_MALLOC to 1 in your lwipopts.h<p>
To let <a class="el" href="mem_8c.html#87fcc44de50525bceed1be99710ef437">mem_malloc()</a> use pools (prevents fragmentation and is much faster than a heap but might waste some memory), define MEM_USE_POOLS to 1, define MEM_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list of pools like this (more pools can be added between _START and _END):<p>
Define three pools with sizes 256, 512, and 1512 bytes LWIP_MALLOC_MEMPOOL_START LWIP_MALLOC_MEMPOOL(20, 256) LWIP_MALLOC_MEMPOOL(10, 512) LWIP_MALLOC_MEMPOOL(5, 1512) LWIP_MALLOC_MEMPOOL_END <hr><h2>Define Documentation</h2>
<a class="anchor" name="35eea272cb036ddc349d4539895078ba"></a><!-- doxytag: member="mem.c::MIN_SIZE" ref="35eea272cb036ddc349d4539895078ba" args="" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">#define MIN_SIZE&nbsp;&nbsp;&nbsp;12 </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
All allocated blocks will be MIN_SIZE bytes big, at least! MIN_SIZE can be overridden to suit your needs. Smaller values save space, larger values could prevent too small blocks to fragment the RAM too much. </td>
</tr>
</table>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="0d304c8681488594c17b3992de34c63f"></a><!-- doxytag: member="mem.c::mem_calloc" ref="0d304c8681488594c17b3992de34c63f" args="(mem_size_t count, mem_size_t size)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void* mem_calloc </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">mem_size_t&nbsp;</td>
<td class="mdname" nowrap> <em>count</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>mem_size_t&nbsp;</td>
<td class="mdname" nowrap> <em>size</em></td>
</tr>
<tr>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Contiguously allocates enough space for count objects that are size bytes of memory each and returns a pointer to the allocated memory.<p>
The allocated memory is filled with bytes of value zero.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td>number of objects to allocate </td></tr>
<tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>size of the objects to allocate </td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>pointer to allocated memory / NULL pointer if there is an error </dd></dl>
</td>
</tr>
</table>
<a class="anchor" name="9cbfbd803a741e8b3174a8f2f7c876d2"></a><!-- doxytag: member="mem.c::mem_free" ref="9cbfbd803a741e8b3174a8f2f7c876d2" args="(void *rmem)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void mem_free </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">void *&nbsp;</td>
<td class="mdname1" valign="top" nowrap> <em>rmem</em> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Put a struct mem back on the heap<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>rmem</em>&nbsp;</td><td>is the data portion of a struct mem as returned by a previous call to <a class="el" href="mem_8c.html#87fcc44de50525bceed1be99710ef437">mem_malloc()</a> </td></tr>
</table>
</dl>
</td>
</tr>
</table>
<a class="anchor" name="bef8f03703a470a2aa9588bbeb97e9b6"></a><!-- doxytag: member="mem.c::mem_init" ref="bef8f03703a470a2aa9588bbeb97e9b6" args="(void)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void mem_init </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">void&nbsp;</td>
<td class="mdname1" valign="top" nowrap> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Zero the heap and initialize start, end and lowest-free </td>
</tr>
</table>
<a class="anchor" name="87fcc44de50525bceed1be99710ef437"></a><!-- doxytag: member="mem.c::mem_malloc" ref="87fcc44de50525bceed1be99710ef437" args="(mem_size_t size)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void* mem_malloc </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">mem_size_t&nbsp;</td>
<td class="mdname1" valign="top" nowrap> <em>size</em> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
<td class="md" nowrap></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Adam's <a class="el" href="mem_8c.html#87fcc44de50525bceed1be99710ef437">mem_malloc()</a> plus solution for bug #17922 Allocate a block of memory with a minimum of 'size' bytes.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>is the minimum size of the requested block in bytes. </td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>pointer to allocated memory or NULL if no free memory was found.</dd></dl>
Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). </td>
</tr>
</table>
<a class="anchor" name="7043429662609656d8dea392e37c2ca4"></a><!-- doxytag: member="mem.c::mem_trim" ref="7043429662609656d8dea392e37c2ca4" args="(void *rmem, mem_size_t newsize)" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">void* mem_trim </td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">void *&nbsp;</td>
<td class="mdname" nowrap> <em>rmem</em>, </td>
</tr>
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
<td class="md" nowrap>mem_size_t&nbsp;</td>
<td class="mdname" nowrap> <em>newsize</em></td>
</tr>
<tr>
<td class="md"></td>
<td class="md">)&nbsp;</td>
<td class="md" colspan="2"></td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Shrink memory returned by <a class="el" href="mem_8c.html#87fcc44de50525bceed1be99710ef437">mem_malloc()</a>.<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>rmem</em>&nbsp;</td><td>pointer to memory allocated by mem_malloc the is to be shrinked </td></tr>
<tr><td valign="top"></td><td valign="top"><em>newsize</em>&nbsp;</td><td>required size after shrinking (needs to be smaller than or equal to the previous size) </td></tr>
</table>
</dl>
<dl compact><dt><b>Returns:</b></dt><dd>for compatibility reasons: is always == rmem, at the moment or NULL if newsize is &gt; old size, in which case rmem is NOT touched or freed! </dd></dl>
</td>
</tr>
</table>
<hr><h2>Variable Documentation</h2>
<a class="anchor" name="70289966e22b0a2abfedc4845a0576fe"></a><!-- doxytag: member="mem.c::ram_heap" ref="70289966e22b0a2abfedc4845a0576fe" args="[MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT]" --><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
<td class="mdRow">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top">u8_t <a class="el" href="mem_8c.html#70289966e22b0a2abfedc4845a0576fe">ram_heap</a>[MEM_SIZE_ALIGNED+(2 *SIZEOF_STRUCT_MEM)+MEM_ALIGNMENT] </td>
</tr>
</table>
</td>
</tr>
</table>
<table cellspacing="5" cellpadding="0" border="0">
<tr>
<td>
&nbsp;
</td>
<td>
<p>
the heap. we need one struct mem at the end and some room for alignment </td>
</tr>
</table>
<hr size="1"><address style="align: right;"><small>Generated on Fri Feb 14 12:33:21 2014 for 2014.1_doc by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.5 </small></address>
</body>
</html>