sunsili 发表于 2023-8-18 16:13:32

单片机中移植lua解释器

本帖最后由 sunsili 于 2023-8-18 16:17 编辑

单片机中移植lua解释器


一、基本开发环境
开发环境基于野火STM32开发板。
前测试的 Lua 解释器版本为 5.4.2。官网下载lua资源包,下载地址如下:
https://www.lua.org/https://github.com/rjpcomputing/luaforwindows/releaseslua: Lua 国内镜像 (gitee.com)
二、移植Lua解释器
1.下载的Lua解压,删除源文件中的的 lua.c 和 luac.c (如果有的话)文件。2.新建stm32工程3.工程添加Lua源码将Lua源文件拷贝到工程添加头文件更改 loslib.c 文件下部分内容

[*]将 os_exit(lua_State * L)函数中 if(L) exit(status)注释,并添加 status=status 语句。
2.添加 time(time_t *time)和 system(const char * string)更改以上内容是因为使用了 Use MicroLIB 模式。static int os_exit (lua_State *L) {
int status;
if (lua_isboolean(L, 1))
    status = (lua_toboolean(L, 1) ? EXIT_SUCCESS : EXIT_FAILURE);
else
    status = (int)luaL_optinteger(L, 1, EXIT_SUCCESS);
if (lua_toboolean(L, 2))
    lua_close(L);
//if (L) exit(status);/* 'if' to avoid warnings for unreachable 'return' */
status=status;
return 0;
}

time_t time(time_t *time)
{
    return 0;
}

int system(const char * string)
{
    return 0;
}

三、Lua使用测试
1. 编写测试代码

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

static int lua_led_on(lua_State *L)
{
    LED1( ON );      
    return 1;
}
static const struct luaL_Reg mylib[]=
{
   {"led_on",lua_led_on},
   {NULL,NULL}
};

const char LUA_SCRIPT_GLOBAL_ON[] =" \
    while 1 do\
    led_on() \
    end";
   
int main(void)
{

    SystemClock_Config();

    LED_GPIO_Config();
   
    LED1( ON );       // 亮
    HAL_Delay(1000);
    LED1( OFF );      // 灭
    HAL_Delay(1000);
   
    lua_State *L;
    L = luaL_newstate(); //建立Lua运行环境
    luaopen_base(L);//注册基础函数(此函数要屏蔽luaL_setfuncs(L, base_funcs, 0);)
    luaL_setfuncs(L, mylib, 0);//注册自定义函数
    luaL_dostring(L, LUA_SCRIPT_GLOBAL_ON);
   
    while(1)
    {   
    }   
}
2.下载,查看测试效果

实验现象,指示灯先亮后灭再常亮,符合预期。
欢迎关注个人公众号:嵌入式学习与实践
参考:https://www.gd32mcu.com/data/documents/userManual/AN019_CN_Rev1.0.pdfhttps://blog.csdn.net/weixin_38728721/article/details/104068015https://blog.csdn.net/weixin_41558887/article/details/101385077https://www.armbbs.cn/forum.php?mod=viewthread&tid=94757
页: [1]
查看完整版本: 单片机中移植lua解释器