NDK SBNew: Buffer OOM错误问题解决

来源:互联网 发布:三国志11知乎 编辑:程序博客网 时间:2024/04/28 14:27
 

DM642上使用异常现象,建立一个TCP监听端口,当向这个tcp端口连接时失败,DM642程序在CCS上提示的打印信息:
00008.106 SBNew: Buffer OOM
00008.681 SBNew: Buffer OOM
00009.298 SBNew: Buffer OOM

整个工程原先是可用,最近不知做什么修改才出现了这个问题,怀疑是NDK相关的库被修改了,查了一遍,无果。

还是得从打印信息出发,经查证,SBNew是一个内存分配函数,在stack.lib的sb.c文件里实现,SBNew: Buffer OOM就意味着内存分配不成功。

依据网络堆栈的思路调整了堆栈大小,最终把问题确定下来了,原来我们使用的socket buffer被修改得太大了,之前调试把buffer改成 0×100000,改回8704就ok了!

// Change our socket buffer size to 8704 bytes
rc =8704;//8760;// 0×100000;//
CfgAddEntry( hCfg, CFGTAG_IP, CFGITEM_IP_SOCKBUFMAX, CFG_ADDMODE_UNIQUE, sizeof(uint), (UINT8 *)&rc, 0 );

TI提供的DM642 NDK存在不少问题,使用时要十分小心!

================================================================================================
上面是转载林祥杰的个人博客的内容。
 
本人使用c6455进行开方,使用ndk1.92版本。
堆栈修改为8096byte,然后需要在bios config 的memory里面将stack的容量修改为0x10000
能够有效避免这个问题。当然本人出现OOM问题是在非正常的拔掉网线的时候产生的。
正常情况下不会发生这个问题。