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

文档序号:8322221阅读:来源:国知局
重组都在同一缓冲区中实现,节省了内存,也不会增大其它协作软件内存的消耗,还能保证产品原有的性能和兼容性等质量标准。
[0065]下面结合具体的实例来说明本实施例方法的实现过程,参见图3,为蓝牙栈的一个常规实现,其中有大量的重组缓冲:重组缓冲区a是需要将多个HCI (英文全称:HostController Interface,中文全称:主控制器接口)发送的分片重组成一个L2CAP (英文全称:Logical Link Control and Adaptat1n Protocol,中文全称:逻辑链路控制和适配协议)包,重组缓冲区b是某个profile自身的包被分成了多个片,然后需要重新组合的缓冲区。
[0066]接收到分片的处理过程如图4所示,接收到分片后将其顺序存储到分组缓冲区中;
[0067](I)重组缓冲区存储有一个分片A,接收到分片I ;
[0068](2)由于重组缓冲区中没有与分片I同类型的分片,所以将该分片I暂存在重组缓冲区中,即将分片I缓冲在重组缓冲区尾部,此时重组缓冲区增大;
[0069](3)当接收到下层发送的不同类型分片C并将其暂存到重组缓冲区中;
[0070](4)当接收到分片2,调用lock函数将分片2存储到重组缓冲区中;
[0071](5)由于重组缓冲区中已经存储了与分片2为同类型的分片1,所以调用Unlock函数,从重组缓冲区中取出分片I将其与分片2组合为新的分片2+ ;在重缓冲区中,分片C向前移动填补了分片I的位置。
[0072](6)如果没有完成重组,将分片2+暂存在重组缓冲区中。
[0073]具体的,从重组缓冲区中取出分片I将其与分片2重组为新的分片2+的具体实现方式包括:
[0074]a、定义一个数组变量;本实施例中的数组变量长度可自行定义,例如定义为16字节,数组变量分配在软件运行栈上,可自动释放。
[0075]b、将分片I尾部的与数组变量等长的数据读出来写入到数组变量中。
[0076]C、移动分片C到分片I的尾部;
[0077]d、将数组变量中的数据读出来写入到分片2首部之前;
[0078]e、如果分片I的数据长度不大于数组变量的长度,则执行完d之后就实现了将分片I与分片2进行组合的过程;如分片I的数据长度大于数组变量的长度,则重复b-d,直至完成。
[0079](6)判断合成分片2+是否为一个数据包,是则完成重组,否则将分片2+暂存在重组缓冲区中,返回SI。
[0080]实施例二
[0081]本发明实施例二提供一种节省内存的实现装置,如图5所示,包括:
[0082]接收模块501,用于接收分片;
[0083]第一判断模块502,用于判断接收到的分片是否为一个完整的数据包,是则结束,否则触发第二判断模块503;
[0084]第二判断模块503,用于判断重组缓冲区中是否存储有与接收到的分片为同类型的分片,是则触发组合模块505,否则触发存储模块504 ;
[0085]存储模块504,用于将接收到的分片存储到重组缓冲区中;
[0086]具体的,在本实施例中,存储模块504通过调用Lock函数将接收到的分片存储到重组缓冲区的尾部,重组缓冲区占用的字节数增大;
[0087]组合模块505,用于将重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合;
[0088]具体的,在本实施例中,组合模块505通过调用Unlock函数将重组缓冲区中存储的同类型的分片取出后再与接收到的分片进行组合,重组缓冲区中存储的同类型的分片被取出后其后面分片向前移动来填补该分片所占空间;
[0089]第三判断模块506,用于判断组合模块的组合结果是否为一个完整的数据包,是则触发发送模块507,否则触发接收模块501 ;
[0090]发送模块507,用于将组合得到数据包发送给上层。
[0091]如图6所示,组合模块505具体包括:
[0092]设置单元5051,用于设置一个数组变量,将重组缓冲区中存储的同类型的分片作为当前分片;
[0093]第一判断单元5052,用于判断当前分片的数据长度是否大于数组变量的长度,是则触发第二读取写入单元5055,否则触发第一读取写入单元5053 ;
[0094]第一读取写入单元5053,用于从重组缓冲区中读取当前分片的数据,并将其写入到数组变量中;
[0095]第一移动单元5054,用于将当前分片之后的分片移动到当前分片的位置处;
[0096]第二读取写入单元5055,用于读取数组变量中的数据并将其写入到重组缓冲区中接收到的分片的首部之前;
[0097]第三读取写入单元5056,用于从重组缓冲区中的当前分片中读取与数组变量长度相等的数据,并将读取的数据写入到数组变量中;
[0098]第二移动单元5057,用于将当前分片之后的分片移动到当前分片中已读取完数据的位置处;
[0099]第四读取写入单元5058,用于读取数组变量中的数据并将其写入到重组缓冲区中接收到的分片的首部之前,用重组缓冲区中当前分片的剩余数据更新当前分片。
[0100]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0101]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种节省内存的实现方法,其特征在于,包括: 当接收到分片时,判断重组缓冲区中是否存储有与所述接收到的分片为同类型的分片,是则将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,如组合结果为一个完整的数据包则将组合得到数据包发送给上层。
2.如权利要求1所示的方法,其特征在于,如所述组合结果不为一个完整的数据包则等待接收分片; 如判断重组缓冲区中没有与所述接收到的分片同类型的分片,则将所述接收到的分片存储到所述重组缓冲区中,等待接收分片。
3.如权利要求1所示的方法,其特征在于,所述判断重组缓冲区中是否存储有与所述接收到的分片为同类型的分片之前还包括: 判断接收到的分片是否为一个完整的数据包,是则结束,否则继续。
4.如权利要求1所示的方法,其特征在于,所述将所述接收到的分片存储到所述重组缓冲区中具体为:调用Lock函数将接收到的分片存储到重组缓冲区的尾部。
5.如权利要求1所示的方法,其特征在于,所述将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,具体为:调用Unlock函数将所述重组缓冲区中存储的同类型的分片取出后再与所述接收到的分片进行组合。
6.如权利要求1所示的方法,其特征在于,所述将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合,具体为: A、设置一个数组变量,将所述重组缓冲区中存储的同类型的分片作为当前分片; B、判断当前分片的数据长度是否大于所述数组变量的长度,是则执行E,否则执行C; C、从所述重组缓冲区中读取当前分片的数据,并将其写入到所述数组变量中,将当前分片之后的分片移动到当前分片的位置处; D、读取所述数组变量中的数据并将其写入到所述重组缓冲区中所述接收到的分片的首部之前; E、从所述重组缓冲区中的当前分片中读取与数组变量长度相等的数据,并将读取的数据写入到所述数组变量中,将当前分片之后的分片移动到当前分片中已读取完数据的位置处; F、读取所述数组变量中的数据并将其写入到所述重组缓冲区中接收到的分片的首部之前,用所述重组缓冲区中当前分片的剩余数据更新当前分片,返回B。
7.一种节省内存的实现装置,其特征在于,包括: 接收模块,用于接收分片; 第二判断模块,用于判断重组缓冲区中是否存储有与所述接收到的分片为同类型的分片,是则触发组合模块; 所述组合模块,用于将所述重组缓冲区中存储的同类型的分片与所述接收到的分片进行组合; 第三判断模块,用于判断所述组合模块的组合结果是否为一个完整的数据包,是则触发所述发送模块; 所述发送模块,用于将组合得到数据包发送给上层。
8.如权利要求6所示的装置,其特征在于,还包括: 存储模块,用于当所述第二判断模块判断为否时将所述接收到的分片存储到所述重组缓冲区中; 所述第三判断模块判断为否是触发所述接收模块。
9.如权利要求6所示的装置,其特征在于,还包括: 第一判断模块,用于判断接收到的分片是否为一个完整的数据包,是则结束,否则触发所述第二判断模块。
10.如权利要求6所示的装置,其特征在于,所述组合模块包括: 设置单元,用于设置一个数组变量,将所述重组缓冲区中存储的同类型的分片作为当前分片; 第一判断单元,用于判断当前分片的数据长度是否大于所述数组变量的长度,是则触发第二读取写入单元,否则触发第一读取写入单元; 所述第一读取写入单元,用于从所述重组缓冲区中读取当前分片的数据,并将其写入到所述数组变量中; 第一移动单元,用于将当前分片之后的分片移动到当前分片的位置处; 所述第二读取写入单元,用于读取所述数组变量中的数据并将其写入到所述重组缓冲区中接收到的分片的首部之前; 第三读取写入单元,用于从所述重组缓冲区中的当前分片中读取与数组变量长度相等的数据,并将读取的数据写入到所述数组变量中; 第二移动单元,用于将当前分片之后的分片移动到当前分片中已读取完数据的位置处; 第四读取写入单元,用于读取所述数组变量中的数据并将其写入到所述重组缓冲区中接收到的分片的首部之前,用所述重组缓冲区中当前分片的剩余数据更新当前分片。
【专利摘要】本发明公开一种节省内存的实现方法及装置,涉及蓝牙技术领域,该方法包括:当接收到分片时,判断重组缓冲区中是否存储有与接收到的分片为同类型的分片,是则将重组缓冲区中存储的同类型的分片与接收到的分片进行组合,判断组合结果是否为一个完整的数据包,如为一个完整的数据包则将组合得到数据包发送给上层;如不为一个完整的数据包则继续接收分片,否则将接收到的分片存储到重组缓冲区中,继续接收分片。本发明的技术方案在实现过程中所有重组都在同一缓冲区中实现,节省了内存,不会增大其它协作软件内存的消耗,还能保证产品原有的性能和兼容性等质量标准。
【IPC分类】H04L29-06, H04B5-00
【公开号】CN104639511
【申请号】CN201310567299
【发明人】李晓辉, 胡胜发
【申请人】安凯(广州)微电子技术有限公司
【公开日】2015年5月20日
【申请日】2013年11月13日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1