- 主题:[求助]帮忙指导看下一个程序死机的问题吧
出问题的时候,网络连接并没有断开,而且能挂机测试,能反复断开重连,netstat查看也是连着的。
主线程会把accept返回的套接字当做文件描述符复制一个,然后创建接收发送线程后,把原始套接字关闭,继续回到accept。
【 在 pauljoe 的大作中提到: 】
: netstat查下当前socket情况
: 传递过去的socket,最后在哪里关闭的
:
--
FROM 223.148.155.*
会不会是内存访问冲突呢?发送程序读内存时候,别的程序或者DMA也在读或者写。如果不发送mmap的内容,而是发一些dummy数据,应该就不会死机了吧?
--
FROM 124.64.23.*
做了类似的测试,不产生新的中断,反复高频率发送旧的数据,测了一个星期,没发现问题……
【 在 Rome888 的大作中提到: 】
: 测试内部产生数据了吗
: 发自「今日水木 on TAS-AL00」
--
FROM 111.181.12.*
确实有点类似,屏蔽了中断,mmap区域不再更新,反复发送重复的数据,没有出现问题了。但是应该读和写是不冲突的吧,芯片内部访问ddr的总线物理是独占的吧。我怀疑中断的驱动问题,或者dma的控制问题可能性大些。
【 在 guoyu 的大作中提到: 】
: 会不会是内存访问冲突呢?发送程序读内存时候,别的程序或者DMA也在读或者写。如果不发送mmap的内容,而是发一些dummy数据,应该就不会死机了吧?
--
FROM 111.183.45.*
中断本身会产生问题吗?不会的话就是中断和socket使用没协调好?看看是数据访问冲突还是硬件中断冲突问题
【 在 sxmman 的大作中提到: 】
: 做了类似的测试,不产生新的中断,反复高频率发送旧的数据,测了一个星期,没发现问题……
: --
发自「今日水木 on TAS-AL00」
--
FROM 221.223.98.*
这个好验证
你把中断还是打开,正常使用
但是发送部分不要用交互来的新数据,就用不变的数据发送,烤机看看出问题不
出问题,就是中断和socket冲突引起的
不出问题,那就是数据共享引起的
【 在 sxmman 的大作中提到: 】
: 确实有点类似,屏蔽了中断,mmap区域不再更新,反复发送重复的数据,没有出现问题了。但是应该读和写是不冲突的吧,芯片内部访问ddr的总线物理是独占的吧。我怀疑中断的驱动问题,或者dma的控制问题可能性大些。
--
FROM 114.242.29.*
是的,中断->驱动响应中断,进行dma->dma完成,驱动向应用发送信号->应用的信号处理函数读取数据,然后网口发出。
现在把dma部分屏蔽,直接中断发送信号,然后反复发数据,这样就会挂。不发信号,也不处理中断,自己反复发送随机数据,这样不会挂。
也已经把malloc函数全部替换为静态数组了。可能还是因为信号会打断其它系统调用?现在不知道怎么继续定位了……
【 在 Rome888 的大作中提到: 】
: 这个好验证
: 你把中断还是打开,正常使用
: 但是发送部分不要用交互来的新数据,就用不变的数据发送,烤机看看出问题不
: ...................
--
FROM 111.183.5.*
中断发送什么信号?互斥量吗?贴个代码看看
【 在 sxmman 的大作中提到: 】
:
: 是的,中断->驱动响应中断,进行dma->dma完成,驱动向应用发送信号->应用的信号处理函数读取数据,然后网口发出。
: 现在把dma部分屏蔽,直接中断发送信号,然后反复发数据,这样就会挂。不发信号,也不处理中断,自己反复发送随机数据,这样不会挂。
: 也已经把malloc函数全
: ..................
发自「今日水木 on TAS-AL00」
--
FROM 221.223.98.*
不要在中断中处理“阻塞”的操作,可以通过中断给标志位置位,然后慢慢处理,不要让中断处理程序等待太久。楼上说的进程间通信问题也需要关注一下。
--
FROM 221.216.117.*
问题咋样了?没结果吗
【 在 sxmman 的大作中提到: 】
: 是的,中断->驱动响应中断,进行dma->dma完成,驱动向应用发送信号->应用的信号处理函数读取数据,然后网口发出。
: 现在把dma部分屏蔽,直接中断发送信号,然后反复发数据,这样就会挂。不发信号,也不处理中断,自己反复发送随机数据,这样不会挂。
: 也已经把malloc函数全部替换为静态数组了。可能还是因为信号会打断其它系统调用?现在不知道怎么继续定位了……
--
FROM 114.242.29.*