CN113343735B - 一种读写器的标签处理方法、读写器及存储介质 - Google Patents

一种读写器的标签处理方法、读写器及存储介质 Download PDF

Info

Publication number
CN113343735B
CN113343735B CN202110895495.9A CN202110895495A CN113343735B CN 113343735 B CN113343735 B CN 113343735B CN 202110895495 A CN202110895495 A CN 202110895495A CN 113343735 B CN113343735 B CN 113343735B
Authority
CN
China
Prior art keywords
queue
tag
preset
data
byte
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110895495.9A
Other languages
English (en)
Other versions
CN113343735A (zh
Inventor
梁甲昌
李玉惠
邓木荣
李德光
李吉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Chengcheng Information Co ltd
Original Assignee
Chainway Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chainway Information Technology Co ltd filed Critical Chainway Information Technology Co ltd
Priority to CN202110895495.9A priority Critical patent/CN113343735B/zh
Publication of CN113343735A publication Critical patent/CN113343735A/zh
Application granted granted Critical
Publication of CN113343735B publication Critical patent/CN113343735B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/10009Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation sensing by radiation using wavelengths larger than 0.1 mm, e.g. radio-waves or microwaves
    • G06K7/10198Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation sensing by radiation using wavelengths larger than 0.1 mm, e.g. radio-waves or microwaves setting parameters for the interrogator, e.g. programming parameters and operating modes

Landscapes

  • Health & Medical Sciences (AREA)
  • Toxicology (AREA)
  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Electromagnetism (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及一种读写器的标签处理方法、读写器及存储介质。本申请公开了一种读取第一标签的产品电子码EPC数据;根据第一标签的EPC数据确定第一队列元素;将第一队列元素添加至预设队列中,其中,预设队列具有缓存边界与队列首指针,队列首指针指向的地址与第一队列元素在预设队列中的位置相关;若队列首指针指向的地址不超过缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至预设队列中,第二队列元素的第一字节为第一队列元素之后的第一个字节,第一标签与第二标签为依次相邻读取到的两个标签;若队列首指针指向的地址超过缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至预设队列的首部。

Description

一种读写器的标签处理方法、读写器及存储介质
技术领域
本发明涉及射频识别技术领域,具体涉及一种读写器的标签处理方法、读写器及存储介质。
背景技术
射频识别(Radio Frequency Identification,RFID)是一种自动识别技术,是构建物联网的关键技术。RFID系统主要由读写器和应答器构成。应答器主要由天线、耦合元件及芯片组成,一般来说用标签作为应答器,每个标签具有唯一的产品电子码(electronicproduct code,EPC),附着在物体上标识目标对象。读写器,或称为阅读器,主要由天线、耦合元件及芯片组成,是读取和/或写入标签信息的设备,可设计为可移动的手持设备或固定设备。
随着超高频(ultra high frequency,UHF)技术的发展越来越成熟,读写器每秒能盘点的标签数量大大提高。这对于处理器处理标签的能力也提出了更高的要求。在标签盘点过程中,盘点到的是标签的产品电子码。但是,在不同的应用场景下由于信息量可能不一样,所以不同标签的EPC长度也可能不一样。通常EPC的长度范围为2至62个字节。一般在具有操作系统的大型处理器中,在接收到一个标签之后就动态地分配一个适合标签EPC长度的内存给该标签,在输出标签之后释放该标签占用的数据内存。这样可以实现内存的回收。但是该具有操作系统的处理器体积较大,而且需要很多外围电路,这种实施方式并不适用于小型化的读写器中。
通常而言,读写器中读写模组的微控制单元(micro controller unit,MCU)中都没有具有能够动态给标签动态分配存储空间的操作系统。这样该MCU无法实现内存回收,而且当MCU长时间工作时,会出现内存溢出,导致设备异常。一般的MCU在处理标签的EPC数据时,都是给每个标签分配了最大长度的内存。这样可以保证EPC数据不会溢出,但是大多数应用场景下,标签的EPC数据都没有达到最大长度,这样剩下的标签内存就会被浪费。而MCU的内存资源本来就很少,这样极大的浪费了MCU的内存。
发明内容
本申请实施例提供一种读写器的标签处理方法、读写器及存储介质。以节省小型化设计的读写器中的内存资源,且能够防止内存溢出。
有鉴于此,本申请第一方面提供了一种读写器的标签处理方法,该方法包括:读取第一标签的产品电子码EPC数据;根据所述第一标签的EPC数据确定第一队列元素;将所述第一队列元素添加至预设队列中,其中,所述预设队列具有缓存边界与队列首指针,所述队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关;若所述队列首指针指向的地址不超过所述缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至所述预设队列中,所述第二队列元素的第一字节为所述第一队列元素之后的第一个字节,所述第一标签与所述第二标签为依次相邻读取到的两个标签;若所述队列首指针指向的地址超过所述缓存边界,则将所述第二标签的EPC数据对应的第二队列元素添加至所述预设队列的首部。
由于该标签的EPC数据的长度可能不一致。所以,当读取到标签之后,将根据标签的EPC数据确定的第一队列元素添加至预设队列中。当队列首指针指向的地址不超过所述缓存边界时,在相邻读取到的第二标签对应的第二队列元素也添加至该预设队列。且第二队列元素的第一字节为所述第一队列元素之后的第一个字节,这样相当于该第一队列元素与该第二队列元素紧邻着存放于该预设队列中,能够节约读写器的内存资源。同时,该队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关,当队列首指针指向的地址超过所述缓存边界时,将该第二标签的EPC数据对应的第二队列元素添加至预设队列的首部。这样可以循环使用该预设队列,从而保证不会出现内存溢出的情况。
可选的,结合第一方面,在一种可能的实现方式中,所述根据所述第一标签的EPC数据确定第一队列元素包括:确定所述第一标签的EPC数据的长度,并将所述第一标签的EPC数据的长度与所述第一标签的EPC数据封装成为所述第一队列元素,其中,所述第一标签的EPC数据的长度占据固定的字节长度;所述将所述第一队列元素添加至预设队列中包括:根据所述第一标签的EPC数据的长度,通过所述队列首指针将所述第一标签的EPC数据中每个字节从头至尾依次遍历,并将所述第一标签的EPC数据中的每个字节添加至所述预设队列中。该第一队列元素中,EPC数据的长度占据的字节长度是固定的,而且,该第一队列元素与第二队列元素是紧邻着存放于该预设队列中,在出列的时候,能够根据该固定字节长度的EPC数据的长度确定需要出列的字节长度,从而不需要留有空白字节就可以区分出该预设队列中字节归属的队列元素,能够提高入列出列的效率,可以节约读写器的内存资源。
可选的,结合第一方面,在一种可能的实现方式中,所述方法还包括:判断所述队列首指针指向的地址是否超过所述缓存边界,其中,所述队列首指针指向的地址为所述预设队列中,所述第一队列元素之后的第一个字节,所述缓存边界距离所述预设队列内存尾地址的字节长度大于或等于所述预设队列中队列元素长度的最大值。需指出,当该第一队列元素完成入列之后,该队列首指针指向的地址为该第一元素之后的第一个字节。此时,可以判断该队列首指针指向的地址是否超过该缓存边界。由于该缓存边界距离该预设队列内存尾指针地址的字节长度大于或等于该预设队列中队列元素字节长度的最大值,则若该队列首指针指向的地址不超过该缓存边界,可以保证第二队列元素入列之后,不会发生内存溢出。当该队列首指针指向的地址超过该缓存边界时,若直接将该第二队列元素入列,则有可能会发生内存溢出。所以,可以将该第二EPC数据对应的第二队列元素添加至该预设队列的首部。这样在实现循环使用该预设队列的同时,可以防止发生内存溢出。
可选的,结合第一方面,在一种可能的实现方式中,所述预设队列具有队列尾指针,所述队列尾指针指向所述预设队列的内存首地址或所述预设队列中第三队列元素之后的第一个字节,所述方法还包括:当所述队列尾指针指向的地址不超过所述缓存边界时,根据所述队列尾指针当前指向的地址,确定第四队列元素中包含的EPC数据长度,其中,所述第四队列元素为预设队列的第一个队列元素,或者该第四队列元素的第一字节为所述第三队列元素之后的第一个字节;根据所述第四队列元素中包含的EPC数据长度,通过所述队列尾指针依次遍历所述第四队列元素中包含的EPC数据中的每个字节,并将所述EPC数据中的每个字节执行出列。该队列尾指针的初始位置位于该预设队列的内存首地址,当执行队列元素的出列之后,该队列尾指针指向该出列元素之后的第一个字节。这样,该队列尾指针所指向的地址都为当前队列元素的第一个字节(该尾指针指向的地址为空字节的情况除外),而从队列元素第一个字节起,固定字节长度的字节为当前元素中包含的EPC数据的长度,从而根据该队列尾指针所指向的地址就能够确认当前队列元素中包含的EPC数据的长度,从而能够将完整的EPC数据执行出列。能够实现该预设队列中队列元素的出列,空出队列中的存储空间,从而使得该预设队列能够循环使用。
可选的,结合第一方面,在一种可能的实现方式中,所述方法还包括:判断所述队列尾指针指向的地址是否超过所述缓存边界;当所述队列尾指针指向的地址超过所述缓存边界时,将所述队列尾指针指向地址设置为所述预设队列的内存首地址。当通过尾指针完成一个队列元素的出列之后,该队列尾指针指向的地址为该出列元素之后的第一个字节。若该出列元素之后的第一个字节的地址超过该缓存边界。那么,可以说明在该尾指针指向的地址之后,没有新的队列元素了。则可以将该尾指针指向的地址设置为预设队列的内存首地址。这样可以实现队列元素的循环出列,能够重复使用该预设队列。
可选的,结合第一方面,在一种可能的实现方式中,所述方法还包括:根据数据串口波特率,以及EPC数据的数据帧长度确定发送一个EPC数据所用的时间;根据理论上读取标签速率峰值、所述发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值,其中,所述EPC数据的数据帧长度与所述读取标签速率峰值呈负相关,所述串口缓冲区独立于处理器;根据所述每秒钟缓存的标签个数的最小值确定所述预设队列的内存大小。该预设队列的内存大小至少需要能够满足每秒钟缓存标签个数的最小值,才可以使得入列和出列过程不会互相影响。从而能够满足循环使用的要求。
可选的,结合第一方面,在一种可能的实现方式中,所述根据数据串口波特率,以及EPC数据的数据帧长度确定发送一个EPC数据所用的时间具体采用如下公式计算:
Figure 218075DEST_PATH_IMAGE001
;
其中,
Figure 135215DEST_PATH_IMAGE002
为所述数据串口波特率,
Figure 603368DEST_PATH_IMAGE003
为EPC数据的数据帧长度,
Figure 998577DEST_PATH_IMAGE004
为所述发送一个EPC数据所用的时间;
所述根据理论上读取标签速率峰值、所述发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值具体采用如下公式计算:
Figure 812950DEST_PATH_IMAGE005
其中,
Figure 573095DEST_PATH_IMAGE006
为所述每秒钟缓存的标签个数,
Figure 840128DEST_PATH_IMAGE007
为将一个标签填充到串口缓冲区中所用的时间,
Figure 39029DEST_PATH_IMAGE008
为所述理论上读取标签速率峰值。
可选的,结合第一方面,在一种可能的实现方式中,所述方法还包括:若确定所述每秒钟缓存的标签个数为负数,则将所述预设队列的内存大小设置为预设内存值。需要指出的是,若确定每秒钟缓存的标签个数为负数,则说明每秒钟处理的标签数量(处理包括发送标签和将标签填充到串口缓冲区)大于理论上读取标签速率峰值。这种情况下,理论上不需要缓存标签,直接读取之后就可以直接转发。但是,由于标签读取的过程中并不一定是均匀的。该理论上读取标签速率峰值是以每两张标签返回时间间隔相同设置的,而实际上每两张标签返回的时间不一定相同。有时候可能连续很短时间内返回多张,则还是需要设置一定的内存来存储标签,这种情况下,可以将该预设队列的内存大小设置为预设内存值。
本申请第二方面提供了一种读写器,该读写器包括:读取模块,用于读取第一标签的产品电子码EPC数据;封装模块,用于根据所述第一标签的EPC数据确定第一队列元素;入列模块,用于将所述第一队列元素添加至预设队列中,其中,所述预设队列具有缓存边界与队列首指针,所述队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关;所述入列模块,还用于当所述队列首指针指向的地址不超过所述缓存边界时,将第二标签的EPC数据对应的第二队列元素添加至所述预设队列中,所述第二队列元素的第一字节为所述第一队列元素之后的第一个字节,所述第一标签与所述第二标签为依次相邻读取到的两个标签;所述入列模块,还用于当所述队列首指针指向的地址超过所述缓存边界时,将所述第二标签的EPC数据对应的第二队列元素添加至所述预设队列的首部。
可选的,结合第二方面,在一种可能的实现方式中,所述入列模块,具体用于:确定所述第一标签的EPC数据的长度,并将所述第一标签的EPC数据的长度与所述第一标签的EPC数据封装成为所述第一队列元素,其中,所述第一标签的EPC数据的长度占据固定的字节长度;所述将所述第一队列元素添加至预设队列中包括:根据所述第一标签的EPC数据的长度,通过所述队列首指针将所述第一标签的EPC数据中每个字节从头至尾依次遍历,并将所述第一标签的EPC数据中的每个字节添加至所述预设队列中。
可选的,结合第二方面,在一种可能的实现方式中,所述入列模块,具体还用于:判断所述队列首指针指向的地址是否超过所述缓存边界,其中,所述队列首指针指向的地址为所述预设队列中,所述第一队列元素之后的第一个字节,所述缓存边界距离所述预设队列内存尾地址的字节长度大于或等于所述预设队列中队列元素字节长度的最大值。
可选的,结合第二方面,在一种可能的实现方式中,所述预设队列具有队列尾指针,所述队列尾指针指向所述预设队列的内存首地址或所述预设队列中第三队列元素之后的第一个字节。该读写器还包括出列模块,该出列模块用于:当所述队列尾指针指向的地址不超过所述缓存边界时,根据所述队列尾指针当前指向的地址,确定第四队列元素中包含的EPC数据长度,其中,所述第四队列元素为预设队列的第一个队列元素,或者第四队列元素的第一字节为所述第三队列元素之后的第一个字节;根据所述第四队列元素中包含的EPC数据长度,通过所述队列尾指针依次遍历所述第四队列元素中包含的EPC数据中的每个字节,并将所述EPC数据中的每个字节执行出列。
可选的,结合第二方面,在一种可能的实现方式中,所述出列模块,具体用于判断所述队列尾指针指向的地址是否超过所述缓存边界;当所述队列尾指针指向的地址超过所述缓存边界时,将所述队列尾指针指向地址设置为所述预设队列的内存首地址。
可选的,结合第二方面,在一种可能的实现方式中,所述读写器还包括队列内存确定模块,该队列内存确定模块用于:根据数据串口波特率,以及EPC数据的数据帧长度确定发送一个EPC数据所用的时间;根据理论上读取标签速率峰值、所述发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值,其中,所述EPC数据的数据帧长度与所述读取标签速率峰值呈负相关,所述串口缓冲区独立于处理器;根据所述每秒钟缓存的标签个数的最小值确定所述预设队列的内存大小。
可选的,结合第二方面,在一种可能的实现方式中,所述队列内存确定模块具体用于执行如下步骤:
发送一个EPC数据所用的时间具体采用如下公式计算:
Figure 707907DEST_PATH_IMAGE001
;
其中,
Figure 888222DEST_PATH_IMAGE002
为所述数据串口波特率,
Figure 642551DEST_PATH_IMAGE003
为EPC数据的数据帧长度,
Figure 379563DEST_PATH_IMAGE004
为所述发送一个EPC数据所用的时间;
确定每秒钟缓存的标签个数的最小值具体采用如下公式计算:
Figure 840631DEST_PATH_IMAGE005
其中,
Figure 270476DEST_PATH_IMAGE006
为所述每秒钟缓存的标签个数,
Figure 197587DEST_PATH_IMAGE007
为将一个标签填充到串口缓冲区中所用的时间,
Figure 410394DEST_PATH_IMAGE008
为所述理论上读取标签速率峰值。
可选的,结合第二方面,在一种可能的实现方式中,所述队列内存确定模块还用于当确定所述每秒钟缓存的标签个数为负数时,将所述预设队列的内存大小设置为预设内存值。
本申请第三方面提供了一种读写器,该读写器包括处理器、存储器、通信接口,该存储器中存储有程序指令,当该程序指令被处理器执行时,以实现如本申请第一方面至第一方面任意一种可能的实现方式中所述的读写器的标签处理方法。
本申请第四方面提供了一种计算机可读存储介质,该计算机可读存储介质存储有程序指令,所述程序指令在计算机上执行时,使得所述计算机执行如本申请第一方面至第一方面任意一种可能的实现方式中所述的读写器的标签处理方法。
本申请提供了一种读写器的标签处理方法、读写器及存储介质。该方法包括:读取第一标签的产品电子码EPC数据;根据所述第一标签的EPC数据确定第一队列元素;将所述第一队列元素添加至预设队列中,其中,所述预设队列具有缓存边界与队列首指针,所述队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关;若所述队列首指针指向的地址不超过所述缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至所述预设队列中,所述第二队列元素的第一字节为所述第一队列元素之后的第一个字节,所述第一标签与所述第二标签为依次相邻读取到的两个标签;若所述队列首指针指向的地址超过所述缓存边界,则将所述第二标签的EPC数据对应的第二队列元素添加至所述预设队列的首部。
由于该标签的EPC数据的长度可能不一致。所以,当读取到标签之后,将根据标签的EPC数据确定的第一队列元素添加至预设队列中。当队列首指针指向的地址不超过所述缓存边界时,在相邻读取到的第二标签对应的第二队列元素也添加至该预设队列。且第二队列元素的第一字节为所述第一队列元素之后的第一个字节,这样相当于该第一队列元素与该第二队列元素紧邻着存放于该预设队列中,能够节约读写器的内存资源。同时,该队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关,当队列首指针指向的地址超过所述缓存边界时,将该第二标签的EPC数据对应的第二队列元素添加至预设队列的首部。这样可以循环使用该预设队列,从而保证不会出现内存溢出的情况。
附图说明
为了更清楚地说明申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本申请实施例提供的一种读写器盘点标签的场景图;
图2是本申请实施例提供的一种读写器的标签处理方法流程图;
图3是本申请实施例提供的一种预设队列的示意图;
图4是本申请实施例提供的一种读写器的标签处理方法中队列元素执行出列的示意图;
图5是本申请实施例提供的一种确定预设队列内存大小的方法流程图;
图6是本申请实施例提供的读写器的功能模块示意图;
图7是本申请实施例提供的读写器的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中出现的术语“和/或”,可以是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中字符“/”,一般表示前后关联对象是一种“或”的关系。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。
本文中的标签,是指RFID标签、射频标签或电子标签,简称为标签(Tag)。本文中的读写器,也称为阅读器(Reader),可以是UHF读写器。本文中的标签盘点系统,是一种RFID系统。本申请实施例技术可用于物流、零售、服装等各种领域。
请参见图1,图1提供了一个读写器盘点标签的场景图。图1中该读写器10可能有大量的标签需要盘点,如图1所示,该读写器带读写的标签可以包括标签20-1,标签20-2,标签20-3……,标签20-N等一个或多个标签。
随着超高频技术发展得越来越成熟,每秒能够盘点标签的性能大大提高。在EPC长度为12字节的情况下,集成射频芯片能够盘点的标签理论峰值速率能够达到900张/秒。不同的应用场景下由于信息量可能不一样,所以不同标签的EPC长度也可能不一样。通常EPC的长度范围为2至62个字节。一般在具有操作系统的大型处理器中,在接收到一个标签之后就动态地分配一个适合标签EPC长度的内存给该标签,在输出标签之后释放该标签占用的数据内存。这样可以实现内存的回收。但是该具有操作系统的处理器体积较大,而且需要很多外围电路,这种实施方式并不适用于小型化的读写器中。
读写器中读写模组的MCU中都没有具有能够动态给标签动态分配存储空间的操作系统。这样该MCU无法实现内存回收,而且当MCU长时间工作时,会出现内存溢出,导致设备异常。一般的MCU在处理标签的EPC数据时,都是给每个标签分配了最大长度的内存。这样可以保证EPC数据不会溢出,但是大多数应用场景下,标签的EPC数据都没有达到最大长度,这样剩下的标签内存就会被浪费。而MCU的内存资源本来就很少,这样极大的浪费了MCU的内存。
所以,本申请提供了一种读写器的标签处理方法,以节省小型化设计的读写器中的内存资源,而且能够防止内存溢出。能够灵活地处理未知长度的标签EPC数据,并且能够循环使用内存,从而不浪费内存资源。
请参见图2,该方法包括:
S100、读取第一标签的EPC数据。
读取第一标签的EPC数据。需要说明的是,一般而言,该EPC数据包括:协议控制(protocol control,PC)、EPC、循环冗余校验码(cyclic redundancy check,CRC)。其中,PC和CRC占用固定两个字节长度,EPC的长度范围一般为2至62个字节。该第一标签可以为读写器读取到的任意一个标签。
S200、根据第一标签的EPC数据确定第一队列元素。
根据第一标签的EPC数据确定第一队列元素。具体的,该第一队列元素可以由该第一标签的EPC数据的长度,与该第一标签的EPC数据封装而成。其中,该EPC数据的长度占据固定的字节长度。在一种较佳的实施方式中,该EPC数据的长度占据1个字节长度。该第一队列元素为该预设队列中任意一个队列元素。
具体的,该第一队列元素可以由两部分组成,分别为EPC数据的长度(LEN)与EPC数据,该EPC数据可以进一步包括三个部分:协议控制(PC)、产品电子码(EPC)以及循环冗余校验码(CRC)组成。其中,LEN占据1个字节,PC占据2个字节,EPC占据2至62个字节,CRC占据2个字节。若该EPC占据12字节,则该EPC数据的总长度为16字节。那么该LEN中记录该第一队列元素中EPC数据的总字节长度为16字节。这样,读写器获取到LEN时,就可以知道向后读几个字节是这个队列元素中的EPC数据占用的字节。
在其他的实施方式中,该LEN记录的字节也可以包含该LEN本身的自己长度。当该EPC数据占据16字节,且该LEN本身占据1字节时,则该LEN记录该第一队列元素的总字节长度为17字节。
S300、将第一队列元素添加至预设队列中。
将第一队列元素添加至预设队列中。具体的,可以通过该队列首指针将该EPC数据中的每个字节从头至尾依次遍历,并将该EPC数据中的每个字节添加至该预设队列中。并且可以根据该第一队列元素中该EPC数据的长度确定添加的字节长度,以保证精确地将该第一队列元素中包含的EPC数据能够从头到尾地添加至该预设队列中,不会遗漏与也不会多增加。
S400、判断队列首指针指向的地址是否超过缓存边界。
判断队列首指针指向的地址是否超过缓存边界。需要说明的是,该预设队列具有缓存边界与该队列首指针。该缓存边界距离预设队列内存尾地址的字节长度大于或等于该预设队列中队列元素字节长度的最大值。
该队列首指针指向的地址与该第一队列元素在该预设队列中的位置相关。具体可以参见步骤S300,当队列首指针将该EPC数据中的每个字节从头至尾依次遍历,并将该EPC数据中的每个字节添加至该预设队列中。即当该EPC数据入列时,该队列首指针在该预设队列中指向的位置依次从该第一队列元素的第一个字节变化到最后一个字节。且当该EPC数据完成入列之后,该队列首指针指向的地址位于该第一队列元素之后的第一个字节。
当该队列首指针指向该第一队列元素之后的第一个字节时,判断该预设队列中,队列首指针指向的地址是否超过该缓存边界。本文中,指针指向的地址不超过缓存边界是指,该指针指向的地址与该预设队列的首地址的距离小于或等于该缓存边界与该预设队列中首地址的距离。反之,指针指向的地址超过缓存边界是指,该指针指向的地址与该预设队列的首地址的距离大于该缓存边界与该预设队列中首地址的距离。
该预设队列的示意图如图3所示,该预设队列具有队列首地址与队列尾地址。该队列首地址为该预设队列的第一个地址,该队列尾地址为该预设队列的最后一个地址。该队列首地址位于该预设队列的首部,该队列尾地址位于该队列的尾部。下文中所述的队列首指针在队列尾指针之前,是指该队列首指针与该队列首地址的距离相较于该队列尾指针与该队列首地址的距离较短。队列尾指针在队列首指针之前,是指该队列尾指针与该队列首地址的距离相较于该队列首指针与该队列首地址的距离较短。反之,所述的队列首指针在队列尾指针之后,是指该队列首指针与该队列首地址的距离相较于该队列尾指针与该队列首地址的距离较长。队列尾指针在队列首指针之后,是指该队列尾指针与该队列首地址的距离相较于该队列首指针与该队列首地址的距离较长。
该预设队列具有缓存边界,该缓存边界距离该队列内存尾指针地址的字节长度大于或等于该预设队列中队列元素字节长度的最大值。这样当插入该预设队列的队列元素中,若队列元素的第一个字节不超过该缓存边界,则可以保证该队列元素能够完成在该预设队列中入列,而不会发生内存溢出。
需要指出的是,该队列元素字节长度的最大值,即为该队列元素中EPC的长度为最大字节长度时,该队列元素的字节长度。具体的,若该EPC占据的字节长度为62个字节,则该队列元素字节长度的最大值为67个字节。
S500、若队列首指针指向的地址不超过缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至预设队列中,且第二队列元素的第一字节为第一队列元素之后的第一个字节。
若队列首指针指向的地址不超过缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至预设队列中,且第二队列元素的第一字节为第一队列元素之后的第一个字节。该第一标签与该第二标签为依次相邻读取到的两个标签。该第二队列元素类似于该第一队列元素,也是由为EPC数据的长度(LEN)、协议控制(PC)、产品电子码(EPC)以及循环冗余校验码(CRC)组成。将该第二队列元素添加至预设队列中详情请参见步骤S300中将第一队列元素添加至预设队列中进行理解,此处不再赘述。
需要说明的是,该队列首指针指向的地址不超过该缓存边界具体是指,该队列首指针指向的地址,距离该预设队列尾地址的字节长度大于或等于该队列元素字节长度的最大值。
这样,该第二队列元素的第一字节为第一队列元素之后的第一个字节,可以提高该队列中内存资源的利用率,能够节约该读写器的内存资源。
S600、若队列首指针指向的地址超过缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至预设队列的首部。
若队列首指针指向的地址超过缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至预设队列的首部。需要说明的是,该队列首指针指向的地址超过该缓存边界具体是指,该队列首指针指向的地址,距离该预设队列尾地址的字节长度小于该队列元素字节长度的最大值。
当该队列首指针指向的地址超过缓存边界时,则说明若继续将该第二队列元素从该队列首指针指向的地址开始入列,则可能会无法将该第二队列元素中的每个字节进行入列,会存在内存溢出的风险。在这种情况下,可以将该第二标签的EPC数据对应的第二队列元素添加至预设队列的首部。
具体的,当该队列首指针指向的地址超过缓存边界时,可以将该首指针指向的地址设置为该预设队列的首地址,则可以将该第二队列元素从该预设队列的首地址开始一个字节一个字节地添加至该预设队列中。将该第二队列元素添加至预设队列中详情请参见步骤S300中将第一队列元素添加至预设队列中进行理解,此处不再赘述。这样可以循环使用该预设队列,从而能够保证不会出现内存溢出的情况。
需要说明的是,上述实施例仅描述了该预设队列中通过该队列首指针实现队列元素入列的情况。该入列的过程相当于给该队列元素中包含的EPC数据动态分配内存的过程。只是将该EPC数据暂时存放于该预设队列中。当到达一个时间或者一个阶段时,需要将该EPC数据转发时候,需要将该EPC数据对应的队列元素执行出列。这样一方面可以动态地给该EPC数据分配一个存储空间;另一方面又可以实现内存的回收,能够循环使用该预设队列,保证不会出现内存溢出的情况。请参见图4,本申请提供的读写器的标签处理方法还可以包括:
S110、判断队列尾指针指向的地址是否超过缓存边界。
判断尾指针指向的地址是否超过缓存边界。需要指出的是,该预设队列还具有队列尾指针,该队列尾指针指向该预设队列的内存首地址,或者该预设队列中第三队列元素之后的第一个字节。该第三队列元素可以为该预设队列中的任意一个队列元素。该队列尾指针的初始位置位于该预设队列的内存首地址。当执行队列元素的出列操作之后,该队列尾指针指向的地址在该出列的队列元素之后的一个字节上。
判断该尾指针指向的地址是否超过该缓存边界,可以参照上述步骤S400至步骤S600进行理解。即判断该尾指针当前指向的地址距离该队列内存尾地址的字节长度是否大于或等于该队列元素字节长度的最大值。当该尾指针当前指向的地址距离该队列内存尾地址的位置大于或等于该队列元素字节长度的最大值时,则说明该尾指针指向的地址不超过该缓存边界。当该尾指针当前指向的地址距离该队列内存尾地址的位置小于该队列元素字节长度的最大值时,则说明队列该尾指针指向的地址超过该缓存边界。
S210、当队列尾指针指向的地址超过缓存边界时,将队列尾指针指向的地址设置为预设队列的内存首地址。
当尾指针指向的地址超过缓存边界时,则说明该尾指针当前指向的地址已经没有存储队列元素了。可以参见上述步骤S600。当队列首地址指向的地址超过缓存边界时,就将带入列的第二队列元素添加至该预设队列的首部。那么,当该尾指针超过缓存边界时,继续将该尾指针向后读取已无意义。则可以直接将该尾指针指向的地址设置为预设队列的内存首地址,则可以继续从头开始执行出列。依次实现预设队列中队列元素的处理,能够空出队列中的存储空间,从而使得该预设队列能够循环使用,能够重复使用该预设队列。
S310、当队列尾指针指向的地址不超过缓存边界时,根据队列尾指针指向的地址,确定第四队列元素中包含的EPC数据长度。
当队列尾指针当前指向的地址不超过缓存边界时,根据队列尾指针当前指向的地址,确定第四队列元素中包含的EPC数据长度。需要说明的是,该第四队列元素为该预设队列中的第一个队列元素,或者该第四元素的第一个字节为该第三队列元素之后的第一个字节。该第三队列元素为该预设队列中任意一个队列元素。
当该队列尾指针当前指向的地址不超过缓存边界时,完成一个队列元素的出列之后,该队列尾指针指向的地址为该第四队列元素的第一个字节。请参见上述步骤S100与步骤S200,每个队列元素的第一个字节为该队列元素的长度。则可以根据当前队列尾指针指向的地址确定该第四队列元素的长度,从而能够将该第四队列元素一个字节一个字节执行出列操作。
S410、通过队列尾指针依次遍历第四队列中包含的EPC数据中的每个字节。
在上述步骤S310中,确定了该第四队列元素的长度之后,通过该队列尾指针将该第四队列元素中的每个字节从头至尾依次遍历,并将该第四队列元素中的每个字节依次执行出列操作。
值的注意的是,前述步骤S100至S600说明了将队列元素进行入列的过程,步骤S110至步骤S410说明了将已入列的队列元素执行出列的过程。但是,为了实现该入列和出列过程互相不干扰,当执行入列之前,需要先确认该队列首指针当前指向的地址与该队列尾指针当前指向的地址。当该队列首指针在该队列尾指针之前时,该读写器可以先确认该队列首指针与该队列尾指针的距离是否小于一个队列元素字节长度的最大值。
需要说明的是,当队列首指针在该队列尾指针之前,且队列首指针与该队列尾指针的距离小于一个队列元素字节长度的最大值时,若直接执行入列操作,则有可能入列的队列元素会覆盖掉该预设队列中未出列的队列元素。这样可能会造成预设队列中队列元素丢失,而丢失EPC数据。所以,当队列首指针与该队列尾指针的距离小于一个队列元素字节长度的最大值时,可以先暂停新的队列元素入列,直至该队列首指针与该队列尾指针的距离大于或等于一个队列元素字节长度的最大值时,再进行入列操作,这样可以避免覆盖该预设队列中已经存储且还未出列的队列元素,能够避免数据丢失。
当该预设队列中,队列首指针和队列尾指针指向同一个地址时,则说明该预设队列正好处于空的状态和完全满的状态。而实际上,当该队列首指针在该队列尾指针之前时,队列首指针与队列尾指针之间的距离小于一个队列元素字节长度的最大值时,就暂停新的队列元素入列,则该预设队列中不会出现完全满的状态。只会出现完全空的状态。而当队列尾指针在队列首指针之前时,可以正常执行入列和出列操作。
需要说明的是,前述当队列首指针与该队列尾指针的距离小于一个队列元素字节长度的最大值时,可以先暂停新的队列元素入列,直至该队列首指针与该队列尾指针的距离大于或等于一个队列元素字节长度的最大值时,在进行入列操作。这种情况是一种比较极限的情况,而一般情况下都不会出现该队列首指针与队列尾指针距离这么近的情况。所以,这对于该预设队列的内存长度提出了很高的要求。如何在不浪费内存的基础上,又能够使得该预设队列能够满足队列元素能够暂时存放于该预设队列,能够有序入列出列而互不干扰。所以,本申请具体还提供了一种确定该预设队列内存大小的方法,请参见图5,该方法还可以包括:
S120、根据数据串口波特率、EPC数据的数据帧长度确定发送一个EPC数据所用的时间。
根据数据串口波特率、EPC数据帧长度确定发送一个EPC数据所用的时间。具体的,可以采用如下公式计算:
Figure 53865DEST_PATH_IMAGE009
;
其中,
Figure 389031DEST_PATH_IMAGE010
为所述数据串口波特率,
Figure 304903DEST_PATH_IMAGE011
为EPC数据的数据帧长度,
Figure 383718DEST_PATH_IMAGE012
为所述发送一个EPC数据所用的时间。
需要说明的是,当队列元素出列之后,需要判断串口会否空闲。当串口空闲,并且队列中有EPC数据时,则EPC数据从队列出列并填充到该串口直接存储器访问(directmemory access,DMA)的发送缓冲区中。该串口DMA发送完成之后,继续判断该预设队列中是否存在队列元素,若有,则继续将队列元素执行出列并填充到该串口DMA发送缓冲区中。
需要说明的是,当队列元素出列之后,还需要将队列元素的格式调整为该标签输出的EPC数据的数据帧格式。其中,该标签输出的EPC数据的数据帧格式包括:帧头(2字节)、帧长度(1字节)、CMD类型(1字节)、EPC数据(N字节)、BBC码(1字节)、帧尾(2字节)。
需要指出的是,当标签输出的EPC数据被填充到串口的DMA缓存区之后,该数据会被自动发送,而不需要处理器MCU的干涉,这样可以节省MCU的资源。
以EPC占据12字节为例,则包含有PC、EPC、CRC的EPC数据占据16个字节。则该标签输出的EPC数据的数据帧格式占用的23个字节。当数据帧格式包括23个字节时,理论上读取标签速率峰值为每秒900张。需要说明的是,EPC数据的数据帧长度与所述读取标签速率峰值呈负相关。当该标签输出的EPC数据的数据帧格式占用的字节越长则理论上读取标签速率峰值越少。
以EPC数据的数据帧长度
Figure 881695DEST_PATH_IMAGE013
=23为例,则该公式可以表示为:
Figure 591025DEST_PATH_IMAGE014
;
对于处理如此数量的数据串口波特率一般为115200至460800,其中,若波特率太低,则会影响效率,需要很大的内存来缓存标签,波特率太高则数据容易丢包。
以下表1为常用的三种波特率发送23个字节数据所用的时间:
波特率 115200 230400 460800
Figure 541664DEST_PATH_IMAGE015
的值(单位ms)
1.6 0.8 0.4
S220、根据读取标签速率峰值、发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值。
根据读取标签速率峰值、发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值。
具体的,可以采用如下公式计算:
Figure 112585DEST_PATH_IMAGE016
其中,
Figure 465069DEST_PATH_IMAGE017
为所述每秒钟缓存的标签个数,
Figure 407617DEST_PATH_IMAGE018
为将一个标签填充到串口缓冲区中所用的时间,
Figure 783234DEST_PATH_IMAGE019
为所述理论上读取标签速率峰值。
如前述步骤S120,当该数据帧格式包括23个字节时,理论上读取标签速率峰值为每秒900张,则
Figure 203851DEST_PATH_IMAGE019
=900。通常而言,将一个标签填充到串口缓冲区中所用的时间
Figure 863372DEST_PATH_IMAGE020
。当
Figure 976821DEST_PATH_IMAGE020
时,
Figure 902052DEST_PATH_IMAGE021
的值如表2所示:
波特率 115200 230400 460800
Figure 64043DEST_PATH_IMAGE022
500 833 1250
则当
Figure 125540DEST_PATH_IMAGE023
时,根据
Figure 112955DEST_PATH_IMAGE024
,则每秒钟缓存的标签个数
Figure 525482DEST_PATH_IMAGE025
的最小值如表3所示:
波特率 115200 230400 460800
Figure 491163DEST_PATH_IMAGE017
400 167 -350
S320、根据每秒钟缓存的标签个数的最小值确定预设队列的内存大小。
如步骤S120所述,以EPC占据12字节为例,则包含有PC、EPC、CRC的EPC数据占据16个字节。加上EPC数据的长度(LEN)占用1个字节长度,那么每个队列元素占用的字节长度为17个字节,那么不同的波特率,在理论上读取标签速率峰值下每秒钟需要给该预设队列分配的内存如表4:
波特率 115200 230400 460800
内存(字节) 400
Figure 672746DEST_PATH_IMAGE026
17=6800
167
Figure 49370DEST_PATH_IMAGE026
17=2839
-
该预设队列的内存大小至少需要能够满足每秒钟缓存标签个数的最小值,才可以使得入列和出列过程不会互相影响。从而能够满足循环使用的要求。
需要说明的是,若上述步骤S220中若确定每秒钟缓存的标签个数为负数,则说明每秒钟处理的标签数量(处理包括发送标签和将标签填充到串口缓冲区)大于理论上读取标签速率峰值。这种情况下,理论上不需要缓存标签,直接读取之后就可以直接转发。但是,由于标签读取的过程中并不一定是均匀的。该理论上读取标签速率峰值是以每两张标签返回时间间隔相同设置的。例如是每隔1.1ms返回一张标签,而实际上每两张标签返回的时间不一定相同。有时候可能很短时间内连续返回多张,则还是需要设置一定的内存来存储标签,这种情况下,可以将该预设队列的内存大小设置为预设内存值。示例性的,当波特率为460800时,可以采用波特率为230400的内存值2839来分配内存。
请参见图6,本申请提供了一种读写器的功能模块示意图。该读写器10可以包括:
读取模块11,用于读取第一标签的产品电子码EPC数据;
封装模块12,用于根据所述第一标签的EPC数据确定第一队列元素;
入列模块13,用于将所述第一队列元素添加至预设队列中,其中,所述预设队列具有缓存边界与队列首指针,所述队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关;
所述入列模块13,还用于当所述队列首指针指向的地址不超过所述缓存边界时,将第二标签的EPC数据对应的第二队列元素添加至所述预设队列中,所述第二队列元素的第一字节为所述第一队列元素之后的第一个字节,所述第一标签与所述第二标签为依次相邻读取到的两个标签;
所述入列模块13,还用于当所述队列首指针指向的地址超过所述缓存边界时,将所述第二标签的EPC数据对应的第二队列元素添加至所述预设队列的首部。
所述入列模块13,具体用于:确定所述第一标签的EPC数据的长度,并将所述EPC数据的长度与所述EPC数据封装成为所述第一队列元素,其中,所述EPC数据的长度占据固定的字节长度;根据所述EPC数据的长度,通过所述队列首指针将所述EPC数据中每个字节从头至尾依次遍历,并将所述EPC数据中的每个字节添加至所述预设队列中。
所述入列模块13,具体还用于:判断所述队列首指针指向的地址是否超过所述缓存边界,其中,所述队列首指针指向的地址为所述预设队列中,所述第一队列元素之后的第一个字节,所述缓存边界距离所述预设队列内存尾地址的字节长度大于或等于所述预设队列中队列元素字节长度的最大值。
所述预设队列具有队列尾指针,所述队列尾指针指向所述预设队列的内存首地址或所述预设队列中第三队列元素之后的第一个字节。该读写器还包括出列模块,该出列模块14用于:当所述队列尾指针指向的地址不超过所述缓存边界时,根据所述队列尾指针当前指向的地址,确定第四队列元素中包含的EPC数据长度,其中,所述第四队列元素为预设队列的第一个队列元素,或者第四队列元素的第一字节为所述第三队列元素之后的第一个字节;根据所述第四队列元素中包含的EPC数据长度,通过所述队列尾指针依次遍历所述第四队列元素中包含的EPC数据中的每个字节,并将所述EPC数据中的每个字节执行出列。
所述出列模块14,具体用于判断所述队列尾指针指向的地址是否超过所述缓存边界;当所述队列尾指针指向的地址超过所述缓存边界时,将所述队列尾指针指向地址设置为所述预设队列的内存首地址。
所述读写器还包括队列内存确定模块15,该队列内存确定模块15用于:根据数据串口波特率,以及EPC数据的数据帧长度确定发送一个EPC数据所用的时间;根据读取标签速率峰值、所述发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值,其中,所述EPC数据的数据帧长度与所述读取标签速率峰值呈负相关,所述串口缓冲区独立于处理器;根据所述每秒钟缓存的标签个数的最小值确定所述预设队列的内存大小。
所述队列内存确定模块15具体用于执行如下步骤:
发送一个EPC数据所用的时间具体采用如下公式计算:
Figure 949193DEST_PATH_IMAGE027
;
其中,
Figure 515303DEST_PATH_IMAGE010
为所述数据串口波特率,
Figure 754655DEST_PATH_IMAGE011
为EPC数据的数据帧长度,
Figure 115229DEST_PATH_IMAGE012
为所述发送一个EPC数据所用的时间;
确定每秒钟缓存的标签个数的最小值具体采用如下公式计算:
Figure 502348DEST_PATH_IMAGE016
其中,
Figure 560565DEST_PATH_IMAGE017
为所述每秒钟缓存的标签个数,
Figure 451160DEST_PATH_IMAGE018
为将一个标签填充到串口缓冲区中所用的时间,
Figure 185898DEST_PATH_IMAGE019
为所述理论上读取标签速率峰值。
所述队列内存确定模块15还用于当确定所述每秒钟缓存的标签个数为负数时,将所述预设队列的内存大小设置为预设内存值。
上面图6从模块化实体的角度对本申请实施例提供的读写器进行了详细描述,下面从硬件处理的角度对本申请实施例中读写器进行详细描述。
图7为本申请提供的一种读写器结构示意图。如图7所示,该读写器20包括处理器21、存储器22和通信接口23,处理器21、存储器22和通信接口23可以通过总线24相连。
该读写器20是一种硬件结构的装置,可以用于如图6所示的读写器10中的各个功能模块的功能。
可选的,上述处理器21可以是一个或多个中央处理器(central processingunit,CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。
该处理器21,用于执行存储器22中的指令,执行上述应用于图2所示的读写器的标签处理方法。该通信接口23,可以包含输入/输出(I/O)接口。
存储器22、处理器21和通信接口23可以通过总线24相互连接,但不限于只能通过总线24连接;总线24可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序指令指示相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
本申请还提供了一种计算机可读存储介质,包括指令,当该指令在计算机设备上运行时,使得该计算机设备执行如本申请任意一个实施例提供的读写器的标签处理方法。
本申请还提供了一种芯片,该芯片包括处理单元和存储单元,该存储单元用于存储计算机操作指令;该处理单元用于通过调用存储单元中存储的计算机操作指令,以执行如本申请任意一个实施例提供的读写器的标签处理方法。
以上对本申请实施例所提供的一种读写器的标签处理方法、读写器及存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (11)

1.一种读写器的标签处理方法,其特征在于,所述方法包括:
读取第一标签的产品电子码EPC数据;
根据所述第一标签的EPC数据确定第一队列元素;
将所述第一队列元素添加至预设队列中,其中,所述预设队列具有缓存边界与队列首指针,所述队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关;
若所述队列首指针指向的地址不超过所述缓存边界,则将第二标签的EPC数据对应的第二队列元素添加至所述预设队列中,且所述第二队列元素的第一字节为所述第一队列元素之后的第一个字节,所述第一标签与所述第二标签为依次相邻读取到的两个标签;
若所述队列首指针指向的地址超过所述缓存边界,则将所述第二标签的EPC数据对应的第二队列元素添加至所述预设队列的首部。
2.根据权利要求1所述的读写器的标签处理方法,其特征在于,所述根据所述第一标签的EPC数据确定第一队列元素包括:
确定所述第一标签的EPC数据的长度,并将所述第一标签的EPC数据的长度与所述第一标签的EPC数据封装成为所述第一队列元素,其中,所述第一标签的EPC数据的长度占据固定的字节长度;
所述将所述第一队列元素添加至预设队列中包括:
根据所述第一标签的EPC数据的长度,通过所述队列首指针将所述第一标签的EPC数据中每个字节从头至尾依次遍历,并将所述第一标签的EPC数据中的每个字节添加至所述预设队列中。
3.根据权利要求1所述的读写器的标签处理方法,其特征在于,所述方法还包括:
判断所述队列首指针指向的地址是否超过所述缓存边界,其中,所述队列首指针指向的地址为所述预设队列中,所述第一队列元素之后的第一个字节,
所述缓存边界距离所述预设队列内存尾地址的字节长度大于或等于所述预设队列中队列元素字节长度的最大值。
4.根据权利要求1所述的读写器的标签处理方法,其特征在于,所述预设队列具有队列尾指针,所述队列尾指针指向所述预设队列的内存首地址或所述预设队列中第三队列元素之后的第一个字节,所述方法还包括:
当所述队列尾指针指向的地址不超过所述缓存边界时,根据所述队列尾指针当前指向的地址,确定第四队列元素中包含的EPC数据长度,其中,所述第四队列元素为所述预设队列的第一个队列元素,或所述第四队列元素的第一字节为所述第三队列元素之后的第一个字节;
根据所述第四队列元素中包含的EPC数据长度,通过所述队列尾指针依次遍历所述第四队列元素中包含的EPC数据中的每个字节,并将所述EPC数据中的每个字节执行出列。
5.根据权利要求4所述的读写器的标签处理方法,其特征在于,所述方法还包括:
判断所述队列尾指针指向的地址是否超过所述缓存边界;
当所述队列尾指针指向的地址超过所述缓存边界时,将所述队列尾指针指向的地址设置为所述预设队列的内存首地址。
6.根据权利要求1至5任意一项所述的读写器的标签处理方法,其特征在于,所述方法还包括:
根据数据串口波特率,以及EPC数据的数据帧长度确定发送一个EPC数据所用的时间;
根据理论上读取标签速率峰值、所述发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值;
根据所述每秒钟缓存的标签个数的最小值确定所述预设队列的内存大小。
7.根据权利要求6所述的读写器的标签处理方法,其特征在于,所述根据数据串口波特率,以及EPC数据的数据帧长度确定发送一个EPC数据所用的时间具体采用如下公式计算:
Figure DEST_PATH_IMAGE001
;
其中,
Figure 816555DEST_PATH_IMAGE002
为所述数据串口波特率,
Figure DEST_PATH_IMAGE003
为EPC数据的数据帧长度,
Figure 936958DEST_PATH_IMAGE004
为所述发送一个EPC数据所用的时间;
所述根据理论上读取标签速率峰值、所述发送一个EPC数据所用的时间、以及将一个标签填充到串口缓冲区中所用的时间,确定每秒钟缓存的标签个数的最小值具体采用如下公式计算:
Figure DEST_PATH_IMAGE005
其中,
Figure 385869DEST_PATH_IMAGE006
为每秒钟缓存的标签个数,
Figure DEST_PATH_IMAGE007
为将一个标签填充到串口缓冲区中所用的时间,
Figure 984341DEST_PATH_IMAGE008
为所述理论上读取标签速率峰值。
8.根据权利要求6所述的读写器的标签处理方法,其特征在于,所述方法还包括:
若确定每秒钟缓存的标签个数为负数,则将所述预设队列的内存大小设置为预设内存值。
9.一种读写器,其特征在于,所述读写器包括:
读取模块,用于读取第一标签的产品电子码EPC数据;封装模块,用于根据所述第一标签的EPC数据确定第一队列元素;
入列模块,用于将所述第一队列元素添加至预设队列中,其中,所述预设队列具有缓存边界与队列首指针,所述队列首指针指向的地址与所述第一队列元素在所述预设队列中的位置相关;
所述入列模块,还用于当所述队列首指针指向的地址不超过所述缓存边界时,将第二标签的EPC数据对应的第二队列元素添加至所述预设队列中,所述第二队列元素的第一字节为所述第一队列元素之后的第一个字节,所述第一标签与所述第二标签为依次相邻读取到的两个标签;
所述入列模块,还用于当所述队列首指针指向的地址超过所述缓存边界时,将所述第二标签的EPC数据对应的第二队列元素添加至所述预设队列的首部。
10.一种读写器,其特征在于,所述读写器包括处理器、存储器、通信接口,所述存储器中存储有程序指令,当所述程序指令被所述处理器执行时,以实现如权利要求1至8中任意一项所述的读写器的标签处理方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序指令,所述程序指令在计算机上执行时,使得所述计算机执行如权利要求1至8中任意一项所述的读写器的标签处理方法。
CN202110895495.9A 2021-08-05 2021-08-05 一种读写器的标签处理方法、读写器及存储介质 Active CN113343735B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110895495.9A CN113343735B (zh) 2021-08-05 2021-08-05 一种读写器的标签处理方法、读写器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110895495.9A CN113343735B (zh) 2021-08-05 2021-08-05 一种读写器的标签处理方法、读写器及存储介质

Publications (2)

Publication Number Publication Date
CN113343735A CN113343735A (zh) 2021-09-03
CN113343735B true CN113343735B (zh) 2021-11-05

Family

ID=77480835

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110895495.9A Active CN113343735B (zh) 2021-08-05 2021-08-05 一种读写器的标签处理方法、读写器及存储介质

Country Status (1)

Country Link
CN (1) CN113343735B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107273774A (zh) * 2013-02-08 2017-10-20 台湾开发建设股份有限公司 电子标签及用于确保电子标签的处理系统与方法
CN108234348A (zh) * 2016-12-13 2018-06-29 深圳市中兴微电子技术有限公司 一种队列操作中的处理方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1258731C (zh) * 2004-09-27 2006-06-07 北京维深电子技术有限公司 电子标签控制系统
KR100612699B1 (ko) * 2005-03-10 2006-08-16 에스케이 텔레콤주식회사 태그 인식 충돌 방지 rfid 시스템 및 태그 식별 방법
CN101114331B (zh) * 2007-08-06 2011-03-16 北京航空航天大学 一种基于epc读写器规约的通用读写器通讯方法
CN106886727A (zh) * 2015-12-15 2017-06-23 江苏稻源微电子有限公司 一种超高频电子标签存储器批量写入的方法
CN110554852B (zh) * 2018-05-31 2021-11-12 赛灵思公司 数据拼接结构、方法及其片上实现

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107273774A (zh) * 2013-02-08 2017-10-20 台湾开发建设股份有限公司 电子标签及用于确保电子标签的处理系统与方法
CN108234348A (zh) * 2016-12-13 2018-06-29 深圳市中兴微电子技术有限公司 一种队列操作中的处理方法及装置

Also Published As

Publication number Publication date
CN113343735A (zh) 2021-09-03

Similar Documents

Publication Publication Date Title
CN102124525B (zh) 虚拟存储器接口
CN111930676B (zh) 多处理器间的通信方法、装置、系统及存储介质
US9596004B2 (en) Method and system of communicating personal health data in a near field communication environment
CN107426113B (zh) 报文接收方法及网络设备
CN105207794A (zh) 统计计数设备及其实现方法、具有统计计数设备的系统
CN106056191A (zh) 多频应答器
CN113138802B (zh) 命令分发装置、方法、芯片、计算机设备及存储介质
CN111538694B (zh) 一种用于网络接口支持多链接和重传的数据缓存方法
CN113343735B (zh) 一种读写器的标签处理方法、读写器及存储介质
CN117076353B (zh) 描述符的配置方法和描述符的配置装置
US8250275B2 (en) Secure MMC standard smartcard with multi-application operation capability, process of operation
CN101621861B (zh) 一种电信智能应用卡处理命令的方法及装置
EP0309676A2 (en) Workstation controller with full screen write mode and partial screen write mode
CN113392667B (zh) 一种读写器的数据传输方法、数据接收器及存储介质
CN113283260B (zh) 多通道读写器通道智能切换的方法、读写器及存储介质
CN108140005B (zh) 在存储器系统协议中提供文件信息的系统及方法
CN108733489A (zh) 数据处理方法、装置、电子设备和存储介质
CN112532531B (zh) 一种报文调度方法及装置
CN117499351A (zh) 报文转发装置及方法、通信芯片及网络设备
CN100472496C (zh) 数据传输装置
CN111124987B (zh) 一种基于pcie的数据传输控制系统和方法
CN111176726A (zh) 可配置的命令撤销方法及其装置
JP7155879B2 (ja) リーダライタ、リーダライタの制御方法、およびプログラム
CN109597786B (zh) 主机与硬件加速模块的交互方法、硬件加速设备及介质
CN108521646A (zh) 一种近场通信方法、装置及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 518102 Floor 9, plant 2, Daqian industrial plant, zone 67, Xingdong community, Xin'an street, Bao'an District, Shenzhen, Guangdong Province

Patentee after: Shenzhen Chengcheng Information Co.,Ltd.

Address before: 518102 Floor 9, plant 2, Daqian industrial plant, zone 67, Xingdong community, Xin'an street, Bao'an District, Shenzhen, Guangdong Province

Patentee before: CHAINWAY INFORMATION TECHNOLOGY Co.,Ltd.