EDA365电子论坛网

标题: list_thread()打印的是历史最大使用率还是实时的? [打印本页]

作者: three    时间: 2022-8-16 13:48
标题: list_thread()打印的是历史最大使用率还是实时的?
打印的max used百分比信息不变,是只打印最大的使用率,不打印实时的?程序不响应任何事件,线程60%,响应事件后75%;然后线程回到不响应的状态。但是打印的还是75%6 w6 f! k- |" P1 F, {! W8 K  r

作者: rergr    时间: 2022-8-16 14:27
计算代码如下
/ s+ [) i$ w* }
( [( Z: I2 @" X  O; M# r2 J4 w" Z- z! |4 q                    while (*ptr == '#')ptr ++;+ C# b: G0 `2 K) P5 J  J  \& F
                    rt_kprintf(" 0x%08x 0x%08x    %02d%%   0x%08x %03d\n",+ S5 j6 D2 `! P
                            thread->stack_size + ((rt_ubase_t)thread->stack_addr - (rt_ubase_t)thread->sp),1 q( z/ a# k6 R+ G
                            thread->stack_size," H  W9 e9 A9 r1 J. a! Y
                            (thread->stack_size - ((rt_ubase_t) ptr - (rt_ubase_t) thread->stack_addr)) * 100! v, E, z% a5 z' c( M8 V
                            / thread->stack_size,
1 ?. b9 [* g+ |2 ^" j                            thread->remaining_tick,% W6 `' [* X% }( [! u7 H5 y& ^" `
                            thread->error);& q* O% u" Z2 K4 m0 O
(thread->stack_size - ((rt_ubase_t) ptr - (rt_ubase_t) thread->stack_addr)) * 100 可以看出是线程栈的大小 减去 ptr 相对于 栈起始地址的大小 然后得到一个 百分比。
! v3 g( `- A3 c; i% k1 z( f5 o% \, X
进一步分析 ptr 的位置在哪里,通过上面的代码第一行可以看到,通过 # 来进行的判断。
/ [3 F( z$ T9 N. B, ]  }- I8 N( V, C) L' d" v. L
在进一步分析 # 从何而来
; Q( ]5 s3 Z$ C
2 L; u  q/ G3 l, pstatic rt_err_t _rt_thread_init(struct rt_thread *thread,% V  a0 R. o0 P) ~8 h
                                const char       *name,7 i/ C8 E2 j" @/ e4 O1 h: t  v
                                void (*entry)(void *parameter),
. K/ v) q& Z+ D                                void             *parameter,
& ]5 K5 N5 V! J0 F/ g                                void             *stack_start,6 ]0 K( n6 e6 l6 f* g  m$ f8 Q
                                rt_uint32_t       stack_size,% t! [3 ~) g0 U6 I8 t1 _
                                rt_uint8_t        priority,8 e, ]- @! S2 g! j5 S3 D
                                rt_uint32_t       tick)
" k  W1 k9 ~' {- h{+ _0 ]4 _2 q9 G( y' A
    /* init thread list */, u! r2 v: [0 `8 M, g3 J
    rt_list_init(&(thread->tlist));( n4 f+ V, c+ o) O5 \
    thread->entry = (void *)entry;
/ r( o, Z0 L$ K# U! W    thread->parameter = parameter;+ d) h, o4 i" o7 S6 g( u
    /* stack init */& g! _3 X: a3 I7 r: Y. ^) R
    thread->stack_addr = stack_start;8 a5 f1 ]7 O2 {+ z  [; J
    thread->stack_size = stack_size;7 I6 [0 z& o, j3 Q" X
    /* init thread stack */8 o. C  [4 \* J" y
    rt_memset(thread->stack_addr, '#', thread->stack_size);
) g& j1 i+ r$ @% G  Z可以看到每个线程在初始化的会将整个栈空间设置为 #。! w( u# _8 j" h0 o4 e; `

作者: 芦根苏木    时间: 2022-8-16 15:21
同问,求结果9 l# K- ~7 g# \

作者: Memory00    时间: 2022-8-16 15:36
再看看别人是怎么说的6 z. }! S# E0 M4 ~3 V5 i3 u5 F





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2