针对LPC54628芯片上运行的两个不同软件在长时间接收组播数据后出现的erxmb线程异常(无法接收数据,但发送正常),以及邮箱耗尽的问题,以下是可能的原因分析和解决方法:
邮箱耗尽 (erxmb线程无法运行):
OWNED_BY_HARDWARE,硬件填充数据后再标记为OWNED_BY_CPU。erxmb线程负责处理OWNED_BY_CPU的描述符:OWNED_BY_HARDWARE),准备接收新数据包。为什么邮箱会耗尽?
erxmb线程未及时处理/回收描述符:erxmb线程可能被更高优先级任务长时间阻塞,无法及时处理到达的数据包和回收描述符。erxmb线程的处理能力。erxmb线程及时运行回收描述符erxmb线程设置为足够高的优先级(高于大多数业务线程,但低于关键实时任务和ISR),确保其能及时抢占运行。erxmb线程中进行复杂计算、阻塞操作(如等待信号量超时、文件I/O)或过长的临界区。erxmb线程中完成。erxmb线程堆栈足够大,避免溢出导致线程崩溃。使用调试器或添加堆栈检查代码。OWNED_BY_CPU(待处理)的描述符数量。观察该数量是否随时间增长直至耗尽(接近描述符总数)。erxmb线程的实际运行状态(Running, Ready, Blocked, Suspended)。确定它是被阻塞、挂起还是根本不调度。erxmb线程循环入口处记录时间戳,计算相邻两次进入的时间间隔。间隔过长表明线程未及时运行。RXDESCRIPTOR或类似状态寄存器并清除相应位)。查阅芯片手册确认清除方法。erxmb线程中完成。erxmb线程处理每个描述符前,检查关键字段是否合法(如缓冲区指针、状态标志)。OWNED_BY_HARDWARE)和必要的控制位。erxmb线程状态: 使用RTOS调试工具,看线程是阻塞在哪个信号量/队列/互斥锁上,还是处于就绪态但未调度。OWNERSHIP标志和其他关键字段,是否有明显损坏或不一致。erxmb线程高优先级及时运行。通过上述方法,尤其是监控描述符使用计数和erxmb线程状态,通常能定位问题的根本原因(线程阻塞、中断丢失、描述符未回收)。优先优化线程优先级和执行逻辑,确保描述符能被及时回收是解决此类问题的关键。
举报
更多回帖