本申请涉及通信技术领域,特别是涉及一种at指令的处理方法、装置和计算机设备。
背景技术:
at即attention,at指令集是从终端设备(terminalequipment,te)或数据终端设备(dataterminalequipment,dte)向终端适配器(terminaladapter,ta)或数据电路终端设备at(datacircuitterminalequipment,dce)发送的用于通信的指令;现有处理at指令的方式都是基于操作系统上的,例如基于handle句柄进行指令处理,或者基于ucous-ⅱ操作系统下接收与解析at指令,基于操作系统的方式有点在于,可以利用任务调度、消息处理机制对指令有效底地处理,但是相对于无操作系统的轻量级单片机,操作系统不仅会消耗单片运行时的ram,而且会减慢单片机的执行效率,因此,基于操作系统上的at指令处理方法不适用于所有类型的处理器。
因此,现有技术有待改进。
技术实现要素:
基于本发明提供一种基于轻量级别的单片机、无操作系统的快速解析、处理at指令的方法,旨在解决无法跑操作系统的轻量级单片机的at指令处理问题,同时也可以应用到操作系统之下,具有通用性。
一种at指令的处理方法,所述方法包括:
a、根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
b、判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
c、返回指令执行结果。
作为进一步的改进技术方案,所述步骤a包括:
a1、获取at响应指令中的分割字符数k;
a2、第一个分割字符前为第一行指令,两个相邻分割字符之间为一行指令,得到k行指令;
a3、将所述k行指令按行排列得到多维at响应数组。
作为进一步的改进技术方案,所述步骤b之前包括:
b01、开启计数器,对判断多维at响应数组中是否存在有效指令的次数进行计数。
作为进一步的改进技术方案,所述步骤b包括:
b11、判断计数器的数值n是否等于分割字符数k,若否,则进入步骤b12,若是,则进入步骤c;
b12、判断多维at响应数组的第n+1行的第一位字符是否为代表有效指令的字符,计数器加1,若是,则第n+1行的第一位字符后的指令为有效指令,进入步骤b13,若否,则进入步骤b11;
b13、处理有效指令并返回步骤b11。
作为进一步的改进技术方案,当k等于3时,所述步骤b还包括:
b21、判断三维at响应数组的第2行的第一位字符是否为代表有效指令的字符;若是,则第2行的第一位字符后的指令为有效指令,进入步骤b22;
b22、处理第2行的第一位字符后的指令,进入步骤c。
作为进一步的改进技术方案,所述分割字符为:\r\n。
作为进一步的改进技术方案,所述代表有效指令的字符为:+。
一种at指令的处理装置,所述装置包括:
分割指令模块,用于根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
判断及处理模块,用于判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
返回结果模块,用于返回指令执行结果。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
a、根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
b、判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
c、返回指令执行结果。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
a、根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
b、判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
c、返回指令执行结果。
有益效果:上述一种at指令的处理方法、装置和计算机设备,所述方法包括:根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;返回指令执行结果。通过采取分割、判断、执行的流程进行at响应指令的分析处理,有效避免了有多个有效指令时遗漏处理的情况,加快了指令的筛选,针对无法跑操作的单片机,提供了代码执行效率,保证产品的稳定性与流畅性,同时也可以应用到操作系统之下,具有通用性。
附图说明
图1为本发明一种at指令的处理方法的流程示意图;
图2为本发明stm32单片机与nb-iot模组通信的框架示意图;
图3为本发明一种at指令的处理方法的软件流程图;
图4为本发明一个实施例中将at指令的处理方法应用在通过nb-iot模组通讯的门锁上的框架示意图;
图5为本发明一个实施例中将at指令的处理方法应用在通过nb-iot模组通讯的门锁上的整体软件流程图;
图6为本发明一种at指令的处理装置的结构框图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
请参阅图1,一种at指令的处理方法,所述方法包括:
s1、根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
本发明采用意法半导体的stm32l071rbt6单片机,stm32l071rbt6单片机的主频可以达到32mhz;如图2所示,单片机发送at指令到nb-iot(narrowbandinternetofthings,窄带物联网)模组,nb-iot模组是一种通信模组,单片机发送at指令到nb-iot模组控制其通信,本发明采用的stm32l071rbt6单片机可以快速响应nb-iot模组返回的数据,同时也拥有4路usart(通用同步/异步串行接收/发送器)串口,可以满足不同的外部通讯模块,执行at指令,返回at响应指令到单片机。
stm32l071rbt6单片机发送at指令后,等待接收nb-iot模组返回的at响应指令,接收at响应指令后对其进行处理。
一维数组是计算机程序中最基本的数组,运用数组可以方便地处理大规模的数据,接收到的at响应指令是一维数组,每个字节按照顺序进行存储,要查找数据就必须对数组进行轮询,会大大减慢数据的处理效率。单片机接收到at响应指令的格式后,识别所述at响应指令中的分割字符,根据分割字符把接收的at响应指令分割成多维数组。
具体的,所述步骤s1包括:
s11、获取at响应指令中的分割字符数k;
s12、第一个分割字符前为第一行指令,两个相邻分割字符之间为一行指令,得到k行指令;
s13、将所述k行指令按行排列得到多维at响应数组。
具体的,所述分割字符为:“\r\n”。
在一个实施例中,at响应指令的格式为at+csq\r\n+csq:19,0\r\n+clts:19/03/29,02:51:46+32\r\nok\r\n,具体的,将结束符“\r\n”作为分割字符,在步骤s11中,可以从at响应指令中获取4个分割字符,第一个分割字符前为第一行指令:“at+csq”;第一个分割字符和第二个分割字符之间的字符为第二行指令:“+csq:19,0”;第二个分割字符和第三个分割字符之间的字符为第三行指令:“+clts:19/03/29,02:51:46+32”;第三个分割字符和第四个分割字符之间的字符为第四行指令:“ok”;将四行指令按行排列得到四维at响应数组,所述四维at响应数组如下:
s2、判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
具体的,所述步骤s2之前包括:
s02、开启计数器,对判断多维at响应数组中是否存在有效指令的次数进行计数。
分割指令后,开启计数器,计数器从0开始计数;开启计数器后,对各行指令进行判断,对有效指令进行处理。
如图3所示,图3是本发明所述at指令的处理方法的软件流程图,在一个实施例中,所述步骤s2包括:
s211、判断计数器的数值n是否等于分割字符数k,若否,则进入步骤s212,若是,则进入步骤s3。
通过判断计数器的数值n是否等于分割字符数k来判断指令是否执行完成,若等于则表示已经执行了k行指令,若否,则说明指令没有执行完成。
由于将结束符当作分割字符,每一条at响应指令都有一个分割字符,即k的值最小为1,而计数器从0开始计数,第一次判断时,n必然小于k。
s212、判断多维at响应数组的第n+1行的第一位字符是否为代表有效指令的字符,计数器加1,若是,则第n+1行的第一位字符后的指令为有效指令,进入步骤s213,若否,则进入步骤s211。
具体的,所述代表有效指令的字符为:“+”。
在未执行完成之前,执行次数必然小于响应数组维数,例如,在步骤s211中判断时,n=0,k=4,则在步骤s212中,多维at响应数组为四维at响应数组,判断四维at响应数组的1行的第一位字符,计数器加1,表示已经对此行是否为有效指令进行判断;若第1行的第一位字符为“+”,则第一位后的指令为有效指令。
s213、处理有效指令并返回步骤b11。
例如,at响应指令的格式为at+csq\r\n+csq:19,0\r\n+clts:19/03/29,02:51:46+32\r\nok\r\n,k=4,k四维at响应数组如下:
第一次判断:
s211中,n=0,k=4,n不等于k,进入步骤s212;
s212中,判断其第n+1行,即第一行的第一位字符是否为:“+”,计数器加1,n为1;由于第一行的第一位字符为“a”,并非代表有效指令的字符“+”,因此直接返回步骤s211。
第二次判断:
s211中,n=1,k=4,n不等于k,进入步骤s212;
s212中,判断其第n+1行,即判断第二行的第一位字符是否为:“+”,计数器加1,n为2;由于第二行的第一位字符为“+”,则其后“csq:19,0”为有效指令,进入步骤s213;
s213中,执行有效指令:“csq:19,0”,执行完成后返回s211。
第三次判断:
s211中,n=2,k=4,n不等于k,进入步骤s212;
s212中,判断其第n+1行,即判断第三行的第一位字符是否为:“+”,计数器加1,n为3;由于第三行的第一位字符为“+”,则其后的“clts:19/03/29,02:51:46+32”为有效指令,进入步骤s213;
s213中,执行有效指令:“clts:19/03/29,02:51:46+32”,执行完成后返回s211。
第四次判断:
s211中,n=3,k=4,n不等于k,进入步骤s212;
s212中,判断其第n+1行,即第四行的第一位字符是否为:“+”,计数器加1,n为4;由于第一行的第一位字符为“o”,并非代表有效指令的字符“+”,因此直接返回步骤s211。
第5次判断:
s211中,n=4,k=4,n等于k,进入步骤s3.
经过5次判断后,已经将四维at响应数组的所有指令都执行完成,上述方法只需要判断每一行的第一个字符是否为代表有效指令的字符,不需要轮询解析每一个字符,加快了指令的筛选。
在一个实施例中,此实施例与上一个实施例的区别在于,此实施例的k等于3,不存在指令叠加,k大于3时,则说明存在指令叠加的情况。
k等于3时,所述步骤s2还包括:
s221、判断三维at响应数组的第二行的第一位字符是否为代表有效指令的字符;若是,则第二行的第一位字符后的指令为有效指令,进入步骤s222;
s222、处理第二行的第一位字符后的指令,进入步骤s3。
由于at指令的格式,若k为3时,分割得到的三维at响应数组的第一行为at开头,最后一行为ok,即第一行和第三行都不会包含有效字符,因此,不需要判断每一行的第一个字符,只需要判断第二行的字符是否为:“+”,若是则处理第二行“+”后的指令,若否,则直接进入步骤s3。
例如,at响应指令的格式为at+csq\r\n+csq:19,0\r\nok\r\n,k=3,三维at响应数组如下:
s221、判断第二行的第一个字符是否为“+”,由于第二行的第一位字符为“+”,则其后“csq:19,0”为有效指令,进入步骤s222;
s222、处理指令“csq:19,0”,进入步骤s3。
s3、返回指令执行结果。
进入s3后,关闭计数器,如果at指令执行成功,“ok”字符串返回;如果at指令语法错误或at指令执行失败,“error”字符串返回。
本发明提供了一个实施例,将at指令的处理方法应用在通过nb-iot模组通讯的门锁上,如图4所示,图4为通过nb-iot模组通讯的门锁框架示意图;nb-iot模组采用的是at指令的控制方式,门锁的主控为无操作系统的轻量型单片机,可选的,门锁的主控为stm32l071rbt6单片机,而nb-iot模组对接的是的afnb协议,所以有信号量查询(at+cso)、网络注册状态(at+creg)、创建afnb基础通信套件(at+alcreate)、初始化(at+alinit)、注册(at+alreg)、登陆(at+allogin)、设备数据上报(at+alupload)七个at指令需要处理。
用户每次用卡片、密码、指纹开锁后,门锁首先会查询信号量,当信号量值大于2时,则认为sim卡与射频部分无误,进行下一步的网络注册状态查询,查询到网络的状态是已附着时,即可进行下一步的afnb套件创建初始化连接的ip和端口、向andlink平台注册、登陆、上报数据,流程结束,门锁休眠。
如图5所示,图5为通过nb-iot模组通讯的门锁的整体软件流程图。用户开锁之后,触发门锁的stm32单片机发送查询信号量的at指令到nb-iot模组,nb-iot模组与中国移动andlink平台通讯,返回的查询信号量的at响应指令到stm32单片机,stm32单片机对查询信号量的at响应指令进行分割,处理其包含的有效指令,处理完后返回指令执行结果,若执行结果是未达到理想阈值,则触发stm32单片机重新发送查询信号量的at指令;若执行结果是信号量达到理想阈值,则再触发stm32单片机发送查询网络注册状态的at指令到nb-iot模组,同样的等待接收nb-iot模组返回查询网络注册状态的at响应指令,并对查询网络注册状态的at响应指令进行处理,判断是否网络注册已经成功,再进行下一步,如此执行完门锁需要的信号量查询(at+cso)、网络注册状态(at+creg)、创建afnb基础通信套件(at+alcreate)、初始化(at+alinit)、注册(at+alreg)、登陆(at+allogin)和设备数据上报(at+alupload)七个at指令,将开锁数据上报到云端。
图5中示出的每一个循环框表示处理一条at指令,处理每一条at指令都是通过图3示出的软件流程图实现。
基于上述的一种at指令的处理方法,本发明还提供了一种at指令的处理装置,请参阅图6,所述装置包括:
分割指令模块50,用于根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
判断及处理模块60,用于判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
返回结果模块70,用于返回指令执行结果。
关于at指令的处理装置的具体限定可以参见上文中对于一种at指令的处理方法的限定,在此不再赘述。上述一种at指令的处理装置中的各个模块可全部通过软件、硬件及其组合来实现。上述各模块可以以硬件形式内嵌于或独立于计算机设备的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行各个模块对应的操作。
在一个实施例中,本发明提供了一种计算机设备,该设备可以是终端,内部结构如图7所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种at指令的处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图7所示的仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
返回指令执行结果。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
根据接收到的at响应指令中的分割字符,将所述at响应指令分割成多维at响应数组;
判断所述多维at响应数组中是否存在有效指令,并对有效指令进行处理;
返回指令执行结果。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。