杨坤的分享空间
目录:
原始引用地址: 记录一个海思TOE的BUG
time: 2020.5.3 17:57
最近在做onvif开发时,有x86的验证的功能没有问题,移动到海思Hi3536上简单运行貌视也很正常。但是多次测试后,发现有时在接收一些onvif数据时,不能正常接收,直到超时。一些杂牌的相机频繁出问题,海康大华的几乎不出问题,很是奇怪。
经过上面的分析测试,确认是TOE的问题。但是怎么解决问题?难道是gsoap的问题,因为出问题的地方是gsoap生成代码!!!试了另外的老的版本,新的版本,,问题依旧!!!!google各种错误信息,无解。
又是一个较长时间的苦恼的debug,,,,,,
分析下问题的原因好像与数据包的长度有关。短的数据不易出问题,长的数据容易出问题。再看下gsoap生成的代码,缓冲buf是64k,这个64k与TOE中默认的相同!
估计就是TOE一个攒的着数据,直到足够大才往上返回!!但是onvif的数据一个没有到足够大的条件。所以直到数据超时了,数据也没返回来。
好吧过程就不多说了,我现在也忘的差不多了。直接说结果吧
如果想让ONVIF的SOAP接口在TOE状态下正常使用,应该把onvif/stdsoap2.h 中SOAP_BUFLEN(默认为65536, 也就是64k)改为一个比较小的值,我改为20*1024,多次测试后认为问题解决。