美文网首页
三.嵌入式中的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,C#互相调用的理解

    几种情况讨论 C调用Lua C调用C# C#调用C C#调用Lua Lua调用C Lua调用C# Lua调用C 本...

  • 三.嵌入式中的lua调用C

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

  • lua和c的初始

    lua和c的交互包括:c访问lua的变量、c访问lua的table、c调用lua的方法、lua调用c的函数 参考链...

  • 面试小结(二) lua与C#的交互及一些注意事项

    简单的来说,lua调用C#的过程是lua-C-C#。C#调用lua的过程是C#-C-lua。 注意事项: 2.lu...

  • C++调用lua方式

    目标 使用C++调用lua接口 示例 lua代码(test.lua) C++调用示例(lua_test.cpp) ...

  • SLua-Lua调用自定义C#类

    需要在Lua中调用c#类添加特性[CustomLuaClass],在Lua中调用方法的时候,给方法添加[MonoP...

  • 2019-01-14

    Lua与C交互学习笔记 Lua与C交互是通过虚拟栈实现的 在C中调用Lua 方法一 栈中的情况如下表所示 方法二 ...

  • Lua与C交互-访问Lua变量(原创)

    1、交互原理 一个Lua程序与C的交互都是通过Lua虚拟机中的一个堆栈进行的,通过调用Lua C API可以让C中...

  • 三、Lua调用C++函数

    上一篇文章中我们已经知道了,C++怎么调用Lua中的函数,接下来我们学习一下,Lua怎么调用C++中的函数。 这篇...

  • lua调用c++中的函数(使用LuaBridge)

    前面一节简述描写了如何在c++中调用lua函数,这节简述描写如何在lua中调用c++中的函数,还是使用前一节的工程...

网友评论

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

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