关于Wiznet(5500)会出现[rt_mutex_take] shall not be used in ISR的问题

发布于 2019-11-19 17:37:37
wiznet在使用时,有时会出现
Function[rt_mutex_take] shall not be used in ISR(0) assertion failed at function:rt_mutex_take, line number

的问题。
这是由于在中断中使用了进行了spi操作。
经过排查发现在wiz.c(248行)开启了定时器
dhcp_timer = rt_timer_create("wiz_dhcp", wiz_dhcp_timer_entry, RT_NULL, 1 * RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC);
此处开启了定时器,但是没有指定其为软定时。因此有可能在硬件定时器中断中进行spi操作,导致上述问题产生。只需改为
dhcp_timer = rt_timer_create("wiz_dhcp", wiz_dhcp_timer_entry, RT_NULL, 1 * RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER);
即可。即指定其为软定时。
同样的,在wiz.c(396行)
lsd_timer = rt_timer_create("wiz_lsd", (void (*)(void *parameter))wiz_dhcp_restart, RT_NULL,
(getDHCPLeasetime() - 60) * RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC);
只需将这些地方改为软定时即可。
还需要注意自己不要在定时器和中断中发送数据。

查看更多

关注者
0
被浏览
358
2 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友