在 中运行 LUA STM32F103引发错误"unexpected symbol"



我在stm32f103中成功构建了lua,下面的代码还可以:

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:意外符号",函数" lual_dofile"返回3。错误消息不包含任何提示,例如"近xxx"。

我已经覆盖了" _sys_open"one_answers" _sys_read",并且确定文件" 1:/2.txt"的读数正确。我试图将2.txt的内容更改为包括新行和空间在内的任何内容,但仍然有同样的错误。

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

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

我尝试覆盖" 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;
}

相关内容

最新更新