IoT设备脚本程序的开发部署系统、方法及存储介质与流程

文档序号:17261268发布日期:2019-03-30 09:40阅读:355来源:国知局
IoT设备脚本程序的开发部署系统、方法及存储介质与流程

本发明涉及物联网技术领域,尤其是iot设备脚本程序的开发部署系统、方法及存储介质。



背景技术:

近年来,随着经济的高速发展和物联网行业的快速发展,物联网给人们的工作和生活带来了诸多的好处,到2025年,全球数据总量将会到达160zb,其中有50%的数据来自用户设备,25%来自物联网设备。数据量的增长给物联网的发展带来了一系列的问题,比如网络拥挤,高延迟以及隐私问题等。许多物联网设备对延迟和计算能力的要求很高,为了解决这些问题,边缘计算的概念被提出来,边缘计算是指将本来位于云端的服务器从云端迁至离客户端更近的位置。

但同时,边缘计算也带来了以下两个问题:(1)如何调试分布式动态系统?(2)如何最有效率的动态部署程序?

因此,如何为物联网开发一个轻量级分布式开发系统成为亟待解决的问题。



技术实现要素:

为解决上述技术问题,本发明的目的在于:提供一种延迟小且计算能力强的iot设备脚本程序的开发部署系统、方法及存储介质。

本发明一方面所采取的技术方案为:

iot设备脚本程序的开发部署系统,包括服务器和客户端,其中:

所述服务器包括:

web服务器,用于提供外部设备的访问接口以及提供restful服务;

核心组成转储组件,用于存储脚本程序的崩溃信息;

调试器服务器,用于接收用户发出的调试指令以及收集系统运行信息;

混合运行引擎,用于执行脚本程序以及优化脚本程序的开发运行环境;

所述客户端包括:

编译器,用于将原生高级语言编译成机器代码;

调试器客户端,用于传输用户发出的调试指令。

进一步,所述服务器和客户端通过restfulapi实现数据通讯。

进一步,所述混合运行引擎包括本地引擎和脚本引擎,所述脚本引擎建立在虚拟机上,所述本地引擎建立在操作系统上;

其中,所述本地引擎,用于执行本地脚本应用程序;

所述脚本引擎,用于提供脚本程序的运行环境以及管理脚本程序的生命周期。

进一步,所述本地引擎还用于:

调用物联网设备的cpu和ram存储资源;

提供对物联网设备资源的访问,所述物联网设备包括gpio、flash和uart;

提供定时、系统时间访问以及网络访问的功能;

提供动态注册restful资源和取消restful资源的功能。

进一步,所述服务器还包括rest引擎;

所述rest引擎,用于提供基于coap或http协议的松散耦合restful服务。

本发明另一方面所采取的技术方案是:

iot设备脚本程序的开发部署方法,包括以下步骤:

通过客户端的编译器将原生高级语言编译成机器代码;

通过客户端的调试器客户端将调试指令发送至服务器;

通过服务器的调试器服务器接收调试指令并收集系统运行信息;

通过服务器的混合运行引擎执行脚本程序以及优化脚本程序的开发运行环境;

通过服务器的核心组成转储组件存储脚本程序的崩溃信息;

通过服务器的web服务器提供外部设备的访问接口以及提供restful服务。

进一步,所述通过服务器的混合运行引擎执行脚本程序以及优化脚本程序的开发运行环境这一步骤,包括以下步骤:

通过脚本引擎提供脚本程序的运行环境以及管理脚本程序的生命周期;

通过本地引擎调用物联网设备的cpu和ram存储资源;

通过本地引擎提供对物联网设备资源的访问,所述物联网设备包括gpio、flash和uart;

通过本地引擎提供定时、系统时间访问以及网络访问的功能;

通过本地引擎提供动态注册restful资源和取消restful资源的功能。

进一步,所述通过服务器的混合运行引擎执行脚本程序以及优化脚本程序的开发运行环境这一步骤,还包括以下步骤:

通过rest引擎提供基于coap或http协议的松散耦合restful服务;

所述通过rest引擎提供基于coap或http协议的松散耦合restful服务这一步骤,具体为:

通过rest引擎进行宏定义,创建得到rest资源;

向rest资源中添加缓存时间变量;

为rest资源的http请求指定缓存时间。

进一步,所述服务器和客户端通过restfulapi实现数据通讯。

本发明另一方面所采取的技术方案是:

存储介质,其中存储有处理器可执行的指令,所述处理器可执行的指令在由处理器执行时用于执行所述的iot设备脚本程序的开发部署方法。

本发明的有益效果是:本发明通过服务器和客户端,实现了分布式动态调试、分布式动态程序开发以及分布式动态程序部署;再者,本发明还通过混合运行引擎,提供了混合式运行环境,降低了内存占用空间,提高了系统计算能力;另外,本发明在服务器和客户端上分别设置了调试器服务器和调试器客户端,降低了服务器和客户端之间数据传输的延迟。

附图说明

图1为本发明实施例的系统结构示意图。

具体实施方式

下面结合说明书附图和具体实施例对本发明作进一步解释和说明。

如图1所示,本发明实施例提供了一种iot设备脚本程序的开发部署系统,包括服务器和客户端,其中:

所述服务器包括:

web服务器,用于提供外部设备的访问接口以及提供restful服务;

核心组成转储组件,用于存储脚本程序的崩溃信息;

调试器服务器,用于接收用户发出的调试指令以及收集系统运行信息;

混合运行引擎,用于执行脚本程序以及优化脚本程序的开发运行环境;

所述客户端包括:

编译器,用于将原生高级语言编译成机器代码;

调试器客户端,用于传输用户发出的调试指令。

其中,开发者可以根据本发明的系统,在客户端上创建一个原生的开发系统,然后将开发系统部署在服务器上,开发人员可以在客户端中创建本机和脚本应用程序并将它们上传并部署在服务器端上的使用restfulapi的设备,然后也可以通过restfulapi来控制并调试核心组成转储组件。

本实施例中,编译器将原生c语言编译成机器代码,在一些实施例中,高级语言还包括fortran、pascal、cobol、c++、basic、ada、java、c#等,在此不再赘述。

本实施例中,调试器服务器的作用包括:(1)获取功能:获取系统当前的运行环境,包括声明变量,当前正在执行的代码和功能信息;(2)单步调试功能:逐行运行程序以及程序区块运行程序;(3)断点调试功能:包括添加,删除,启用和禁用断点上的操作;(4)回溯功能:列出调用当前功能的堆栈信息。

本实施例的核心组成转储组件实现了stm32l152核心转储的机制。当程序崩溃的时候,通过核心组成转储组件,能够快速找到当时存储的崩溃信息。核心转储是指当程序崩溃或其他原因导致系统中断时,程序运行过程中内存中的记录和其他状态,如寄存器值,堆栈指针和内存管理信息等,将被存储在文件系统中供将来访问。核心转储函数库位于操作系统内核的底层,能够与设备的硬件进行通信并与固件相关联。核心转储过程的结果可以直接通过客户端发送给开发人员,也可以存储在东西设备的rom中。在程序执行过程中,核心转储机制不会影响程序的正常执行过程,也不需要额外的存储空间,而且,当发生崩溃时,只需要一些额外的存储空间来保存异常信息和执行状态。

本实施例实现了基于stm32l152开发板的核心转储机制。stm32l152板配备armcortex-m3cpu,其关键运行时间故障可分为四种类型:hardfault,busfault,usagefault,memorymanagementfault。当程序崩溃时出现其中一个故障,本实施例根据上下文寄存器中的标志状态找到原因。当发生故障时,核心转储模块在sp和lr寄存器的帮助下,在rom的指定地址记录每层的功能栈指针,然后借助addr2line工具读取rom上的错误记录,可以恢复完整的函数回调堆栈信息。另外,由于设备存储的严格限制,当发生严重故障时,本实施例只保存功能堆栈指针。

本实施例的web服务器运行在操作系统中,作为与外部交互的通用接口。它为事物设备提供统一的访问接口,以将其数据和功能展示给云端。另外,在线调试和脚本加载也可以通过微型web服务器提供的restful服务来执行。与传统的嵌入式系统相比,它极大地简化了应用程序开发,开发人员必须构建复杂而脆弱的交叉编译环境来编辑,编译,加载和调试应用程序。

进一步作为优选的实施方式,所述服务器和客户端通过restfulapi实现数据通讯。本实施例采用restfulapi作为服务器端和前端之间的粘合剂,脱离了传统的单向开发环境,实现客户端与服务器的双向交互通讯。

进一步作为优选的实施方式,所述混合运行引擎包括本地引擎和脚本引擎,所述脚本引擎建立在虚拟机上,所述本地引擎建立在操作系统上;

其中,所述本地引擎,用于执行本地脚本应用程序;

所述脚本引擎,用于提供脚本程序的运行环境以及管理脚本程序的生命周期。

具体地,本实施例的混合式运行引擎包括:(1)脚本引擎,搭建在虚拟机上,用于提供运行时环境以及管理脚本生命周期;(2)本地引擎,建立在操作系统之上,为mcu提供统一入口和控制管理。

本实施例的脚本引擎采用lua脚本引擎,脚本引擎建立在脚本虚拟机上。它提供运行时环境,并管理脚本应用程序的生命周期。本实施例使用虚拟机来动态解释脚本,其中,脚本语言不仅可以实现诸如选择、分支和循环等功能,还提供了部分本地引擎才能实现的操作和功能。因此,用户可以通过脚本语言实现与原生c代码相同的功能。本实施例的脚本虚拟机对脚本编译的字节码进行解释。

本实施例基于lua内核来构建系统,并针对脚本应用程序进行开发,以及对运行时的环境进行优化。lua是一种轻量级的脚本语言,可以嵌入到其他语言编写的应用程序中运行。lua的占用空间比大多数脚本语言都小,而且,lua严格遵循ansic标准,具有良好的可移植性,只需进行少量更改,用lua编写的程序就能够在资源受限的设备上运行。另外,lua是最快速的解释性脚本语言之一。

另外,由于lua具有多种版本,而各种版本的lua的功能也不同,其中,协程和闭包的特性是高版本lua提供的函数式编程中的重要概念。但是,设备上的应用程序却不需要使用协程和闭包的特性。在lua2.5.1版本中,虚拟机可以使用堆栈或寄存器来实现。由于基于堆栈的虚拟机的占用空间更小,因此,本实施例选择lua2.5.1作为lua-lite的基础,实现了一个基于堆栈的虚拟机来解释事物设备上的lua-lite脚本。

一般来说,执行风格通常包括使用命令行或者使用虚拟机来进行解释执行。脚本首先会被编译为字节码,然后将其上传到设备并解释为lua中的程序指令。而由于lua具有由lex生成的词法分析器和它自己的解析器,因此本实施例的虚拟机在执行字节码时不需要进行词法分析、解析或生成执行指令。另外,在用户设备上执行脚本程序时也不需要进行用户交互。

本实施例将lua的运行过程分为两部分,然后分别将它们分布在台式pc(服务器)和设备(客户端)上,以减少设备的内存占用。当开发人员为脚本执行联机调试时,调试器客户端通过restfulapi与调试器服务器进行交互。编译器将lua-lite源代码编译为字节码并将其保存为二进制文件。另外,本实施例的脚本引擎还提供语法检查和文件大小检查的功能。

lualinehook为脚本源代码的目标行添加了一个钩子。在执行目标行之前,本发明实施例可以先执行开发人员定义的函数。luacallhook是每次进入和离开功能时执行的挂钩功能。在lua-lite中,本实施例实现了基于原始lua提供的lua线钩功能的五种不同的钩子函数。

具体地,五个钩子函数包括:

(1)nonehook:初始化调试器,它将函数堆栈深度的初始值设置成-1;(2)continuehook:移至代码的下一个可执行代码行;(3)stephook:单步调试,当遇到子功能时,进入子功能并继续执行单步调试,否则移至下一个可执行代码行;(4)nexthook:执行一个步骤,与stephook不同的是,如果遇到子功能,nexthook在完成子功能执行后停止,而不是进入子功能;在nexthook中,需要检查当前函数的堆栈深度;在调用nexthook之前,它不应超过当前函数的堆栈深度;假设函数a的代码正在执行,然后调用nexthook,并且mcu的指针计数进入子函数b,函数b的堆栈深度不应该比a的堆栈深;(5)runhook:继续从当前代码行执行程序,直到程序结束或遇到断点。

进一步作为优选的实施方式,所述本地引擎还用于:

调用物联网设备的cpu和ram存储资源;

提供对物联网设备资源的访问,所述物联网设备包括gpio、flash和uart;

提供定时、系统时间访问以及网络访问的功能;

提供动态注册restful资源和取消restful资源的功能;

对于本地引擎,本实施例的本地引擎用于执行lua-lite脚本应用程序的本地部分,本实施例的本地引擎放弃了词法分析,解析和指令生成的组件。在设备上运行的虚拟机只接受编译后的字节码文件,能够减少大约30%的占用空间。这种机制极大地提高了脚本编程的效率。由于只需简单计算一些设备,lua-lite会删除io操作库和lua的数学库。通过这些修改,虚拟机在lualite上编译的二进制文件的大小从103kb减少到61kb。

本实施例的本地引擎位于操作系统之上,它为脚本应用程序提供了连接到mcu等外设的统一访问和控制接口。传感器(例如,温度,湿度,加速度)和其他外围设备(例如,gpio,uart,spi,flash)可以被注册为rest资源。在传统方法中,由于基于mcu的器件外设的多样性,使用脚本语言编写外设资源非常困难,开发人员必须为传统嵌入式系统中的每个外设编写应用程序驱动程序,而其他程序员可能需要阅读sdk文档或源代码来创建基于这些驱动器的应用程序,这种方法需要专业技能和经验,大大增加了人力和时间成本。本发明根据rest统一接口原则对进行资源访问的元方法进行抽象,其中元方法包括创建、读取、写入和删除。

缓存机制可以显著减少http请求的延迟。它可以降低边缘计算系统的不确定性。但是,由于http最初不支持缓存,因此本实施例在本地引擎中添加了http缓存支持,以提高脚本应用程序的体验质量(即qoe)。本实施例的本地引擎的主要功能如下所示:(1)能够调用物联网设备的cpu和ram存储资源,实现选择,分支,循环等基本编程语言功能;(2)提供了对gpio,flash和uart等物联网设备资源的访问;(3)实现了物联网设备的许多操作,例如打开,读取,写入,关闭等;(4)提供部分支持功能,如定时,访问系统时间,网络访问等功能;(5)它提供网络访问来获取他们自己或其他设备的rest网络资源,同时,它还可以实现不同设备之间的数据交换和访问;(6)它提供了restful资源的动态注册和取消功能。

进一步作为优选的实施方式,所述服务器还包括rest引擎;

所述rest引擎,用于提供基于coap或http协议的松散耦合restful服务。

具体地,为了方便开发者实现iot资源的restful访问接口,本发明的contikios还配备了rest引擎。rest引擎提供了基于coap或http协议的松散耦合restful服务。contiki的官方rest引擎通过宏定义实现了rest资源的创建,但它不支持缓存http请求。对于此,本发明将一个缓存时间变量添加到资源结构的定义中。在定义宏时,用户可以为指定资源的http请求指定缓存时间。本发明利用缓存机制,可以大大缩短响应时间,提高边缘计算系统的性能和脚本应用的可靠性。

本发明实施例还提供了一种iot设备脚本程序的开发部署方法,包括以下步骤:

通过客户端的编译器将原生高级语言编译成机器代码;

通过客户端的调试器客户端将调试指令发送至服务器;

通过服务器的调试器服务器接收调试指令并收集系统运行信息;

通过服务器的混合运行引擎执行脚本程序以及优化脚本程序的开发运行环境;

通过服务器的核心组成转储组件存储脚本程序的崩溃信息;

通过服务器的web服务器提供外部设备的访问接口以及提供restful服务。

进一步作为优选的实施方式,所述通过服务器的混合运行引擎执行脚本程序以及优化脚本程序的开发运行环境这一步骤,包括以下步骤:

通过脚本引擎提供脚本程序的运行环境以及管理脚本程序的生命周期;

通过本地引擎调用物联网设备的cpu和ram存储资源;

通过本地引擎提供对物联网设备资源的访问,所述物联网设备包括gpio、flash和uart;

通过本地引擎提供定时、系统时间访问以及网络访问的功能;

通过本地引擎提供动态注册restful资源和取消restful资源的功能。

进一步作为优选的实施方式,所述通过服务器的混合运行引擎执行脚本程序以及优化脚本程序的开发运行环境这一步骤,还包括以下步骤:

通过rest引擎提供基于coap或http协议的松散耦合restful服务;

所述通过rest引擎提供基于coap或http协议的松散耦合restful服务这一步骤,具体为:

通过rest引擎进行宏定义,创建得到rest资源;

向rest资源中添加缓存时间变量;

为rest资源的http请求指定缓存时间。

进一步作为优选的实施方式,所述服务器和客户端通过restfulapi实现数据通讯。

此外,本发明实施例还提供了一种存储介质,其中存储有处理器可执行的指令,所述处理器可执行的指令在由处理器执行时用于执行所述的iot设备脚本程序的开发部署方法。

综上所述,本发明基于物联网设备和标准化的restfulapi系统,其中,restfulapi简化了数据处理和设备管理操作。关键技术点在于两个方面:(1)基于luascript的iot设备开发调试环境;(2)提供缓存rest请求的功能,restful分布式开发环境将传统编译器和调试器转化为标准restful开发模式并能提供混合式运行环境,从而实现调试分布式动态系统以及动态部署程序。本发明的界面统一,开发人员可以在任何地方进行脚本程序开发和调试。

以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1