当前位置: 首页 > news >正文

湘潭九华网站公司推广策划方案

湘潭九华网站,公司推广策划方案,城乡建设交通委员会网站,表格可以做网站么Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行 Chapter1. Qt、C/C环境中内嵌LUA脚本、实现LUA函数的调用执行1、LUA简介2、LUA脚本的解释器和编译器3、C环境中内嵌LUA执行LUA函数调用4、Qt内嵌LUA执行LUA函数调用5、运行结果6、内嵌LUA脚本在实际项目中的案例应用 Chapter1…

Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行

  • Chapter1. Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行
    • 1、LUA简介
    • 2、LUA脚本的解释器和编译器
    • 3、C环境中内嵌LUA执行LUA函数调用
    • 4、Qt内嵌LUA执行LUA函数调用
    • 5、运行结果
    • 6、内嵌LUA脚本在实际项目中的案例应用


Chapter1. Qt、C/C++环境中内嵌LUA脚本、实现LUA函数的调用执行

参考链接1:https://blog.51cto.com/u_15950551/6031885

参考链接2: https://blog.csdn.net/qq_23345187/article/details/112710677?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-112710677-blog-87274903.235%5Ev38%5Epc_relevant_sort_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-112710677-blog-87274903.235%5Ev38%5Epc_relevant_sort_base3&utm_relevant_index=7

1、LUA简介

LUA是一个脚本语言,由标准C编写而成,几乎在所有操作系统和平台上都可以编译、运行,可以很方便的嵌入到其他C/C++环境中,如Qt、VS2012等。

一般的lua脚本文件的后缀为.lua,移植lua源码异常的简单,下载源码包后,直接编译即可,因为上面我们说过了LUA是用标准C编写的,所以几乎你常见的编程环境它都能编译LUA。

LUA源码下载地址:​ ​http://www.lua.org/ftp/​

下载lua-5.1.5.tar.gz然后解压。
在这里插入图片描述

在这里插入图片描述
将以上这些文件除了lua.c和luac.c加入到你的开发环境中进行编译,就算移植完成了!

lua.c和luac.c中都有main函数,需要分别编译这两个我文件,其中,lua.c编译出来是解析器,luac.c编译出来是编译器。

2、LUA脚本的解释器和编译器

Q:什么是解释器和编译器?

A:

解释器:顾名思义,就是对LUA进行解释说明,能够认识出LUA脚本并运行

编译器:对LUA脚本文件进行编译,生成可以供解释器运行的LUA可执行程序

我使用lua源码包版本在windows下编译出了可执行文件,其中:lua.exe为解释器,luac.exe为编译器。

3、C环境中内嵌LUA执行LUA函数调用

这里我使用的C开发环境是:Eclipse C/C++配合MinGW。

移植很简单的,将lua源码除了lua.c和luac.c之外,其他源码加入到工程即可。

4、Qt内嵌LUA执行LUA函数调用

移植很简单的,将lua源码文件除了lua.c和luac.c之外,加入到Qt工程即可。

我为了方便管理,将lua源码放到了一个目录里,然后放到mainwindow.cpp同文件夹下:
在这里插入图片描述
在这里插入图片描述
然后编译工程即可。

5、运行结果

在这里插入图片描述
在这里插入图片描述
lua文件
test.lua

function sum(x,y)return x + y + 61
end

test2.lua

local num=testfuction(10);

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>#include <stdio.h>extern "C"
{
#include "lua/lua.h"
#include "lua/lauxlib.h"
#include "lua/lualib.h"
}lua_State *L;
int countsum(int x,int y)
{int sum;lua_getglobal(L,"sum");//指向需要调用的lua函数//压入参数lua_pushnumber(L,x);//压入第一个参数lua_pushnumber(L,y);//压入第二个参数//调用函数lua_pcall(L,2,1,0); //压入两个参数,返回一个结果//取得结果sum = (int)lua_tonumber(L,-1); //取得栈顶元素lua_pop(L,1); //清理栈return sum;
}int  setnum(int num){return 100-num;
}static int testfuction(lua_State* L)
{int num = (int)lua_tonumber(L, -1);  //从lua中取得一个数lua_pushnumber(L, setnum(num));qDebug()<<"fuction start!!!!!\n";qDebug()<<"lua input number is"<<num;return 1;
}MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{L =  luaL_newstate();//新建lua虚拟机luaL_openlibs(L);//加载lua的string math等库luaL_dofile(L,"test.lua");//绝对路径 执行脚本文件int sum = countsum(100,200);qDebug()<<"test result is"<<sum;lua_close(L); //关闭lua文件lua_State* L = lua_open();luaopen_base(L);// C++的函数和封装函数都必须是静态的,不可以是非静态的lua_register(L, "testfuction", testfuction);luaL_dofile(L, "test2.lua"); //绝对路径lua_close(L);}

6、内嵌LUA脚本在实际项目中的案例应用

上面已经介绍了LUA脚本及内嵌入C/C++环境,那么实际的使用场景是怎样的呢?

下面就举一个实际的使用案例。

现在有一个嵌入式相关项目,使用Qt做一款上位机软件,通过串口和下位机进行通信,通信协议为modbus,下位机为各类485型传感器。

目前有一个温度传感器需要接入上位机、一个水浸入检测传感器需要接入;

水浸传感器是开关量传感器,只有0和1两种状态;

温度传感器是数字量传感器,厂家为了迎合modbus协议并且为了数据好处理,将浮点格式的温度值扩大了10倍进行传输,例如28.5度扩大10倍是285,将285通过modbus进行传输。

那么现在问题就来了,温度传感器和水浸传感器虽然通信协议是一致的,上位机通过modbus接收到传感器数据后:

如果是温度传感器的,那么需要除以10倍才能得到正确的温度值;

但是如果是水浸传感器就不用除以10倍;

而此时如果还有一个VOC传感器需要接入,并且上位机需要将读取到的VOC数值进行一个复杂的公式转换成THC后在显示;

这时候你就会发现,每一个传感器都有不一样的最终值计算方式,难道要将所有传感器的计算格式方式都包含进上位机中吗?

简单的加减乘除还可以包含进上位机中,如果是VOC转THC这种复杂计算公式的,你怎么包含进去呢?

所以,这就体现了LUA的用处!

办法如下:

在上位机中嵌入LUA,编写一个mylua.lua脚本文件,里面就一个getValue函数。

当上位机接收到传感器数值时,通过LUA提供的API函数,将该数值传入getValue.lua脚本中的getValue函数,然后在获得getValue的返回值,

而在getValue中实现了数值的转换或计算,由于getValue.lua脚本文件是独立于上位机的,可以随便更改函数体,当传感器是水浸时,getValue直接返回输入的值即可,当传感器是温度时,getValue返回输入的值除以10即可;

所以这样就实现了上位机针对不同传感器的数据处理!

http://www.wooajung.com/news/30703.html

相关文章:

  • 网站开发缓存湖南长沙关键词推广电话
  • 武汉网站建设制作宁德市教育局官网
  • 家装网站建设多少钱网络推广的方法有
  • 深圳购物商城网站设计百度竞价开户需要多少钱
  • 哪家企业网站做的好流量主广告点击自助平台
  • flash 网站建设免费生成短链接
  • 如何做新网站保留域名百度官网电话
  • 龙岗网站(建设深圳信科)南京seo公司
  • 网站被抄袭怎么投诉发布
  • 梅林 做服务器 网站站长工具 seo综合查询
  • 武汉网站建设ahuaseo网站域名ip查询
  • 汽配公司的网站要怎么做免费b2b网站推广有哪些
  • 四川网站建设套餐营业推广方案怎么写
  • 晋城网站制作上海百度整站优化服务
  • 营销型网站怎么做无锡网站服务公司
  • 网站开发费怎么做会计分录网络营销公司怎么注册
  • 做推送的网站宁波seo推荐推广平台
  • 嘉兴推广公司信息流优化师前景
  • 百度做网站的公司网站排名优化师
  • 大型外贸网站建设百度推广后台登录入口
  • 网站怎么让百度收录seo网站推广推荐
  • 网站后台无法设置深圳网站seo哪家快
  • 武汉制作企业网站关键词seo优化
  • 建水网站开发新闻投稿平台有哪些
  • 手机web页面设计网站seo关键词怎么选
  • 做个外贸网站设计网站优化推广平台
  • 郑州网站建设361哈尔滨百度公司地址
  • 网站实现用户登录哪有网页设计公司
  • 做网站的网页google官网浏览器
  • 如何建立b2c网站南宁网站优化公司电话