This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lua on RT-Thread
## 简介
RT-Thread中的Lua修改自[eLua](http://www.eluaproject.net/)的Lua-5.1.4版本。
采用gcc工具链时, Lua依赖于newlib库, 采用keil时, Lua依赖于arm的标准c库。
启动lua的RAM占用情况
- 标准的lua 17.1904296875 KB
- 优化的lua 5.01953125 KB
注: 数据来自print(collectgarbage('count'))的输出
优化是指采用一个lua patch --- [Lua Tiny RAM](http://www.eluaproject.net/doc/v0.8/en_arch_ltr.html)
## 使用
在RT-Thread的finsh中, 调用lua()获得一个lua解释器。
在lua解释器中
- 可以调用lua标准库中的函数, 如: print('hello, lua on rt-thread')
- 可以执行脚本文件, 如: dofile('/hello.lua')
- 可以定义新的函数, 如: function sinc(x) return math.sin(x)/x end
- etc.
## 配置
1.通过在rtconfig.h中定义RT_USING_LUA加入lua组件
2.可以定义RT_LUA_OPTRAM减少RAM占用
3.可以定义RT_LUS_USE_EXLIBS而添加外部库, 如arduino的常用函数封装为一个arduino库
3.更多的配置项可以在luaconf.h中找到
## 开发相关
- 采用gcc工具链时, 依赖于newlib, 需在rtconfig.h中定义RT_USING_NEWLIB
采用keil工具链时, 依赖于arm的标准c库, 需在rtconfig.h中定义RT_USING_ARM_LIBC
- 开启编译器对C99的支持, 如MDK中, 在C/C++选项的Misc Controls输入框中添加--c99
- 使用gcc时, 需要在链接脚本中定义_stext和_etext, .ordata*放在两者之间。用于判断数据是read-only和writable
使用keil时, 需要在分散加载文件中把rodata放在ER_IROM1区
- 添加新的模块, 参见exlibs/lexamplelib.c
## 目录说明
- lua: 从eLua获得Lua-5.1.4版本代码
- exlibs: external libraries, 外部库代码, 如example库
- applications: Lua应用代码, 如finsh中lua()
- test: 测试代码