MicroPython:Библиотеки/esp/esp.set native code location(): различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
Строка 5: | Строка 5: | ||
=esp.set_native_code_location(start, length)<ref>[http://docs.micropython.org/en/latest/library/esp.html docs.micropython.org - esp — functions related to the ESP8266 and ESP32]</ref>= | =esp.set_native_code_location(start, length)<ref>[http://docs.micropython.org/en/latest/library/esp.html docs.micropython.org - esp — functions related to the ESP8266 and ESP32]</ref>= | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
esp.set_native_code_location(start, length) | esp.set_native_code_location(start, length) | ||
</syntaxhighlight> | </syntaxhighlight> |
Текущая версия от 18:13, 14 мая 2023
esp.set_native_code_location(start, length)[1]
esp.set_native_code_location(start, length)
Задает место, где будет размещаться и выполняться нативный код после его компиляции. Нативный код генерируется, когда в функции применяются декораторы @micropython.native, @micropython.viper и @micropython.asm_xtensa. ESP8266 должна выполнять код либо из iRAM, либо из flash-памяти размером менее 1 Мб (которая отображена в память), и эта функция как раз управляет тем, где будет находиться этот код.
Если в аргументах start и length будет None, нативный код будет расположен в неиспользуемой области памяти в конце участка iRAM1. Размер этой неиспользуемой области зависит от прошивки и обычно невелик (около 500 байт), но его достаточно для хранения нескольких очень маленьких функций. Преимущество использования этого участка iRAM1 в том, что он не изнашивается из-за записи на него.
Если в start или length будет не None, то это должны быть целые числа. В start задается байтовое смещение с начала flash-памяти, куда будет сохраняться нативный код. В length задается, сколько байтов flash-памяти, начиная со start, можно использовать для хранения нативного кода. Значения в start и length должны быть кратны размеру сектора (4096 байт). Перед записью flash-память будет автоматически стерта, так что убедитесь, что используете участок, который больше никак не используется (например, прошивкой файловой системы).
При использовании flash-памяти для хранения нативного кода сумма значений в start и length должна быть меньше или равна 1 мегабайту. Помните, что после многократных стираний (и записей) flash-память может износиться, так что пользуйтесь этой функцией по минимуму. В частности, нативный код должен быть перекомпилирован и перезаписан на flash-память при каждом запуске (включая выход из режима глубокого сна).
В обоих сценариях выше (будь то iRAM1 или flash-память), если в заданной области не будет свободного места, то использование нативного декоратора в функции приведет к тому, что во время ее компиляции будет возбуждено исключение MemoryError.