summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--docs/library/esp.rst40
1 files changed, 40 insertions, 0 deletions
diff --git a/docs/library/esp.rst b/docs/library/esp.rst
index 0836bba72e..6481d1f915 100644
--- a/docs/library/esp.rst
+++ b/docs/library/esp.rst
@@ -45,3 +45,43 @@ Functions
.. function:: flash_write(byte_offset, bytes)
.. function:: flash_erase(sector_no)
+
+.. function:: set_native_code_location(start, length)
+
+ Set the location that native code will be placed for execution after it is
+ compiled. Native code is emitted when the ``@micropython.native``,
+ ``@micropython.viper`` and ``@micropython.asm_xtensa`` decorators are applied
+ to a function. The ESP8266 must execute code from either iRAM or the lower
+ 1MByte of flash (which is memory mapped), and this function controls the
+ location.
+
+ If `start` and `length` are both `None` then the native code location is
+ set to the unused portion of memory at the end of the iRAM1 region. The
+ size of this unused portion depends on the firmware and is typically quite
+ small (around 500 bytes), and is enough to store a few very small
+ functions. The advantage of using this iRAM1 region is that it does not
+ get worn out by writing to it.
+
+ If neither `start` nor `length` are `None` then they should be integers.
+ `start` should specify the byte offset from the beginning of the flash at
+ which native code should be stored. `length` specifies how many bytes of
+ flash from `start` can be used to store native code. `start` and `length`
+ should be multiples of the sector size (being 4096 bytes). The flash will
+ be automatically erased before writing to it so be sure to use a region of
+ flash that is not otherwise used, for example by the firmware or the
+ filesystem.
+
+ With the default boot/filesystem configuration there is one sector of flash
+ reserved for general use and one can use the following call to use it for
+ native code generation::
+
+ esp.set_native_code_location(esp.flash_user_start(), 4096)
+
+ When using the flash to store native code `start+length` must be less
+ than or equal to 1MByte. Note that the flash can be worn out if repeated
+ erasures (and writes) are made so use this feature sparingly.
+
+ In both cases above, using iRAM1 or flash, if there is no more room left
+ in the specified region then the use of a native decorator on a function
+ will lead to `MemoryError` exception being raised during compilation of
+ that function.