MicroPython:Библиотеки/esp/esp.set native code location()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


esp.set_native_code_location(start, length)[1]

esp.set_native_code_location(start, length)
Примечание

Это функции только для ESP8266.

Задает место, где будет размещаться и выполняться нативный код после его компиляции. Нативный код генерируется, когда в функции применяются декораторы @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.

См.также

Внешние ссылки