程序运行在zynq SoC上,平台是Linux 4.14版本,功能很简单,除了配置FPGA端寄存器的参数外,就是定期将FPGA数据读取并通过网口发送出去。
程序设计的框架很简单:
主线程:开启TCP主机服务,并阻塞在accept函数中;当有连接进入后,创建新的服务线程(如果已经有链接了,则先关闭已经创建的线程和对应的套接字,保证只有一个活动连接)。
大概就是:
while(1)
new_fd = accept();
act_fd = dup(new_fd);
close(new_fd);
create_thread(act_fd);
异常现象:一般挂机几个小时后出异常,此时除了主线程外的其他线程都正常工作,但是网口通信异常。各线程的状态如图所示:
如果正常时候,是可以看见主线程阻塞在accept函数的,异常直接显示问号。。。
另外8个线程分别是线程池,和套接字的接收发送服务线程。
出错的时候,系统没有任何出错打印,程序中有频繁的malloc和free,但是都在子线程中,而子线程状态都正常,能正常打断和运行。
求大家帮忙看看,或者指导下定位手段,谢啦。
--
FROM 171.82.136.*