您好,Champions,
在尝试从 EMC 测试期间发生的"同步丢失"恢复时,我们面临一个问题,导致 CC3120卡滞。
由于在 EMC 测试用例期间、软件会检测到 CC3120的"同步丢失"事件、 因此我们会执行 CC3120恢复重启序列。
在 "SlNetSock_select" API 超时之后,一些 MCU 的任务也会立即重新启动。
在重新启动 MCU 的任务之前、每个绑定的套接字都已关闭 、但 SlNetSock_Close 因 errno =-2005而失败。
重新启动过程完成后 ,SlNetSock_create() 将起作用。
如果重新启动过程重复多次, slNetSock_create()的工作时间与可用的套接字描述符相等。
在同步丢失事件的情况下,主机 驱动程序似乎仍在使用先前的套接字结构,无法释放这些资源。
如果在网络处理器正常工作时触发 CC3120的恢复重启序列,则不会出现此问题(无同步丢失)
以下是 恢复重新启动序列的详细信息;
*同步丢失处理序列
1-如果检测到同步丢失,则将事件 EV1发送到服务器任务(以指示任务应用恢复重新启动)
2 -服务器内部任务、SlNetSock_select 超时、
3-在服务器内部任务中,关闭返回-1,错误号=-2005
3-等待服务器任务终止
4 - sl_Stop (200 /*ms*/);
5- sl_Start(); --> CC3120重新启动
6 -启动新的服务器任务。
7 -服务器任务中的步骤1 (s (n)= SlNetSock_create) 打开新套接字、
其中 s (n)= s (n-1)+ 1
8 -应用程序将一直运行、直到序列重复足够多的时间、从而使可用的文件描述符饱和
*服务器任务
1 - s (n)= SlNetSock_create ()
2 - SlNetSock_SETOPT (s、..、SLNETSOCK_OPSOCK_NON_BLOCK...) +绑定+侦听
3 - SlNetSock_select
4 -接受
3A/4a 如果检测到事件 EV1、请关闭(s)、退出任务
在这种情况下,我们如何确保资源得到适当清理?
谢谢、
Paolo