wiznet当网线连接后会持续卡顿导致看门狗复位的问题分析

电子说

1.3w人已加入

描述

手上的电路板是STM32F405RG+W5500,以前都是自己写的驱动,这次尝试使用了wiznet软件包,但是每次插上网线,有些低优先级的线程都会卡顿十几秒,由于看门狗是在空闲线程喂狗的(看门狗设的3秒触发),所以导致板子一插网线就重启。

后来经过分析,发现卡住的是workqueue线程,然后全局搜索发现是sal里提交的工作队列函数卡住,一步步捋出来的顺序如下:结论就是因为wizchip_sendto这个函数卡住导致。

wiz_link_status_thread_entry->netdev_low_level_set_link_status->sal_check_netdev_internet_up->check_netdev_internet_up_work->wiz_gethostbyname->DNS_run->wizchip_sendto。

之后在图上的位置加了延时,测试不会卡死了。

STM32F405

STM32F405

大概翻了下,有很多地方都没有加延时,wiznet包坑太多,举个例子如下,不一一说明了。

STM32F405

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_93230807 06-27
0 回复 举报
向您请教一下问题。在初始化W5500时,会对芯片设置超时重试时间和重试次数,一般重试时间为200ms,重试次数为8次。现在我遇到的问题是:当设备网口不进行连接时,会导致主芯片每一次顺序执行时都会死等1600ms,当设备与网络设备网口连接后(不管有没有连接上其他设备)都能正常运行。应该是我的初始化还是那里存在问题。我在网上查找了一下,没有遇到过我这种情况。 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分