私はCortex-M4でGCCを使って組み込みプロジェクトにLuaを統合しようとしています。私はLuaスクリプトをロードして実行することができ、CからLua関数を呼び出し、LuaからC関数を呼び出すことができます。 luaL_dostring()のパラメータとして渡されたスクリプトがLua構文エラーを含んでいる場合、Cプログラムがクラッシュします(HardFault_Handlerトラップが上昇します)。ここ与えられたスクリプトに構文エラーがあると、luaL_dostring()がクラッシュする
原因のLuaでの構文エラーにクラッシュし、関連するCコード:
//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プログラムがクラッシュします。
誰でも手伝いできますか?ありがとう。
は、次のようにLuaのソースコードで無効setjmp/longjmp
を持っている:
//#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'をサポートしていますか?このプログラムは実行時にクラッシュしますか? 'error" boom "'? – lhf
プラットフォームはSTマイクロエレクトロニクスのSTM32F4です。 longjmpをサポートしているようです(これらの関数を使用するとコンパイルされます)。実際にはエラー "foo"を実行するとLuaがクラッシュします。だから、longjmpが正しく動作しないようですね??? – oli4
「longjmp」が最初に見ているようです。 – lhf