![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
lua
文章平均质量分 83
dancebit
我若成魔 佛奈我何
展开
-
lua table操作函数
lua_getfield原型:void lua_getfield (lua_State *L, int index, const char *k); 解释:把 t[k] 值压入堆栈 。用于获取table中的键值,键k固定为字符串lua_getglobal(L, "mytable") <== push mytablelua_getfield(L, -1, "x") <== push mytable["x"],作用同下面两行调用const char *value= lua_t..原创 2021-04-26 15:12:33 · 2162 阅读 · 0 评论 -
lua 防止代码片段重复执行
通常使用 require('module') 中module.lua文件只会加载一次另外还有代码普片段的重复加载问题,可以通过以下方式过滤掉if __main__ then print("文件已加载过") returnend__main__ = "__main__"原创 2020-08-21 09:20:57 · 641 阅读 · 0 评论 -
lua 面向对象 重写和基类base调用
在重写基类某些方法时,有可能不是直接覆盖重写掉,还需要调用基类方法。测试代码如下:--------父类---------------------------------------------Class = {}Class.__index = Classfunction Class:new() local obj = {} setmetatable(obj, Class) return objendfunction Class:show() pr.原创 2020-08-20 22:21:28 · 1842 阅读 · 0 评论 -
lua 面向对象 self探究
整体参考博客 : lua的面向对象编程,封装,继承,多态的实现lua面向对象中的self目前对我来说是一个迷,迷之混乱,所以觉得测之。。。测试代码:--------父类---------------------------------------------Class = {}Class.cnt = 0--Class.name = "base class"Class.__index = Classfunction Class:new(name) local obj = {原创 2020-08-19 23:48:59 · 504 阅读 · 0 评论 -
lua 注册二级函数
添加lua模块一般是用到一级路劲下的函数。类似 math.sqrt(2)。但有些场景下一个大模块下会有很多小模块,如下。mod.mod0.fun(),mod.mod1.fun()实现代码如下:cstatic int mod_fun(lua_State *L){ return 0;}static const luaL_Reg mod0_lib[] ={ {"fun1", mod_fun}, {"fun2", mod_fun}, {"status原创 2020-08-10 15:14:03 · 211 阅读 · 0 评论 -
lua_pop lua_settop 栈研究
我知道它是退栈的,但是退的是栈底还是栈顶。搜索一波还是没明白,自己动手测吧...测试程序static int lua_test(lua_State *L){ int pop_num = lua_tointeger(L,1); lua_settop(L,0); printf("1-top %d\r\n",lua_gettop(L)); lua_pushinteger(L,31); lua_pushinteger(L,32); lua_pushint原创 2020-08-06 15:45:40 · 5828 阅读 · 0 评论 -
lua freertos 消息订阅和发布实现
之前有用到合宙luat中的air202模块,热衷于Luat的消息发布和订阅的模式,便准备移植到我的程序中先看效果测试消息订阅发布的主函数--main.luarequire("msg")local x = 0local y = 0--订阅消息TEST_MSGsubscribe( "TEST_MSG", function(data) y = y + 1 print("thsi is a test msg1", data.cnt, x, y.原创 2020-08-04 15:04:02 · 1515 阅读 · 0 评论 -
嵌入式lua之多线程操作移植四 lua线程结束垃圾回收
继续上文做一些细节补充。lua多线程锁上章节中使用的锁为全局锁,如下:#if !defined(lua_lock)extern void hx_lua_lock();extern void hx_lua_unlock();#define lua_lock(L) hx_lua_lock()// ((void) 0)#define lua_unlock(L) hx_lua_unlock() //((void) 0)#endif锁只需要锁住公共资源即可,没必要使用全局锁。.原创 2020-08-03 18:29:43 · 650 阅读 · 0 评论 -
Lua 多线程垃圾回收
lua的局部变量以及其它置为nil的对象属于垃圾回收的来源但是当我创建多个线程的时候,线程中延时多时没问题,延时短时会出现lua报错内存不足的问题。所以难道lua的内存释放和时间有关系?指定的时间间隔回收垃圾?频繁的释放回收垃圾确实是会影响执行效率。通过collectgarbage("count")可查看当前Lua 使用的总内存数,发现值会不断累加,达到某个值后会自动骤减,就是会在某个状态或时间下才执行的垃圾回收。下文摘自菜鸟教程lua.垃圾回收器函数Lua 提供了以下函数.原创 2020-08-01 20:22:08 · 526 阅读 · 0 评论 -
嵌入式lua之多线程操作移植三 lua FreeRTOS
然而,使用前章方法移植到FreeRTOS上后却各种不尽人意。辛辛苦苦搞了几个星期,先展示下效果吧!!!压力测试11个线程。led间隔100ms闪烁,10个打印线程正常。中途遇到的问题记录执行lua文件频繁时会返回如下错误:[#err : execute fail(1) cannot open 0:/TEST.LUA: No error (errno = 0)]原因:打开文件过快,会造成文件读取冲突,所以文件操作需要加上互斥锁。顺便一提,lua的锁lua_lock,lua..原创 2020-07-30 18:39:01 · 3284 阅读 · 2 评论 -
嵌入式lua之多线程操作移植 一 中断测试
目的:在lua文本中灵活创建多线程函数,类似如下效果(来源合宙Luat)。底层通过FreeRTOS去实现多线程。-- 测试代码,用于发送消息给socketsys.taskInit( function() while true do sys.publish("pub_msg", "11223344556677889900AABBCCDDEEFF" .. os.time()) sys.wait(180000) en原创 2020-07-29 09:05:24 · 895 阅读 · 0 评论 -
嵌入式lua之多线程操作移植 二 中断测试
继续上一章前面只能指定函数名实现函数传递,我的目的是随时注册线程,不需要要指定函数名。所以我希望C能保存lua传递进来的函数,在指定的地方调用该函数。参考博客:lua注册表和引用系统,LUA_REGISTRYINDEX、luaL_ref、luaL_unref的用途便确定两个函数,luaL_ref:存放函数到注册表中并返回引用lua_rawgeti:从注册表中读取该函数并调用lua注册函数程序及主线程程序local a = 0local function callbac.原创 2020-07-29 20:08:36 · 412 阅读 · 0 评论 -
lua移植到STM32F4全过程
基于之前了解到的Lua脚本开发功能,尝试过多次都没有很认真的做打底。之前的尝试都没能很好的应用到自己的工程里。elua东西太多并且是在linux下编译的,我很不适应,当然liunx涉及的不深。本次移植的条件及目标:本次的目标是能精简移植最纯洁版的lua框架,能够实现多文件(.lua)的联合调用 require / dofile。开发工具:Keil V5.29硬件平台:STM32F4探索者开发版移植下来发现lua和平台真的关系不大,就内存上面我还没搞懂他需要多少合适。...原创 2020-07-17 17:17:16 · 4580 阅读 · 0 评论 -
elua STM32F4 验证之路
我是做自助零售设备的,快速定制嵌入式应用是一个迫在眉睫的需求。lua脚本开发单片机,感觉很有意思,底层高效不易修改的代码可以通过C语言实现,上层逻辑业务可以用lua开发,灵活可裁剪。开始接触是一次物联网产品开发,使用了合宙opeluat的模块开发MQTT产品,简单入门lua语言之后感觉极度舒适,于是想进一步了解lua。经过各种搜索,下载了lua的开源库。官网http://www...原创 2019-07-22 00:48:33 · 1287 阅读 · 0 评论