【问题标题】:Run LUA in STM32F103 throw an error "unexpected symbol"在STM32F103中运行LUA抛出错误“unexpected symbol”
【发布时间】:2019-10-10 19:03:58
【问题描述】:

我已经在STM32F103中成功搭建了LUA,下面的代码就OK了:

const char lua_test[] = "print(\"Hello Lua!!\")";
lua_State *L;  
L = luaL_newstate();   
luaL_openlibs(L);  
luaopen_base(L);  
luaL_dostring(L, lua_test);   
lua_close(L);  

字符串正确显示在串口中。 但是当我将打印功能放入外部 SD 卡中的文件并尝试将“dostring”替换为“dofile”时:

lua_State *L;  
L = luaL_newstate(); 
luaL_openlibs(L);  
luaopen_base(L);  

if (luaL_dofile(L, "1:/2.txt")!=0) //Run 2.txt in SD card
      USART1_Send_String(lua_tostring(L,-1));
lua_close(L); 

串口显示错误信息“1:/2.txt:1: unexpected symbol”,函数“luaL_dofile”返回3。 错误消息不包含“近 XXX”之类的任何提示。

我已经覆盖了“_sys_open”和“_sys_read”,并确定文件“1:/2.txt”被正确读取。 我试图将 2.txt 的内容更改为任何内容,包括一个新行和一个空格,但仍然出现同样的错误。

如何解决此问题或如何获取更多错误消息? 请帮助我,任何建议都是值得赞赏的。

PS:我使用的是官方的 lua 5.3.4。它至少需要 7.5KB RAM 和 65K ROM。我在 STM32F103ZET6 的内部 64KB RAM 中分配了 4KB 堆栈和 16K 堆。通过 "luaL_dostring" 运行 lua 代码可以正常工作,但在调用 "luaL_dofile" 时出错。

【问题讨论】:

  • 是现有的 Lua(来自 lua.org)还是 Lua 的修改版本?
  • 那么,您的设备有 96 KB 的 RAM?
  • @Egor Skriptunoff 我正在使用官方 lua 5.3.4。它至少需要 7.5KB RAM 和 65K ROM。我在 STM32F103ZET6 的内部 64KB RAM 中分配了 4KB 堆栈和 16K 堆。通过 "luaL_dostring" 运行 lua 代码可以正常工作,但在调用 "luaL_dofile" 时出错。

标签: lua stm32


【解决方案1】:

我尝试覆盖“fgetc”而不是“_sys_read”并且它有效。但我认为一个字符一个字符地读取文件可能会导致 IO 性能不佳。 最后我发现“_sys_read”的返回值应该是有待读取而不是已经读取的长度。如下修正“_sys_read”函数后,“luaL_dofile”函数现在可以正常运行了。

int _sys_read(FILEHANDLE fh, unsigned char*buf, unsigned len, int mode)
{
  FRESULT fr;
  UINT br;  
  fr = f_read((FIL *)fh, buf, len, &br);
  if (fr == FR_OK)
    return len - br;
  return -1;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2014-07-28
    • 2018-05-07
    • 2017-04-02
    • 2016-06-14
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多