- 主题:[求助]帮忙指导看下一个程序死机的问题吧
你可以先确定一下是中断引起的,还是以太网这端引起的
方法也简单,把外部20ms中断,改为内部定时器产生触发,然后在看会不会出现问题,如果还出问题,那就与中断无关了
【 在 sxmman 的大作中提到: 】
: 程序的功能很简单,FPGA每20ms产生一个中断,ARM端内核收到中断后,会向程序发出一个信号,程序的信号处理函数就会将一段mmap后的内存中的数据通过网口发出去,每次的数据量大概有30K。收发数据是新的线程,主线程保持阻塞在accept处。
: 目前的问题是,程序在运行一段时间后,会死机,但是进程还在,表现为网口的收发功能异常。下面的??就是gdb直接显示的字符。
--
FROM 114.242.29.*
测试内部产生数据了吗
【 在 sxmman 的大作中提到: 】
: 主线程阻塞在accept,其他线程也都在正常工作,并没有线程退出。主线程收到连接创建新的套接字后,作为参数传递给其他线程的,所以应该不存在这个问题吧。
: --
发自「今日水木 on TAS-AL00」
--
FROM 221.223.96.*
中断本身会产生问题吗?不会的话就是中断和socket使用没协调好?看看是数据访问冲突还是硬件中断冲突问题
【 在 sxmman 的大作中提到: 】
: 做了类似的测试,不产生新的中断,反复高频率发送旧的数据,测了一个星期,没发现问题……
: --
发自「今日水木 on TAS-AL00」
--
FROM 221.223.98.*
这个好验证
你把中断还是打开,正常使用
但是发送部分不要用交互来的新数据,就用不变的数据发送,烤机看看出问题不
出问题,就是中断和socket冲突引起的
不出问题,那就是数据共享引起的
【 在 sxmman 的大作中提到: 】
: 确实有点类似,屏蔽了中断,mmap区域不再更新,反复发送重复的数据,没有出现问题了。但是应该读和写是不冲突的吧,芯片内部访问ddr的总线物理是独占的吧。我怀疑中断的驱动问题,或者dma的控制问题可能性大些。
--
FROM 114.242.29.*
中断发送什么信号?互斥量吗?贴个代码看看
【 在 sxmman 的大作中提到: 】
:
: 是的,中断->驱动响应中断,进行dma->dma完成,驱动向应用发送信号->应用的信号处理函数读取数据,然后网口发出。
: 现在把dma部分屏蔽,直接中断发送信号,然后反复发数据,这样就会挂。不发信号,也不处理中断,自己反复发送随机数据,这样不会挂。
: 也已经把malloc函数全
: ..................
发自「今日水木 on TAS-AL00」
--
FROM 221.223.98.*
问题咋样了?没结果吗
【 在 sxmman 的大作中提到: 】
: 是的,中断->驱动响应中断,进行dma->dma完成,驱动向应用发送信号->应用的信号处理函数读取数据,然后网口发出。
: 现在把dma部分屏蔽,直接中断发送信号,然后反复发数据,这样就会挂。不发信号,也不处理中断,自己反复发送随机数据,这样不会挂。
: 也已经把malloc函数全部替换为静态数组了。可能还是因为信号会打断其它系统调用?现在不知道怎么继续定位了……
--
FROM 114.242.29.*