@@ -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