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

2019-11-19 17:17 [复制链接] 4 75

msh />ps
; b3 W/ L: C$ D, |' D2 z0 r" bthread   pri  status      sp     stack size max used left tick  error4 w/ ?+ d: C0 }% g9 R, w
-------- ---  ------- ---------- ----------  ------  ---------- ---# P* d% \9 x7 \: r6 w
sim800c   30  suspend 0x00000080 0x00000200    57%   0x00000012 000! _" ^7 k/ A# l- N$ z3 t+ k* b
led        5  suspend 0x000000f4 0x00000400    43%   0x00000045 000
% j: _6 L; f7 A( nsht20      6  suspend 0x0000005c 0x00000400    42%   0x00000060 000
8 f) d+ P$ v) H4 xtshell     2  ready   0x000000f8 0x00001000    12%   0x0000000a 000
6 r% @& J5 n$ K+ Aat_clnt    9  suspend 0x00000094 0x00000600    17%   0x00000004 000  W0 V5 R4 M2 A2 Y& `1 W, O
sys_work  23  suspend 0x00000044 0x00000800    27%   0x00000008 -02) }( {6 F7 c! x; [* x
tidle     31  ready   0x00000054 0x00000100    32%   0x0000000a 000
0 M4 {0 g& U0 B" c0 `: Q0 @main      10  suspend 0x00000068 0x00000800    13%   0x00000005 000* ^* A) z: P0 _
msh />[E/sht20] Can't create mutex for sht20 device on 'i2c1' / y$ H9 W, h  O' [: S
(dev) assertion failed at function:read_hw_temperature, line number:134   L3 }6 |3 S7 K7 F9 S

. g# F3 S0 Y0 o9 z- N; C' |这可咋整,该线程的内存分配大小,优先级都调过了,还是会出现的,谁帮着分析下谢谢5 M) l: u5 f" S, w. |

8 ?6 O. Y3 }, w  S" ^+ o$ ]' {/ |* E  ^; X7 e5 I

9 e2 F4 Y2 l! z- m6 z2 Q# ^/ k
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-11-19 17:51:43 | 显示全部楼层
运行一段时间后报错还是直接报错?查下 “Can't create mutex for sht20 device on 'i2c1' ”的地方,看看是什么原因
使用道具 举报 回复
发表于 2019-11-20 08:50:13 | 显示全部楼层
yangjie 发表于 2019-11-19 17:51( ~2 t- b6 |, m: P3 B
运行一段时间后报错还是直接报错?查下 “Can't create mutex for sht20 device on 'i2c1' ”的地方,看看 ...
! r/ {" o- i5 Y  r
是运行了一段时间以后,几分钟或十几分钟后,那段报错代码找到了$ @+ L( A2 G' _4 `( A0 I% }- x
    dev->lock = rt_mutex_create("mutex_sht20", RT_IPC_FLAG_FIFO);, C/ g; Z' v9 |. m+ _
    if (dev->lock == RT_NULL): ]& f0 N! s1 Z1 S8 d
    {
$ n: M. u- ?& i/ z' w/ k/ I6 q        LOG_E("Can't create mutex for sht20 device on '%s' ", i2c_bus_name);
/ j% \$ |6 A4 v7 {$ Y. s        rt_free(dev);. p5 N) b7 U7 B9 Y9 B* I) B
        3 W. f& M- v4 y! Y
        return RT_NULL;
8 P9 c2 E- |$ U+ Q    }# a" m( @! s6 Y) ~3 y, p
/ p# {  E2 [9 d- a$ U2 Q
另外附上我的sht20线程函数. J" S0 u/ u2 Y9 X
void sht20_thread_entry()' s3 @4 O, z6 c$ m: k/ V5 t2 w, u0 N
{, N8 v% ~% l7 h  R7 ], l- K$ }
        static sht20_device_t dev_sht20 = RT_NULL;
8 ^* x: N2 N# H) @/ x- Y) ~        while(1)
/ Q/ W: |" t5 \8 m& V) u        {* d4 O* T2 P9 c; y; w4 M
                rt_thread_mdelay(2000);7 w' K, R1 b4 ^
                dev_sht20=sht20_init("i2c1");; c" l8 `, U* o" k- {) s2 g2 V. s
                temp_sht20=sht20_read_temperature(dev_sht20);
7 V8 `% K' a! R* C6 e. E& o                sprintf(temp_sht20b,"%4.1f",temp_sht20);
( Q' N/ t& l* S//                rt_kprintf("read sht20 sensor temperature: %d.%d \n", (int)temp_sht20, (int)(temp_sht20 * 10) % 10);3 m1 i0 _) B' X- @- A+ G
        }
0 [5 s0 I- y" W$ m}
使用道具 举报 回复
发表于 2019-11-20 09:17:08 | 显示全部楼层
sjj430 发表于 2019-11-20 08:50
, D1 k) ~$ o* `2 g& i/ _9 v. c5 V$ H是运行了一段时间以后,几分钟或十几分钟后,那段报错代码找到了% q! R& i& w- a" N4 ^
    dev->lock = rt_mutex_create("mute ...

( \; a  U) v* W! }* Y在你的 while(1) 里面一直初始化 sht20 ,初始化的时候会创建 mutex ,所以后面就失败了,你使用 list_mutex 看一下,应该是这个原因
使用道具 举报 回复
发表于 2019-11-20 09:34:30 | 显示全部楼层
tyustli 发表于 2019-11-20 09:17
) B+ H) y" |6 }在你的 while(1) 里面一直初始化 sht20 ,初始化的时候会创建 mutex ,所以后面就失败了,你使用 list_mu ...
/ l( b; i( m9 V3 {' x8 t5 {
哦,有道理,当时参考sample时没注意,应该把初始化放到while1外面,谢谢了,我再试一下
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

Powered by RT-Thread

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