Lua-скриптам бракує пам'яті
Що пише ArduPilot:
- Insufficent memory loading …
- Lua: Unable to allocate a heap
- Lua: Couldn't allocate a lua state
- Required SCR_HEAP_SIZE over N
Усі скрипти ділять один блок пам'яті розміром 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 — сума, якої він досяг. Це попередження потім блокує наступне армування.
Що робити: найімовірніше спершу
SCR_HEAP_SIZEзамалий для скриптів, які ви запускаєте.ПеревіртеНа якийсь час встановіть біт 1 у
SCR_DEBUG_OPTS: після кожного проходу скрипта рядок «Lua: Time: … Mem: …» показує зайняту пам'ять.ВиправтеЗбільште
SCR_HEAP_SIZEіз запасом понад N з повідомлення (у півтора раза — добрий початок) і перезавантажте. Потім зніміть біт налагодження.Плата має менше вільної пам'яті, ніж просить
SCR_HEAP_SIZE.Перевірте«Unable to allocate a heap» одразу під час запуску; наземна станція показує вільну пам'ять.
ВиправтеЗапускайте менше скриптів або менші, вимкніть непотрібні функції й задайте
SCR_HEAP_SIZEстільки, скільки справді вільно.Скрипт забирає пам'ять і не повертає її.
ПеревіртеЗі встановленим бітом налагодження перше число Mem росте від проходу до проходу.
ВиправтеВиправте скрипт: звичайна причина — таблиці, що лише ростуть.
Пам'ять позичається лише заармованому апарату й лише доки на платі лишається вільними щонайменше 20 КБ. На землі, дизармованим, скрипт, що просить забагато, натомість зупиняється з помилкою.
Параметри, на які варто глянути
| Параметр | Що це |
|---|---|
SCR_HEAP_SIZE | Scripting Heap Size |
SCR_DEBUG_OPTS | Scripting Debug Level |
SCR_ENABLE | Enable Scripting |
Де це зробити:Каталог Lua-аплетів
Код, який це надсилає
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