summaryrefslogtreecommitdiff
path: root/nuttx/mm
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-13 00:34:43 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-13 00:34:43 +0000
commit5e4e1d2bd897b939ad4b6a7923febc467acfafdd (patch)
tree1d45be02759cda89e79034cdb84933a639fda8ff /nuttx/mm
parent10b060ab7da0989ec6f4fe79d31a0a3a390dfd80 (diff)
downloadpx4-nuttx-5e4e1d2bd897b939ad4b6a7923febc467acfafdd.tar.gz
px4-nuttx-5e4e1d2bd897b939ad4b6a7923febc467acfafdd.tar.bz2
px4-nuttx-5e4e1d2bd897b939ad4b6a7923febc467acfafdd.zip
Add mm/README.txt
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5140 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/mm')
-rw-r--r--nuttx/mm/README.txt71
-rw-r--r--nuttx/mm/mm_environment.h6
2 files changed, 76 insertions, 1 deletions
diff --git a/nuttx/mm/README.txt b/nuttx/mm/README.txt
new file mode 100644
index 000000000..b0b80deae
--- /dev/null
+++ b/nuttx/mm/README.txt
@@ -0,0 +1,71 @@
+mm/README.txt
+=============
+
+This directory contains the NuttX memory management logic. This include:
+
+1) The standard memory management functions as prototyped in stdlib.h as
+ specified in the Base definitions volume of IEEE Std 1003.1-2001. This
+ include the files:
+
+ o Standard Interfaces: mm_malloc.c, mm_calloc.c, mm_realloc.c,
+ mm_memalign.c, mm_free.c
+ o Less-Standard Interfaces: mm_zalloc.c, mm_mallinfo.c
+ o Internal Implementation: mm_initialize.c mm_sem.c mm_addfreechunk.c
+ mm_size2ndx.c mm_shrinkchunk.c, mm_internal.h
+ o Build and Configuration files: Kconfig, Makefile
+
+ Memory Models:
+
+ o Small Memory Model. If the MCU supports only 16-bit data addressing
+ then the small memory model is automatically used. The maximum size
+ of the heap is then 64K. The small memory model can also be forced
+ MCUs with wider addressing by defining CONFIG_SMALL_MEMORY in the
+ NuttX configuration file.
+ o Large Memory Model. Otherwise, the allocator uses a model that
+ supports a heap of up to 4G.
+
+ This implementation uses a variable length allocator with the following
+ properties:
+
+ o Overhead: Either 8- or 4-bytes per allocation for large and small
+ models, respectively.
+ o Alignment: All allocations are aligned to 8- or 4-bytes for large
+ and small models, respectively.
+
+2) Test Program. There is also a host-best test program that can be
+ used to verify the memory manager. These are the file:
+
+ Makefile.test, mm_test.c, and mm_environment.h.
+
+ Build instructions:
+
+ make -f Makefile.test
+
+ The executable will be built in the top-level directory as nuttx/mm_text
+ (or mm_test.exe under Cygwin).
+
+3) Granule Allocator. A non-standard granule allocator is also available
+ in this directory The granule allocator allocates memory in units
+ of a fixed sized block ("granule"). All memory is aligned to the size
+ of one granule.
+
+ The granule allocator interfaces are defined in nuttx/include/nuttx/gran.h.
+ The granule allocator consists of these files in this directory:
+
+ mm_gran.h, mm_granalloc.c, mm_grancritical.c, mm_granfree.c
+ mm_graninit.c
+
+ The granule allocator is not used anywhere within the base NuttX code
+ as of this writing. The intent of the granule allocator is to provide
+ a tool to support platform-specific management of aligned DMA memory.
+
+ NOTE: Because each granule is aligned to the granule size and each
+ allocations is in units of the granule size, selection of the granule
+ size is important: Larger granules will give better performance and
+ less overhead but more losses of memory due to alignment and quantization
+ waste.
+
+ The current implementation also restricts the maximum allocation size
+ to 32 granules. That restriction could be eliminated with some
+ additional coding effort, but currently requires larger granule
+ sizes for larger allocations.
diff --git a/nuttx/mm/mm_environment.h b/nuttx/mm/mm_environment.h
index 70e611116..d28fbf1d7 100644
--- a/nuttx/mm/mm_environment.h
+++ b/nuttx/mm/mm_environment.h
@@ -105,12 +105,16 @@ extern void mm_addregion(FAR void *heapstart, size_t heapsize);
/* Debug macros are always on */
-# define CONFIG_DEBUG
+# define CONFIG_DEBUG 1
# undef mdbg
# define mdbg(format, arg...) printf(format, ##arg)
# undef mvdg
# define mvdbg(format, arg...) printf(format, ##arg)
+# undef mlldbg
+# define mlldbg(format, arg...) printf(format, ##arg)
+# undef mllvdg
+# define mllvdbg(format, arg...) printf(format, ##arg)
#else
# define mm_errno get_errno()