一种节省内存的实现方法及装置的制造方法

文档序号:8322221阅读:259来源:国知局
一种节省内存的实现方法及装置的制造方法
【技术领域】
[0001]本发明涉及蓝牙技术领域,特别涉及一种节省内存的实现方法及装置。
【背景技术】
[0002]蓝牙技术已有十多年的历史,大量用于手机、无线耳机等领域。近年来由于蓝牙协议4.0的发布,其中低功耗规范将蓝牙技术推广至更为广泛的低成本应用领域,如仪表监控等。降低蓝牙协议栈的内存,不仅降低了设备的硬件成本,而且可降低设备功耗,延长设备的使用时间,对于蓝牙低功耗设备有着重大意义。现有技术中,降低蓝牙协议栈的内存的实现方式一般是在原有协议栈上进行修改,例如通过重组技术实现,即在蓝牙栈的每层,预先分配重组所需要的内存,各层重组用各自的内存,但是如果进行大量的重组就需要大量的内存,并不能真正达到优化内存的效果。现有的在原有协议栈上进行修改的实现方式虽然可以降低开发风险,但是内存优化效果并不明显,如何使内存优化效果达到最好的同时还不影响设备的性能是现有技术亟待解决的问题。

【发明内容】

[0003]为了解决现有技术中提高内存优化效果的时候会影响设备性能的问题,本发明提供了一种节省内存的实现方法及装置。所述技术方案如下:
[0004]本发明采用的技术方案:
[0005]一种节省内存的实现方法,包括:
[0006]当接收到分片时,判断重组缓冲区中是否存储有与所述接收到的分片为同类型的分片,是则将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,如组合结果为一个完整的数据包则将组合得到数据包发送给上层。
[0007]进一步地,在上述方法中,如所述组合结果不为一个完整的数据包则等待接收分片;
[0008]如判断重组缓冲区中没有与所述接收到的分片同类型的分片,则将所述接收到的分片存储到所述重组缓冲区中,等待接收分片。
[0009]进一步地,所述判断重组缓冲区中是否存储有与所述接收到的分片为同类型的分片之前还包括:判断接收到的分片是否为一个完整的数据包,是则结束,否则继续。
[0010]进一步地,所述将所述接收到的分片存储到所述重组缓冲区中具体为:调用Lock函数将接收到的分片存储到重组缓冲区的尾部。
[0011]进一步地,所述将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,具体为:调用Unlock函数将所述重组缓冲区中存储的同类型的分片取出后再与所述接收到的分片进行组合。
[0012]进一步地,所述将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,具体为:
[0013]A、设置一个数组变量,将所述重组缓冲区中存储的同类型的分片作为当前分片;
[0014]B、判断当前分片的数据长度是否大于所述数组变量的长度,是则执行E,否则执行C;
[0015]C、从所述重组缓冲区中读取当前分片的数据,并将其写入到所述数组变量中,将当前分片之后的分片移动到当前分片的位置处;
[0016]D、读取所述数组变量中的数据并将其写入到所述重组缓冲区中所述接收到的分片的首部之前;
[0017]E、从所述重组缓冲区中的当前分片中读取与数组变量长度相等的数据,并将读取的数据写入到所述数组变量中,将当前分片之后的分片移动到当前分片中已读取完数据的位置处;
[0018]F、读取所述数组变量中的数据并将其写入到所述重组缓冲区中接收到的分片的首部之前,用所述重组缓冲区中当前分片的剩余数据更新当前分片,返回B。
[0019]一种节省内存的实现装置,包括:
[0020]接收模块,用于接收分片;
[0021]第二判断模块,用于判断重组缓冲区中是否存储有与所述接收到的分片为同类型的分片,是则触发组合模块;
[0022]所述组合模块,用于将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合;
[0023]第三判断模块,用于判断所述组合模块的组合结果是否为一个完整的数据包,是则触发所述发送模块,否则触发所述接收模块;
[0024]所述发送模块,用于将组合得到数据包发送给上层。
[0025]进一步地,上述装置还包括:存储模块,用于当所述第二判断模块判断为否时将所述接收到的分片存储到所述重组缓冲区中;所述第三判断模块判断为否是触发所述接收模块。
[0026]进一步地,上述装置还包括:第一判断模块,用于判断接收到的分片是否为一个完整的数据包,是则结束,否则触发所述第二判断模块。
[0027]进一步地,所述组合模块包括:
[0028]设置单元,用于设置一个数组变量,将所述重组缓冲区中存储的同类型的分片作为当前分片;
[0029]第一判断单元,用于判断当前分片的数据长度是否大于所述数组变量的长度,是则触发第二读取写入单元,否则触发第一读取写入单元;
[0030]所述第一读取写入单元,用于从所述重组缓冲区中读取当前分片的数据,并将其写入到所述数组变量中;
[0031]第一移动单元,用于将当前分片之后的分片移动到当前分片的位置处;
[0032]所述第二读取写入单元,用于读取所述数组变量中的数据并将其写入到所述重组缓冲区中接收到的分片的首部之前;
[0033]第三读取写入单元,用于从所述重组缓冲区中的当前分片中读取与数组变量长度相等的数据,并将读取的数据写入到所述数组变量中;
[0034]第二移动单元,用于将当前分片之后的分片移动到当前分片中已读取完数据的位置处;
[0035]第四读取写入单元,用于读取所述数组变量中的数据并将其写入到所述重组缓冲区中接收到的分片的首部之前,用所述重组缓冲区中当前分片的剩余数据更新当前分片。
[0036]本发明实施例提供的技术方案带来的有益效果是:
[0037]本发明的技术方案在实现过程中,当接收到一个分片时首先判断重组缓冲区中有没有同类型的分片,如果有则将接收到的分片与存储的同类型分片进行组合,如果组合结果为一个完整的数据包则将数据包发送给上层,使蓝牙协议栈中的每一层都可进行分片重组,且所有重组都在同一缓冲区中实现,节省了内存,不会增大其它协作软件内存的消耗,还能保证产品原有的性能和兼容性等质量标准。
【附图说明】
[0038]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039]图1为本发明实施例一提供的一种节省内存的实现方法流程图;
[0040]图2为本发明实施例一中步骤S4中进行组合的实现过程流程图;
[0041]图3为实施例一中的蓝牙栈的一个常规实现结构图;
[0042]图4为本发明实施例一提供的具体实例的实现过程示意图;
[0043]图5为本发明实施例二提供的一种节省内存的实现装置方框图;
[0044]图6为本发明实施例二提供的组合模块的方框图。
【具体实施方式】
[0045]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0046]实施例一
[0047]本发明实施例一提供一种节省内存的实现方法,具体的通过重组共用内存来实现,即重组共用一个缓冲区,本实施例的方法如图1所示,包括:
[0048]步骤SO:当接收到分片时,判断接收到的分片是否为一个完整的数据包,是则结束,否则执行步骤SI ;
[0049]在本实施例中,如判断接收到分片是一个完整的数据包,则不需要重组,如判断接收到分片不是个完整的数据包,在接收到分片时将向服务器发起重组请求,申请使用该重组缓冲区,实现重组共用过程。
[0050]步骤S1:判断重组缓冲区中是否存储有与接收到的分片为同类型的分片,是则执行步骤S3,否则执行步骤S2 ;
[0051]本实施例中分片为下层发送的发片;如重组缓冲区中有同类型的分片,则说明此前已经收到过同类型的分片,此时再收到一个同类型分片就需要将接收到的分片与存储的同类型分片进行合并;如重组缓冲区中没有同类型的分片,则说明接收到的分片是这个类型的第一个分片,需要存储起来在下次接收到同类型分片时进行合并重组;
[0052]步骤S2:将接收到的分片存储到重组缓冲区中,返回步骤SI ;
[0053]具体的,在本实施例中,调用Lock函数将接收到的分片存储到重组缓冲区的尾部,重组缓冲区占用的字节数增大,在下次收到同类型的分片后就需要与这次存储的分片进行合并重组;
[0054]步骤S3:将重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,判断组合结果是否为一个数据包,是则将组合得到数据包发送给上层,返回步骤Si;否则直接返回步骤SI ;
[0055]具体的,在本实施例中,调用Unlock函数将重组缓冲区中存储的同类型的分片取出后再与接收到的分片进行组合,重组缓冲区中存储的同类型的分片被取出后其后面分片向前移动来填补该分片所占空间,最后将组合得到的数据包从重组缓冲区中取出并将其发送给上层,从而重组缓冲区占用的字节数减小。
[0056]本实施例中,将一个数据包被分成的几个分片,每次接收到一个分片后都与上一次存储下来的分片进行合并重组成为一个新的分片,直到接收到最后一个分片时,就该分片与存储的分片进行合并重组为一个完整的数据包后发送给上层。这个数据包合并重组处理完成后,就开始对下一个数据包进行合并重组,实现方式相同,在此不再赘述。
[0057]如图2所示,将重组缓冲区中存储的同类型的分片与接收到的分片进行组合的实现过程包括:
[0058]A、设置一个数组变量,将重组缓冲区中存储的同类型的分片作为当前分片;
[0059]B、判断当前分片的数据长度是否大于数组变量的长度,是则执行E,否则执行C ;
[0060]C、从重组缓冲区中读取当前分片的数据,并将其写入到数组变量中,将当前分片之后的分片移动到当前分片的位置处;
[0061]D、读取数组变量中的数据并将其写入到重组缓冲区中接收到的分片的首部之
N /.1IJ ;
[0062]E、从重组缓冲区中的当前分片中读取与数组变量长度相等的数据,并将读取的数据写入到数组变量中,将当前分片之后的分片移动到当前分片中已读取完数据的位置处;
[0063]F、读取数组变量中的数据并将其写入到重组缓冲区中接收到的分片的首部之前,用重组缓冲区中当前分片的剩余数据更新当前分片,返回B。
[0064]在本实施例中,Lock/unlock函数的参数为句柄,在重组缓冲区的过程中,对于不同层的分片可自由移动,但是由于句柄的值是固定的,所以可准确访问缓冲区中的数据;且所有
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1