最新文�? 原创 : ubuntu16.04怎样才能安装 wxpython 2.8.12.1 转载 : gerrit安装与配置 原创 : RobotFramework框架系列 – 介绍篇 原创 : RobotFramework框架系列 – 运行参数篇 原创 : RobotFramework框架系列 – TAG选择运行篇
lua总结 历史版本:
上次修改时间:
lua的运行原理 历史版本:
上次修改时间: 2021-01-21 00:54:49
lua脚本参考 历史版本:
上次修改时间: 2021-01-21 00:54:49
10\n x = x+1\n do -- another block\n local x = x+1 -- another \'x\'\n print(x) --> 12\n end\n print(x) --> 11\n end\n print(x) --> 10 (the global one)\n```\n\n#### table的操作\ntable是lua中唯一的复杂数据,可以用于表示传统的数组,map,和链表等抽象数据结构。因此有必要对table的操作解释:
\n|操作|参数解释|\n|-|-|\n|table.concat (table [, sep [, start [, end]]])|concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。|\n| table.insert (table, [pos,] value)|在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.|\n|table.maxn (table)|指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。|\n|table.remove (table [, pos])|返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。|\n|table.sort (table [, comp])|对给定的table进行升序排序|\n\n遍历:
\n```\nfor k,v in ipairs(fruits) do\n print(k,v)\nend\n```\n求长度:
\n```\nprint(\"tbl 长度 \", #tbl)\n```\n\n#### table的元方法\nlua为每个table变量提供了操作符重载的能力,通过setmetatable函数给变量设置一个metatable,metatable记录了变量在进行基本操作符运算的函数列表。比如:\n```\ntablev = {1,2,3}\nmeta.__tostring = function (t) -- __tostring函数在print的时候被调用\n return \"shit\"\nend\n\nsetmetatable(tablev,meta)\n\nprint(tablev) # 输出shit\n\n```\n常见的metatable函数是\n```\n__add: 当两个操作数都不是数字类型的时候,lua首先查找第一个操作数的元方法,如果找到,就调用该元方法,如果没找到,就找第二个操作数的元方法,当找不到可以调用的元方法的时候,lua 报错。\n__sub: -运算 和+类似.\n__mul: 乘法运算,规则和和+类似.\n__div: 除法运算,规则和和+类似.\n__mod: 求余数运算,和+类似.\n__pow: 求指数运算,规则和和+类似.\n__unm: 求负数,规则和+类似.\n__idiv: 整除运算,规则和+类似.\n__band: 按位与运算,只是如果任何操作数既不是整数也不是可强制转换为整数的浮点,Lua将尝试使用元方法,规则和+类似.\n__bor: 按位或运算,规则和按位与&类似\n__bxor: 按异或运算,规则和按位与&类似\n__bnot: 按位非运算,规则和按位与&类似。\n__shl: 位左移运算,\n__shr: 为位移运算,规则和按\n__concat: 连接(…)操作。行为类似于加法运算,如果任何操作数既不是字符串也不是数字(始终可以强制转换为字符串),Lua将尝试元方法。\n__len: 长度(#)操作。如果对象不是字符串,Lua将尝试其元方法。如果有一个元方法,Lua用对象作为参数调用它,并且调用的结果(总是调整为一个值)是操作的结果。如果没有元方法,但对象是一个表,那么Lua使用表长度操作(见§3.4.7)。否则,Lua将引发一个错误。\n__eq: 相等(=)运算。与加法操作类似的行为,只是Lua仅在比较的值是两个表或两个完整的userdata并且它们在本质上不相等时才会尝试元方法。调用的结果始终转换为布尔值。\n__lt:小于(<)运算。行为与加法操作类似,只是Lua只在比较的值既不是数字也不是字符串时才尝试元方法。此外,调用的结果总是转换为布尔值。\n__le:不相等(<=)运算。类似于小于操作的行为。\n__newindex: 发生在如table[key] = value。当表不是表或表中不存在键时,会发生此事件。在表的metatable中查找metavalue。\n__call: 调用操作func(args)。此事件发生在Lua尝试调用非函数值(即func不是函数)时。元方法在func中查找。如果存在,则使用func作为其第一个参数调用metamethod,然后是原始调用的参数(args)。调用的所有结果都是操作的结果。这是唯一允许多个结果的元方法。\n```\n#### 垃圾回收\nLua使用的所有内存都是自动管理的:字符串、表、用户数据、函数、线程、内部结构等。
\n只要收集器能够确保在程序正常执行过程中不会再次访问该对象,则认为该对象已死亡。Lua中的垃圾收集器(GC)可以在两种模式下工作:增量和普通模式。
\n带有默认参数的默认GC模式对于大多数使用都是足够的。然而,浪费大量时间分配和释放内存的程序可以从其他设置中获益。请记住,GC行为在平台和不同Lua版本之间都是不可移植的;因此,最佳设置也是不可移植的。
\n您可以通过在C中调用lua_GC或在lua中调用collectgarbage来更改GC模式和参数。您还可以使用这些函数直接控制收集器(例如,停止并重新启动它)。
\n##### 增量回收\n在增量模式下,每个GC周期在与程序执行交错的小步骤中执行标记和扫描收集。在此模式下,收集器使用三个指标来控制其垃圾收集周期:垃圾收集器暂停、垃圾收集器步长乘数和垃圾收集器步长。
\n\n垃圾收集器暂停控制收集器在开始新循环之前等待的时间。在上一次收集之后,当内存使用量达到使用量的n%时,收集器开始一个新的周期。值越大,收集器的攻击性越小。值等于或小于100意味着收集器不会等待开始新的循环。值为200意味着收集器在开始新的循环之前等待使用的总内存翻倍。默认值为200;最大值为1000。
\n\n\n垃圾收集器步骤乘数控制收集器相对于内存分配的速度,也就是说,对于分配的每千字节内存,它标记或清除多少个元素。较大的值使收集器更具攻击性,但也会增加每个增量步骤的大小。不应使用小于100的值,因为它们会使收集器太慢,并可能导致收集器永远无法完成一个周期。默认值为100;最大值为1000。
\n\n\n垃圾收集器步骤大小控制每个增量步骤的大小,特别是在执行一个步骤之前解释器分配了多少字节。这个参数是对数的:n值表示解释器将在步骤之间分配2n字节,并在步骤期间执行等效的工作。较大的值(例如60)使收集器成为停止世界(非增量)收集器。默认值为13,这意味着步长大约为8kbytes。
\n\n##### 通用模式\n在通用模式下,分为两种不同的回收模式模式,次要回收和主要回收,次要回收只遍历最近创建的对象。如果在次要收集之后内存的使用仍然高于限制,则主要收集器将执行stop the world major collection,它遍历所有对象。对应于通用模式使用两个参数:次要乘数和主要乘数。
\n\n次要乘数控制次要回收的频率。对于次乘数x,当内存增长到比上一次主要收集后使用的内存大x%时,将执行新的次收集。例如,对于20的乘数,当内存使用量比上一次主要收集后的使用量大20%时,回收器将进行一次次要收集。默认值为20;最大值为200。\n
\n主要乘数控制主要回收的频率。对于主乘数x,当内存增长到比上一个主集合后使用的内存大x%时,将执行新的主要回收。例如,对于100倍的乘法器,当内存使用量大于上一次收集后使用量的两倍时,回收器将执行主要回收。默认值为100;最大值为1000。\n
\n\n### 函数\n\n#### 定义方式\n```\nlocal stat = function () --函数对象赋值\n print(\"shit\")\n -- body\nend\n\nfunction ss2( ) -- 定义\n print(\"shit\")\n -- body\nend\n\nfunction ss(... ) -- 可变参数\n result = 0\n local arg={...} --> arg 为一个表,局部变量\n for i,v in ipairs(arg) do -- ipairs获得参数表存储在中\n print(i,v)\n end\n print(\"总共传入 \" .. #arg .. \" 个数\")\n return result/#arg\nend\n\nstat()\nss(\"hello\",2,3,4)\n```\n\n### 错误处理\nlua的错误机制类似于try catch机制,错误会中断程序的正常流程,通过捕获错误可以继续执行该流程。
\nLua代码可以通过调用error函数显式地引发错误。(此函数永不返回。)\nLua代码从宿主程序中的C代码调用开始运行。(当用Lua standalone时,Lua应用程序是主机程序。)通常,此调用是受保护的;因此,当编译或执行Lua块期间发生不受保护的错误时,控件返回到宿主程序,宿主程序可以采取适当的措施,例如打印错误消息。\n\n\n -->
lua c api 简要说明 历史版本:
上次修改时间: 2021-04-14 17:26:16
0条评�?
全部评论

关于博主

an actually real engineer

通信工程专业毕业,7年开发经验

技术栈:

精通c/c++

精通golang

熟悉常见的脚本,js,lua,python,php

熟悉电路基础,嵌入式,单片机

耕耘领域:

服务端开发

嵌入式开发

git

>

gin接口代码CURD生成工具

sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。

输入ddl:
输出代码:

qt .ui文件转css文件

duilib xml 自动生成绑定控件代码

协议调试器

基于lua虚拟机的的协议调试器软件 支持的协议有:

串口

tcp客户端/服务端

udp 组播/udp节点

tcp websocket 客户端/服务端

软件界面

使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上

下载地址和源码

duilib版本源码 qt qml版本源码 二进制包

webrtc easy demo

webrtc c++ native 库 demo 实现功能:

基于QT

webrtc摄像头/桌面捕获功能

opengl渲染/多播放窗格管理

janus meeting room

下载地址和源码

源码 二进制包

wifi,蓝牙 - 无线开关

实现功能:

通过wifi/蓝牙实现远程开关电器或者其他电子设备

电路原理图:

实物图:

深度学习验证工具

vtk+pcl 点云编辑工具

实现功能:

1. 点云文件加载显示(.pcd obj stl)

2. 点云重建

3. 点云三角化

4. 点云缩放

下载地址:

源码 二进制包

虚拟示波器

硬件实物图:

实现原理

基本性能

采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS

上位机实现功能: 采集,显示波形,存储wave文件。

参数可运行时配置

上位机:

显示缓冲区大小可调

刷新率可调节

触发显示刷新可调节

进程守护工具

基本功能:

1. 守护进程,被守护程序崩溃后自动重启。

2. 进程输出获取,显示在编辑框中。

二进制包

openblt 烧录工具

基本功能:

1. 加载openblt 文件,下载到具有openblt bootloader 运行的单片机中。

二进制包

opencv 功能验证工具(开源项目二次开发)

基本功能:

1. 插件化图像处理流程,支持自定义图像处理流程。 2. 完善的日志和权限管理

二进制包

又一个modbus调试工具

最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:

1. 基于QT5

2. 基于libmodbus

3. 三方库完全跨平台,linux/windows。

二进制包

屏幕录制工具

1. 基于QT5

2. 基于ffmpeg

3. 支持自定义录屏

源代码

开源plutosdr 板卡

1. 完全开源

2. 提高固件定制服务

3. 硬件售价450 手焊产量有线

测试数据

内部DDS回环测试

接收测试

外部发送500MHZ FM波形

硬件原理图

matlab测试

2TRX版本

大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。 对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。

二次开发例子

``` all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream

bsdiff算法补丁生成器

1. 官方bsdiff算法例子自带bzip压缩方式

2. 本例子没有压缩,直接生成补丁文件

3. 图形化界面基于DUILIB

二进制文件

版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型

Base64 Image

. 闽ICP备19002644号