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

2019-11-19 17:37 [复制链接] 2 70

wiznet在使用时,有时会出现
8 r# b: s" K8 HFunction[rt_mutex_take] shall not be used in ISR(0) assertion failed at function:rt_mutex_take, line number9 x. H" e- J5 o# k
! w6 R" F. e7 R. _+ F1 w# P+ j
的问题。
2 \3 u  t8 b8 o. ~1 d& b- q5 q" n' G这是由于在中断中使用了进行了spi操作。
: _1 K' V& R4 W经过排查发现在wiz.c(248行)开启了定时器* x1 G; T7 _( G6 U: z
dhcp_timer = rt_timer_create("wiz_dhcp", wiz_dhcp_timer_entry, RT_NULL, 1 * RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC);
- R4 l% N6 l3 U4 W$ t此处开启了定时器,但是没有指定其为软定时。因此有可能在硬件定时器中断中进行spi操作,导致上述问题产生。只需改为
$ Q( o, Z- h1 ]3 E  M5 |6 l/ @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);0 {0 f: r4 D! ]0 o& P
即可。即指定其为软定时。0 y$ e  ?6 m0 F
同样的,在wiz.c(396行)  b/ }+ v6 @, m  q0 {
lsd_timer = rt_timer_create("wiz_lsd", (void (*)(void *parameter))wiz_dhcp_restart, RT_NULL,
( W& T( h7 [; D* t3 U3 S! z2 X3 q0 c                (getDHCPLeasetime() - 60) * RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC);
& O" W0 e7 y+ }% t8 T) L8 i) [只需将这些地方改为软定时即可。) v5 z; J! r" {& `: k' n0 w# T/ s
还需要注意自己不要在定时器和中断中发送数据。
; `; O! m0 p6 |' y5 i# B( D8 P

: G, Q) B# U7 [& t" Q, \- J
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-11-19 17:52:53 | 显示全部楼层
本帖最后由 yangjie 于 2019-11-19 17:59 编辑
+ c' z. D; L" X! p* q9 p7 x+ U* @
5 q, [- ]) i& o! x, ]7 K咦,这个默认不是软件定时器吗..
使用道具 举报 回复
发表于 2019-11-19 18:00:15 | 显示全部楼层
楼主可以提个pr把这个问题修复下~~
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表