@@ -45,3 +45,43 @@ Functions
45
45
.. function :: flash_write(byte_offset, bytes)
46
46
47
47
.. 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