Skip to content

Commit c3f70c6

Browse files
committed
docs/library/esp: Document esp.set_native_code_location() function.
1 parent bae7798 commit c3f70c6

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

docs/library/esp.rst

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,43 @@ Functions
4545
.. function:: flash_write(byte_offset, bytes)
4646

4747
.. function:: flash_erase(sector_no)
48+
49+
.. function:: set_native_code_location(start, length)
50+
51+
Set the location that native code will be placed for execution after it is
52+
compiled. Native code is emitted when the ``@micropython.native``,
53+
``@micropython.viper`` and ``@micropython.asm_xtensa`` decorators are applied
54+
to a function. The ESP8266 must execute code from either iRAM or the lower
55+
1MByte of flash (which is memory mapped), and this function controls the
56+
location.
57+
58+
If `start` and `length` are both `None` then the native code location is
59+
set to the unused portion of memory at the end of the iRAM1 region. The
60+
size of this unused portion depends on the firmware and is typically quite
61+
small (around 500 bytes), and is enough to store a few very small
62+
functions. The advantage of using this iRAM1 region is that it does not
63+
get worn out by writing to it.
64+
65+
If neither `start` nor `length` are `None` then they should be integers.
66+
`start` should specify the byte offset from the beginning of the flash at
67+
which native code should be stored. `length` specifies how many bytes of
68+
flash from `start` can be used to store native code. `start` and `length`
69+
should be multiples of the sector size (being 4096 bytes). The flash will
70+
be automatically erased before writing to it so be sure to use a region of
71+
flash that is not otherwise used, for example by the firmware or the
72+
filesystem.
73+
74+
With the default boot/filesystem configuration there is one sector of flash
75+
reserved for general use and one can use the following call to use it for
76+
native code generation::
77+
78+
esp.set_native_code_location(esp.flash_user_start(), 4096)
79+
80+
When using the flash to store native code `start+length` must be less
81+
than or equal to 1MByte. Note that the flash can be worn out if repeated
82+
erasures (and writes) are made so use this feature sparingly.
83+
84+
In both cases above, using iRAM1 or flash, if there is no more room left
85+
in the specified region then the use of a native decorator on a function
86+
will lead to `MemoryError` exception being raised during compilation of
87+
that function.

0 commit comments

Comments
 (0)