SHT20线程运行一段时间后报错

发布于 2019-11-19 17:17:18
msh />ps
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
sim800c 30 suspend 0x00000080 0x00000200 57% 0x00000012 000
led 5 suspend 0x000000f4 0x00000400 43% 0x00000045 000
sht20 6 suspend 0x0000005c 0x00000400 42% 0x00000060 000
tshell 2 ready 0x000000f8 0x00001000 12% 0x0000000a 000
at_clnt 9 suspend 0x00000094 0x00000600 17% 0x00000004 000
sys_work 23 suspend 0x00000044 0x00000800 27% 0x00000008 -02
tidle 31 ready 0x00000054 0x00000100 32% 0x0000000a 000
main 10 suspend 0x00000068 0x00000800 13% 0x00000005 000
msh />[E/sht20] Can't create mutex for sht20 device on 'i2c1'
(dev) assertion failed at function:read_hw_temperature, line number:134

这可咋整,该线程的内存分配大小,优先级都调过了,还是会出现的,谁帮着分析下谢谢



查看更多

关注者
0
被浏览
425
4 个回答
sjj430
sjj430 2019-11-20
yangjie 发表于 2019-11-19 17:51
运行一段时间后报错还是直接报错?查下 “Can't create mutex for sht20 device on 'i2c1' ”的地方,看看 ...


是运行了一段时间以后,几分钟或十几分钟后,那段报错代码找到了
dev->lock = rt_mutex_create("mutex_sht20", RT_IPC_FLAG_FIFO);
if (dev->lock == RT_NULL)
{
LOG_E("Can't create mutex for sht20 device on '%s' ", i2c_bus_name);
rt_free(dev);

return RT_NULL;
}

另外附上我的sht20线程函数
void sht20_thread_entry()
{
static sht20_device_t dev_sht20 = RT_NULL;
while(1)
{
rt_thread_mdelay(2000);
dev_sht20=sht20_init("i2c1");
temp_sht20=sht20_read_temperature(dev_sht20);
sprintf(temp_sht20b,"%4.1f",temp_sht20);
// rt_kprintf("read sht20 sensor temperature: %d.%d \n", (int)temp_sht20, (int)(temp_sht20 * 10) % 10);
}
}
tyustli
tyustli 2019-11-20
sjj430 发表于 2019-11-20 08:50
是运行了一段时间以后,几分钟或十几分钟后,那段报错代码找到了
dev->lock = rt_mutex_create("mute ...


在你的 while(1) 里面一直初始化 sht20 ,初始化的时候会创建 mutex ,所以后面就失败了,你使用 list_mutex 看一下,应该是这个原因
sjj430
sjj430 2019-11-20
tyustli 发表于 2019-11-20 09:17
在你的 while(1) 里面一直初始化 sht20 ,初始化的时候会创建 mutex ,所以后面就失败了,你使用 list_mu ...


哦,有道理,当时参考sample时没注意,应该把初始化放到while1外面,谢谢了,我再试一下

撰写答案

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

发布
问题

分享
好友