喜欢13次
在之前工程的基础之上,将Lua源码加入到工程中,并将lua.c luac.c剔除编译。
在Lua初始化过程中会在linit.c文件中的loadedlibs导入功能库,这里可以把一些不用的功能注释掉。
在luaconf.h文件中包含了很多Lua宏定义和一些参数的默认配置,这里现将 #define LUA_32BITS打开(可以降低点代码空间占用)。
2 工程配置
编译选项中加入Os优化缩减代码大小(不加优化的话差不多125k,已经不能调试了QAQ)
COMMON_FLAGS= -Os -g -fno-common -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP
Lua中用到了许多数学函数库,在Linker->Additional Linker Options中引入math库。
static int lua_led_init(lua_State *L) {
int num;
num = lua_tointeger(L, 1);
gd_led_init(num);
printf("gd_led_init %d\n", num);
return 1;
}
static int lua_led_on(lua_State *L) {
int num;
num = lua_tointeger(L, 1);
gd_led_on(num);
printf("gd_led_on %d\n", num);
return 1;
}
static int lua_led_off(lua_State *L) {
int num;
num = lua_tointeger(L, 1);
gd_led_off(num);
printf("gd_led_off %d\n", num);
return 1;
}
static int lua_delay(lua_State *L) {
int num;
num = lua_tointeger(L, 1);
delay_1ms(num);
return 1;
}
.定义一个luaL_Reg结构数组
static const struct luaL_Reg mylib[] =
{
{"led_on", lua_led_on},
{"led_off", lua_led_off},
{"delay", lua_delay},
{"led_init", lua_led_init},
{NULL, NULL}};
const char LUA_SCRIPT_GLOBAL[] = " \
off = 1000 \
on = 1000 \
led_init(1) \
led_init(2) \
while 1 do \
led_on(1) \
delay(off) \
led_off(1) \
delay(on) \
end";
int main(void) {
lua_State *L;
L = luaL_newstate();
lua_led_off(L);
luaopen_base(L);
luaL_setfuncs(L, mylib, 0);
luaL_dostring(L, LUA_SCRIPT_GLOBAL);
return 0;
}