Я пытаюсь интегрировать Lua во встроенный проект с использованием GCC на Cortex-M4. Я могу загрузить и запустить сценарий Lua, вызывая функции Lua из C, вызывая функции C из Lua. но программа C вылетает (ловушка HardFault_Handler поднимается), когда данный скрипт, переданный как параметр в luaL_dostring(), содержит любые синтаксические ошибки Lua.luaL_dostring() сбой, если данный скрипт имеет синтаксическую ошибку
здесь соответствующий код C, который выходит из строя из-за синтаксической ошибки в Lua:
//create Lua VM...
luaVm = lua_newstate(luaAlloc, NULL);
//load libraries...
luaopen_base(luaVm);
luaopen_math(luaVm);
luaopen_table(luaVm);
luaopen_string(luaVm);
//launch script...
luaL_dostring(luaVm, "function onTick()\n"
" locaal x = 7\n" //syntax error
"end\n"
"\n");
когда делает то же самое с правильным синтаксисом Lua, то он работает:
luaL_dostring(luaVm, "function onTick()\n"
" local x = 7\n"
"end\n"
"\n");
при отладке и шаговый через luaL_dostring(), я могу следить за линией разбора Lua для строки, а при достижении строки с синтаксической ошибкой происходит сбой программы C.
Может ли кто-нибудь помочь? Благодарю.
отключили setjmp/longjmp
в Lua исходном коде следующим образом:
//#define LUAI_THROW(L,c) longjmp((c)->b, 1) //TODO oli4 orig
//#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } //TODO oli4 orig
#define LUAI_THROW(L,c) while(1) //TODO oli4 special
#define LUAI_TRY(L,c,a) { a } //TODO oli4 special
... так нет setjmp/longjmp используется больше, но я до сих пор аварии :-(
должен иметь другую причину ???
Поддерживает ли ваша платформа 'longjmp'? Сбой этой программы при запуске: «ошибка» «стрела»? – lhf
платформа STM32F4 микроэлектроники ST. он, похоже, поддерживает longjmp (скажем: он компилируется при использовании этих функций). но на самом деле Lua падает при запуске ошибки «foo». так что кажется, что longjmp работает неправильно? – oli4
Мне кажется, что «longjmp» - это первое, на что нужно обратить внимание. – lhf