硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5398|回复: 36
收起左侧

[ThreadX全家桶] ThreadX内核原装的任务,中断和空闲执行时间统计功能,含CPU利用率工程分享,支持AC5,AC6,IAR和GCC

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
发表于 2021-6-10 09:55:35 | 显示全部楼层 |阅读模式
本周更新教程详说移植方法,当前先把工程分享给大家。

采用的是我们的V7板子

基于STM32H7的ThreadX原装任务统计分析功能.7z (7.60MB)








回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-10 10:01:33 | 显示全部楼层
更新完毕。
回复

使用道具 举报

1

主题

11

回帖

14

积分

新手上路

积分
14
发表于 2021-6-10 15:05:17 | 显示全部楼层
   
回复

使用道具 举报

7

主题

108

回帖

129

积分

初级会员

积分
129
发表于 2021-6-10 19:59:34 | 显示全部楼层
好耶
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2021-6-11 07:38:53 | 显示全部楼层
赞一个
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-11 09:46:01 | 显示全部楼层
开启整理教程。
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-11 10:11:44 | 显示全部楼层
超赞!
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-11 17:50:27 | 显示全部楼层
我搞了一天硬是不能显示cpu使用率,后来发现要使能DWT计数器
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-11 20:18:49 | 显示全部楼层
这个功能非常不错哟,辛苦大神了
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-19 16:26:54 | 显示全部楼层
本帖最后由 hpdell 于 2021-6-19 17:22 编辑

你好, 我按照历程捣鼓了一下,貌似 显示 cpu 利用率等出现都是 0, 只有 任务优先级等是正常的
threadx info.png


发现问题所在了,原来是需要在Optionos -> Asm -> Define 里面增加 TX_EXECUTION_PROFILE_ENABLE,TX_ENABLE_EXECUTION_CHANGE_NOTIFY

不过貌似又出现新的问题了,如下:

threadx info.png

貌似 显示 cpu 利用率, 任务执行时间等 貌似不太对呀, 还有哪里没有搞好哇 ????

回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-19 16:58:31 | 显示全部楼层
终于发现问题所在了啊,惭愧惭愧

需要在 mdk

在 Optionos -> Asm -> Define 里面增加 TX_EXECUTION_PROFILE_ENABLE,TX_ENABLE_EXECUTION_CHANGE_NOTIFY
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-19 17:05:08 | 显示全部楼层
hpdell 发表于 2021-6-19 16:26
你好, 我按照历程捣鼓了一下,貌似 显示 cpu 利用率等出现都是 0, 只有 任务优先级等是正常的

看看DWT计数器走了没有
回复

使用道具 举报

2

主题

49

回帖

55

积分

初级会员

积分
55
发表于 2021-6-19 17:08:22 | 显示全部楼层
hpdell 发表于 2021-6-19 16:26
你好, 我按照历程捣鼓了一下,貌似 显示 cpu 利用率等出现都是 0, 只有 任务优先级等是正常的

工程里有2个define要开
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-20 11:00:17 | 显示全部楼层
jiaoxiake 发表于 2021-6-19 17:05
看看DWT计数器走了没有

dwt 走起了,

TX_EXECUTION_PROFILE_ENABLE,TX_ENABLE_EXECUTION_CHANGE_NOTIFY  这2个我都已经开启了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-20 11:13:40 | 显示全部楼层
hpdell 发表于 2021-6-19 16:26
你好, 我按照历程捣鼓了一下,貌似 显示 cpu 利用率等出现都是 0, 只有 任务优先级等是正常的

明天上午发教程,看我几个关键点说明。
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2021-6-20 21:15:16 | 显示全部楼层
该版本的工程相较于前面发布的工程,缺少了两个任务:AppTaskSTAT和AppTaskIDLE,是不是说明在原装的程序里边,这两个线程是不需要的呢?更加精简了程序?
CPU的利用率计算放在了AppTaskStart线程中,这个可以理解,但是在该版本中AppTaskIDLE线程消失了,难道说空闲任务完全变得不需要了吗?
初次学习,不是很理解,请教大神,谢谢!

===============================================================
CPU利用率 =  0.81%
任务执行时间 = 0.050203250s
空闲执行时间 = 6.558257690s
中断执行时间 = 0.013879565s
系统总执行时间 = 6.622340505s
===============================================================
任务优先级   任务栈    当前使用栈   最大栈使用   任务名
   Prio     StackSize   CurStack    MaxStack   Taskname
    2         4092        279         547      App Task Start
    3         4092        111         111      App Msp Pro
    4         4092        111         119      App Task UserIF
    5         4092        111         111      App Task COM
    0         1020        151         151      System Timer Thread
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2021-6-20 21:29:04 | 显示全部楼层
再请教一个问题:
static  void  AppTaskCreate (void)
{
        /**************创建MsgPro任务*********************/
    tx_thread_create(&AppTaskMsgProTCB,               /* 任务控制块地址 */   
                       "App Msp Pro",                 /* 任务名 */
                       AppTaskMsgPro,                  /* 启动任务函数地址 */
                       0,                             /* 传递给任务的参数 */
                       &AppTaskMsgProStk[0],            /* 堆栈基地址 */
                       APP_CFG_TASK_MsgPro_STK_SIZE,    /* 堆栈空间大小 */  
                       APP_CFG_TASK_MsgPro_PRIO,        /* 任务优先级*/
                       APP_CFG_TASK_MsgPro_PRIO,        /* 任务抢占阀值 */
                       2,                                          /* 不开启时间片 */
                       TX_AUTO_START);                /* 创建后立即启动 */
   

        /**************创建USER IF任务*********************/
    tx_thread_create(&AppTaskUserIFTCB,               /* 任务控制块地址 */      
                       "App Task UserIF",              /* 任务名 */
                       AppTaskUserIF,                  /* 启动任务函数地址 */
                       0,                              /* 传递给任务的参数 */
                       &AppTaskUserIFStk[0],            /* 堆栈基地址 */
                       APP_CFG_TASK_USER_IF_STK_SIZE,  /* 堆栈空间大小 */  
                       APP_CFG_TASK_USER_IF_PRIO,      /* 任务优先级*/
                       APP_CFG_TASK_USER_IF_PRIO,      /* 任务抢占阀值 */
                       TX_NO_TIME_SLICE,               /* 不开启时间片 */
                       TX_AUTO_START);                 /* 创建后立即启动 */

        /**************创建COM任务*********************/
    tx_thread_create(&AppTaskCOMTCB,               /* 任务控制块地址 */   
                       "App Task COM",              /* 任务名 */
                       AppTaskCOM,                  /* 启动任务函数地址 */
                       0,                           /* 传递给任务的参数 */
                       &AppTaskCOMStk[0],            /* 堆栈基地址 */
                       APP_CFG_TASK_COM_STK_SIZE,    /* 堆栈空间大小 */  
                       APP_CFG_TASK_COM_PRIO,        /* 任务优先级*/
                       APP_CFG_TASK_COM_PRIO,        /* 任务抢占阀值 */
                       2,                                              /* 不开启时间片 */
                       TX_AUTO_START);               /* 创建后立即启动 */
}

这里边有三个地方设置/* 不开启时间片 */,但是TX_NO_TIME_SLICE是0,其他的两个是2,不是一样的设置,有点晕
回复

使用道具 举报

7

主题

108

回帖

129

积分

初级会员

积分
129
发表于 2021-6-21 00:02:07 | 显示全部楼层
多久把睡眠模式整出来!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-21 00:16:22 | 显示全部楼层
xyfox 发表于 2021-6-20 21:15
该版本的工程相较于前面发布的工程,缺少了两个任务:AppTaskSTAT和AppTaskIDLE,是不是说明在原装的程序里 ...

那个是我自己搞的一个方案,使用官方的,就不需要了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-21 00:17:05 | 显示全部楼层
xyfox 发表于 2021-6-20 21:29
再请教一个问题:
static  void  AppTaskCreate (void)
{

这个是之前做时间片调度例子时修改了,忘了修改回来。
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2021-6-21 07:24:50 | 显示全部楼层
eric2013 发表于 2021-6-21 00:16
那个是我自己搞的一个方案,使用官方的,就不需要了。

学习了,感谢指导!
刚才也搜索到大神的原来的帖子,上面已经解释了这个问题了

发现一个尴尬的问题,ThreadX貌似没有空闲任务啊,这是什么玩法
http://www.armbbs.cn/forum.php?m ... 0&fromuid=37279
(出处: 硬汉嵌入式论坛)

是我自己学习不彻底,有劳大神了,再次感谢
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-21 16:12:36 | 显示全部楼层
大神好,
我按照历程及教程移植这个功能,貌似 使用 ac6  的可以, 而使用 ac5 的话, cpu 使用率始终都是  100%

使用ac5
threadx info err.png

// --------------------------
使用 ac6
threadx info ac6.png

2中 方法中,工程程序都是一模一样的, 就只是一个使用 ac6, 一个使用 ac5 的差别而已
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-22 08:22:08 | 显示全部楼层
hpdell 发表于 2021-6-21 16:12
大神好,
我按照历程及教程移植这个功能,貌似 使用 ac6  的可以, 而使用 ac5 的话, cpu 使用率始终都是  10 ...

AC也不正常,任务执行时间高达20s了,空闲是57%。

是不是DWT时钟周期计数器没有正常启动。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-22 09:05:03 | 显示全部楼层
eric2013 发表于 2021-6-22 08:22
AC也不正常,任务执行时间高达20s了,空闲是57%。

是不是DWT时钟周期计数器没有正常启动。

dwt 运行时正常的,我使用 dwt 搞的延时测试,延时时间是准确的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-22 09:19:08 | 显示全部楼层
hpdell 发表于 2021-6-22 09:05
dwt 运行时正常的,我使用 dwt 搞的延时测试,延时时间是准确的

注意开启时间,一一定要在ThreadX开启之前就初始化。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-22 16:16:30 | 显示全部楼层
eric2013 发表于 2021-6-22 09:19
注意开启时间,一一定要在ThreadX开启之前就初始化。

在启动 tx_initialize_low_level.s 文件里面也是开启了 dwt 的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-22 16:30:44 | 显示全部楼层
hpdell 发表于 2021-6-22 16:16
在启动 tx_initialize_low_level.s 文件里面也是开启了 dwt 的

单独使能下,参考我楼主位,我的在bsp.c调用的
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-22 19:47:33 | 显示全部楼层
eric2013 发表于 2021-6-22 16:30
单独使能下,参考我楼主位,我的在bsp.c调用的

dwt 实现方法跟你的历程一样的, bsp.c 里面也增加了 dwt 的开启功能, *.s 里面也开启了 dwt  的 启动, 使用 dwt  搞的延时 函数,测试延时时间也是正确的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-23 09:06:34 | 显示全部楼层
hpdell 发表于 2021-6-22 19:47
dwt 实现方法跟你的历程一样的, bsp.c 里面也增加了 dwt 的开启功能, *.s 里面也开启了 dwt  的 启动, 使 ...

别的只有宏定义问题了。

另外你的版本是最新的V6.1.7吧
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-23 19:38:22 | 显示全部楼层
eric2013 发表于 2021-6-23 09:06
别的只有宏定义问题了。

另外你的版本是最新的V6.1.7吧

我使用 的 os 是 v6.1.7 版本, 另外宏定义我也仔细对照过了, 但是就是不行啊, 郁闷的狠辣
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-24 08:06:06 | 显示全部楼层
hpdell 发表于 2021-6-23 19:38
我使用 的 os 是 v6.1.7 版本, 另外宏定义我也仔细对照过了, 但是就是不行啊, 郁闷的狠辣

直接用我的工程,修改下晶振试试,这样还方便找问题。

另外你那边重新上电也不正常吗
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-24 09:13:01 | 显示全部楼层
eric2013 发表于 2021-6-24 08:06
直接用我的工程,修改下晶振试试,这样还方便找问题。

另外你那边重新上电也不正常吗

貌似重新上电也是一样的结果啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-6-24 10:52:03 | 显示全部楼层
hpdell 发表于 2021-6-24 09:13
貌似重新上电也是一样的结果啊

那估计是没有移植好。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2021-6-24 11:57:34 | 显示全部楼层
eric2013 发表于 2021-6-24 10:52
那估计是没有移植好。

后续有空我再捣鼓看看,
回复

使用道具 举报

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2021-8-25 18:20:41 | 显示全部楼层
怎么看DWT计数器走了没有?这个应该是属于内核的一部分,我在keil的调试窗口里找了半天愣是没找到DWT。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107028
QQ
 楼主| 发表于 2021-8-26 08:05:59 | 显示全部楼层
wJw 发表于 2021-8-25 18:20
怎么看DWT计数器走了没有?这个应该是属于内核的一部分,我在keil的调试窗口里找了半天愣是没找到DWT。。。

打印DWT的计数寄存器看即可
回复

使用道具 举报

73

主题

1200

回帖

1419

积分

至尊会员

积分
1419
发表于 2021-8-26 08:40:58 | 显示全部楼层
什么是ThreadX内核原装的任务?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-14 16:01 , Processed in 0.458544 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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