← Усі інструменти

Пояснення повідомлень і помилок

Що означає повідомлення ArduPilot і що з ним робити

English

Lua-скриптам бракує пам'яті

ПопередженняПлата, внутрішні помилки, CAN, скрипти

Що пише ArduPilot:

Усі скрипти ділять один блок пам'яті розміром SCR_HEAP_SIZE байтів (типово 43 КБ, 100 КБ або 200 КБ, залежно від розміру плати). «Insufficent memory loading FILE»: цей скрипт не вмістився й не працює. «Unable to allocate a heap» і «Couldn't allocate a lua state»: не вдалося отримати сам блок, тож не працює жоден скрипт. «Required SCR_HEAP_SIZE over N»: заармованим скрипту знадобилося більше, ніж уміщує блок, і ArduPilot позичив йому пам'ять із вільної пам'яті плати, щоб той не впав; N — сума, якої він досяг. Це попередження потім блокує наступне армування.

Що робити: найімовірніше спершу

  1. SCR_HEAP_SIZE замалий для скриптів, які ви запускаєте.

    ПеревіртеНа якийсь час встановіть біт 1 у SCR_DEBUG_OPTS: після кожного проходу скрипта рядок «Lua: Time: … Mem: …» показує зайняту пам'ять.

    ВиправтеЗбільште SCR_HEAP_SIZE із запасом понад N з повідомлення (у півтора раза — добрий початок) і перезавантажте. Потім зніміть біт налагодження.

  2. Плата має менше вільної пам'яті, ніж просить SCR_HEAP_SIZE.

    Перевірте«Unable to allocate a heap» одразу під час запуску; наземна станція показує вільну пам'ять.

    ВиправтеЗапускайте менше скриптів або менші, вимкніть непотрібні функції й задайте SCR_HEAP_SIZE стільки, скільки справді вільно.

  3. Скрипт забирає пам'ять і не повертає її.

    ПеревіртеЗі встановленим бітом налагодження перше число Mem росте від проходу до проходу.

    ВиправтеВиправте скрипт: звичайна причина — таблиці, що лише ростуть.

Пам'ять позичається лише заармованому апарату й лише доки на платі лишається вільними щонайменше 20 КБ. На землі, дизармованим, скрипт, що просить забагато, натомість зупиняється з помилкою.

Параметри, на які варто глянути

ПараметрЩо це
SCR_HEAP_SIZEScripting Heap Size
SCR_DEBUG_OPTSScripting Debug Level
SCR_ENABLEEnable Scripting
Код, який це надсилає

Insufficent memory loading …

libraries/AP_Scripting/lua_scripts.cpp lua_scripts::load_script() · Відкрити в ArduPilot Copter-4.7.1

Lua: Unable to allocate a heap

libraries/AP_Scripting/lua_scripts.cpp lua_scripts::run() · Відкрити в ArduPilot Copter-4.7.1

Lua: Couldn't allocate a lua state

libraries/AP_Scripting/lua_scripts.cpp lua_scripts::run() · Відкрити в ArduPilot Copter-4.7.1

Required SCR_HEAP_SIZE over N

libraries/AP_Scripting/lua_scripts.cpp lua_scripts::run() · Відкрити в ArduPilot Copter-4.6.3

libraries/AP_Scripting/lua_scripts.cpp lua_scripts::run_engine() · Відкрити в ArduPilot Copter-4.7.1

Тут написано для: Коптер, 4.6. В інструменті можна вибрати свій апарат і версію, побачити значення власних параметрів поруч із названими тут і перетягнути лог польоту, щоб отримати пояснення до кожного повідомлення в ньому.

Відкрити в інструменті