...
The approximate memory heap size may be determined according to the following expressions:
Code Block |
---|
nbr buf per interface = nbr small Tx buf +
nbr large Tx buf +
nbr large Rx buf
nbr net buf per interface = nbr buf per interface
nbr objects = nbr buf per interface +
nbr net buf per interface +
nbr Rx descriptors +
nbr Tx descriptors +
1 Ethernet data area +
1 Device driver data area
interface mem = (nbr small Tx buf * 60) +
(nbr large Tx buf * 1518) +
(nbr large Rx buf * 1518) +
(nbr Rx descriptors * 8) +
(nbr Tx descriptors * 8) +
(Ethernet IF data area * 7) +
(Ethernet Drv data area * 108) +
(nbr objects * 3)
total mem required = nbr interfaces * interface mem
|
Example
With the following configuration, the memory heap required is:
- 10 small transmit buffers
- 10 large transmit buffers
- 10 large receive buffers
- 6 receive descriptors
- 20 transmit descriptors
- Ethernet interface (interface + device driver data area required)
Code Block | ||
---|---|---|
| ||
nbr buf per interface = 10 + 10 + 10 = 30 nbr net buf per interface = nbr buf per interface = 30 nbr objects = (30 + 30 + 6 + 20 + 1 + 1) = 88 interface mem = (10 * 60) + (10 * 1518) + (10 * 1518) + ( 6 * 8) + (20 * 8) + ( 1 * 7) + ( 1 * 108) + (88 * 3) = 31,547 bytes total mem required > 31,547 ( + localhost memory, if enabled) |
The localhost interface, when enabled, requires a similar amount of memory except that it does not require Rx and Tx descriptors, an IF data area, or a device driver data area.
The value determined by these expressions is only an estimate. In some cases, it may be possible to reduce the size of the µC/LIB memory heap by inspecting µC/LIB (see see libdoc) after all interfaces have been successfully initialized and any additional application allocations (if applicable) have been completed.