美文网首页
三.嵌入式中的lua调用C

三.嵌入式中的lua调用C

作者: wit_yuan | 来源:发表于2019-02-13 16:33 被阅读0次

    1.简单说明

    文中针对的嵌入式,并不包括带mmu的cpu。所以,使用lua调用so库在本文中也就不说明了。

    2.简单的lua调用c

    这一节说明的是简单的在lua源码中添加c函数,然后调用即可。这里面体现的就是lua调用了指定的c函数。

    步骤如下:

    1.在lua.c下,找到pmain函数,在luaL_openlibs()后添加如下代码块:

      lua_register(L, "myadd", l_add);
      const char* testfunc = "print(myadd(1.1,2.0445))";
      if(luaL_dostring(L, testfunc))    
            printf("Failed to execute.\n");
    

    2.在lua.c下,添加函数:

    static int l_add(lua_State* L) 
    {
        double op1 = luaL_checknumber(L,1);
        double op2 = luaL_checknumber(L,2);
        lua_pushnumber(L,op1 + op2);
        return 1;
    }
    

    3.编译整个lua源码,并执行:

    $ make c89 test
    $ ./lua
    3.1445
    

    3.符合工程化的lua调用c

    符合工程化的lua调用c,是指上层使用lua,而在lua的源码框架中已经包含了基本的c函数。这样能做到lua工程师与驱动工程师的分离。

    具体的使用方法是参照luaL_openlibs()的实现。

    例如在lua源码中添加的内容为:

    int l_myaddfun(lua_State * L)
    {
      #if 1
       double op1 = luaL_checknumber(L,1);
        double op2 = luaL_checknumber(L,2);
        lua_pushnumber(L,op1 + op2);
        return 1;
      #endif
    }
    
    
    static const luaL_Reg l_addfun_array[] = {
        {"myaddfun",        l_myaddfun},
        {NULL,  NULL}
    };
    
     
    int luaopen_addfun(lua_State * L)
    {
      luaL_newlib(L, l_addfun_array);
      return 1;
    }
    
    
    static void  lua_testlibs (lua_State *L) {
        const luaL_Reg prelibs[] = {
            { "test.addfun",            luaopen_addfun },
            { NULL, NULL },
        };
        const luaL_Reg * lib;
    
        for(lib = prelibs; lib->func; lib++)
        {
        lua_getglobal(L, "package");
        lua_getfield(L, -1, "preload");
        lua_pushcfunction(L, lib->func);
        lua_setfield(L, -2, lib->name);
        lua_pop(L, 2);
        }
    }
    

    lua应用层源码为:

    --在调用时,必须是package.function
    local myfun = require("test.addfun")
    --print(mytestlib.add(1.0,2.0))
    print("hello world......................")
    print(myfun.myaddfun(20.1,19))
    

    相关文章

      网友评论

          本文标题:三.嵌入式中的lua调用C

          本文链接:https://www.haomeiwen.com/subject/yxudeqtx.html