TI中文支持网
TI专业的中文技术问题搜集分享网站

NDK配置说明中提到需要创建一个sys/bios定时器对象来驱动它的主定时器,请问这个定时器在NDK中起什么作用?

之所以有这个疑问是因为我的网络开发都是在例程的基础上进行的(这个例程是采用c代码进行配置而非XGCONF工具),初始化这些工作都已经完成,我只是做了些许修改,一直以来连接、数据收发都正常,最近需要加个检测网络断开的功能,要求在网线断开后一定时间内可以检测并恢复连接,我的方法是假设若一定时间内没有数据传送就认为网络已断开,于是需要在当前数据发送任务中对send函数设置超时,具体设置如下:

struct timeval sndTOut;
sndTOut.tv_sec=0;
sndTOut.tv_usec=10*1000;
if(0==setsockopt(clientSocket,SOL_SOCKET,SO_SNDTIMEO,&sndTOut,sizeof(sndTOut)))
printf("Set Send Timeout 10ms! \n");

运行后显示设置成功,但是拔掉网线后,send函数却一直处于阻塞状态,设置的超时无效。我猜测是不是跟这个配置中的定时器有关系,NDK中的函数涉及到超时设置的,他的时间基准是不是都建立在这个初始化时候创建的定时器上,但是我在例程中找不到创建这个定时器的相关代码,所以我怀疑可能是初始配置中没有创建这个定时器,导致超时设置无效。盼高人指点迷津!

Nancy Wang:

NDK的socket timeout是基于BIOS system tick time,检查一下.cfg文件中应该有关于tick time的配置。
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
Clock.timerId = 1;
e2e.ti.com/…/269179
这个帖子也可以参考一下。
e2e.ti.com/…/496848

user5338487:

回复 Nancy Wang:

非常感谢您的指导!我的工程中没有用到clock模块,所以没有配置过它,请问这是不是意味着所有的超时设置都不起作用?还是说系统时钟会按照默认配置自动生成。

Nancy Wang:

回复 user5338487:

您用的例程上有配置吗?没有配置应该是不会自动生成的。

user5338487:

回复 Nancy Wang:

您好!我把系统时钟周期配置为1ms,调用Clock_getTicks()查看时钟计数一直在增长,在任务中调用Sleep()函数都正常,但是send的超时还是没有效果,还是一直阻塞。

赞(0)
未经允许不得转载:TI中文支持网 » NDK配置说明中提到需要创建一个sys/bios定时器对象来驱动它的主定时器,请问这个定时器在NDK中起什么作用?
分享到: 更多 (0)