XWOS LUA API参考手册
XWLUA的扩展
多线程
原生的Lua语言不支持多线程(Lua中的类型 thread 并不是真正的线程,而是协程。),脚本中的全局变量只能由执行脚本的线程自身访问。
XWLUA在C语言层面开发了多线程的功能,每个线程都拥有一个 独立的Lua虚拟机 。
全局导出表
为了实现多线程共享数据,XWLUA中实现了一个 全局导出表(xwxt) ,全局导出表中的数据对所有线程可见,并且是线程安全的。 全局导出表也是Lua中的一个独立的虚拟机。
新的Metamethod:__copy
元方法 __copy() 用于将用户数据从一个虚拟机(全局导出表、线程) 深拷贝 到另一个虚拟机(线程、全局导出表)中。
只有 userdata 可以定义 __copy() 元方法。
元方法 __copy() 有两个参数,第一个参数是 数据 ,第二参数是 目的虚拟机 ,无返回值。
元方法 __copy() 运行在 保护模式 ,可以 抛出错误 。
实现元方法 __copy() 时,若拷贝失败,应该在 目的虚拟机 中压入一个 nil 。
XWLUA的对象都提供了元方法 __copy() 。
对象强指针
XWLUA使用 对象强指针 管理XWOS内核中的对象(线程、信号量、条件量、事件标志、信号选择器、线程栅栏、互斥锁、自旋锁、顺序锁)。 对象强指针 是一种 userdata 。 对象强指针 就是对XWOS中的 对象描述符 的封装。 再借助于Lua虚拟机的GC机制,可实现对象的生命周期自动管理:
- Lua虚拟机每引用一个 对象强指针 ,都会增加相关联对象的引用计数;
- Lua虚拟机每 GC 一个 对象强指针 ,都会减少相关联对象的引用计数;
- 当相关联对象的引用计数为 0 时,就会执行C语言层面对象的
GC函数 。
对象强指针 的概念源于Lua语言的 强引用 。
Modules
| xwtm | XWLUA模块:系统时间 |
| xwvm | XWLUA模块:虚拟机 |
| xwxt | XWLUA模块:全局导出表 |
| xwos.skd | XWLUA模块:调度器 |
| xwos.thd | XWLUA模块:线程 |
| xwos.cthd | XWLUA模块:当前线程 |
| xwos.lock.mtx | XWLUA模块:互斥锁 |
| xwos.lock.splk | XWLUA模块:自旋锁 |
| xwos.lock.sqlk | XWLUA模块:顺序锁 |
| xwos.sync.sem | XWLUA模块:信号量 |
| xwos.sync.cond | XWLUA模块:条件量 |
| xwos.sync.flg | XWLUA模块:事件标志 |
| xwos.sync.br | XWLUA模块:线程栅栏 |
| xwos.sync.sel | XWLUA模块:信号选择器 |
| xwos.pm | XWLUA模块:电源管理 |
Classes
| xwlib.bmp | XWLUA模块:位图 |
| thdsp | XWLUA类:线程对象强指针 |
| mtxsp | XWLUA类:互斥锁对象强指针 |
| splksp | XWLUA类:自旋锁对象强指针 |
| sqlksp | XWLUA类:顺序锁对象强指针 |
| semsp | XWLUA类:信号量对象强指针 |
| condsp | XWLUA类:条件量对象强指针 |
| flgsp | XWLUA类:事件标志对象强指针 |
| brsp | XWLUA类:线程栅栏对象强指针 |
| selsp | XWLUA类:信号选择器对象强指针 |
| xwds.soc | XWLUA模块:SOC |
| xwds.uart | XWLUA模块:UART |
| xwds.i2cm | XWLUA模块:I2C主机模式控制器 |
| xwds.spim | XWLUA模块:SPI主机模式控制器 |