硬汉嵌入式论坛

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

[ThreadX全家桶] 关于ThreadX任务统计分析功能

  [复制链接]

38

主题

291

回帖

405

积分

高级会员

积分
405
发表于 2021-6-3 13:24:13 | 显示全部楼层 |阅读模式
通过代码库
XX:\GitHub\azure-rtos\threadx\utility\execution_profile_kit
发现ThreadX全家桶提供了执行任务分析工具

有没有资料能够深入分析使用呢?


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-6-3 14:50:27 | 显示全部楼层
我也看到这个了,准备移植下。
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-5 14:12:20 | 显示全部楼层
eric2013 发表于 2021-6-3 14:50
我也看到这个了,准备移植下。

我根据头文件里描述,尝试了一下,没成,关心的几个利用率时间始终为零
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-6-5 14:20:17 | 显示全部楼层
wanglehui_12 发表于 2021-6-5 14:12
我根据头文件里描述,尝试了一下,没成,关心的几个利用率时间始终为零

过几天了我试试。
回复

使用道具 举报

4

主题

51

回帖

68

积分

初级会员

积分
68
发表于 2021-6-6 17:26:47 | 显示全部楼层
eric2013 发表于 2021-6-3 14:50
我也看到这个了,准备移植下。

这个功能是不是就对应着IAR里面ThreadX那个当前灰色无显示的插件
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-6-7 09:55:12 | 显示全部楼层
ndx1986 发表于 2021-6-6 17:26
这个功能是不是就对应着IAR里面ThreadX那个当前灰色无显示的插件

有可能,本周有时间我试试。
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-6-7 12:22:02 | 显示全部楼层
我也没用起来呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-6-8 15:09:53 | 显示全部楼层
已经搞定

搞定ThreadX原装的任务,中断和空闲执行时间统计功能
http://www.armbbs.cn/forum.php?m ... 7270&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 08:37:41 | 显示全部楼层
eric2013 发表于 2021-6-8 15:09
已经搞定

搞定ThreadX原装的任务,中断和空闲执行时间统计功能



有啥特殊注意要点吗?
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 09:23:45 | 显示全部楼层
我找到原因了,
_tx_execution_thread_enter函数在汇编文件tx_thread_schedule.s中没有被调用

需要开启两个宏定义:
TX_EXECUTION_PROFILE_ENABLE
TX_ENABLE_EXECUTION_CHANGE_NOTIFY
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 09:28:18 | 显示全部楼层
获得统计时间计数:

2021-06-09_9-24-45.png


公式我使用如下方式:
2021-06-09_9-26-50.png

根据API接口函数_tx_execution_thread_time_get,可以细分到每个Task的CPU利用率计算


回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 09:36:57 | 显示全部楼层
多说两句,这个两个宏定义有点别扭

在C源码处生效
(1) tx_user.h中定义,或者
(2)IDE里全局定义
2021-06-09_9-29-11.png

还需要在汇编处生效

333.png
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 09:53:05 | 显示全部楼层
通过分析源码,推测出于兼容性考虑,TX_ENABLE_EXECUTION_CHANGE_NOTIFY定义没有被删除
在使用中,等同于 TX_EXECUTION_PROFILE_ENABLE


但是移植部分代码,没有处理完整,
还是用TX_ENABLE_EXECUTION_CHANGE_NOTIFY,所以需要在汇编处定义
TX_ENABLE_EXECUTION_CHANGE_NOTIFY

11.png

22.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-6-9 10:06:39 | 显示全部楼层
wanglehui_12 发表于 2021-6-9 09:28
获得统计时间计数:

你的ISR中断时间还没有执行,需要也加上。
另外这个CPU利用率计算的是绝对值,从开始运行到现在。

需要你做个简单的处理,做成单位时间内的CPU利用率,这样效果更好些。
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 10:07:29 | 显示全部楼层
eric2013 发表于 2021-6-9 10:06
你的ISR中断时间还没有执行,需要也加上。

嗯,是漏掉了
回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
 楼主| 发表于 2021-6-9 13:04:16 | 显示全部楼层
分析了tx_execution_profile,突发奇想,这个模块本质上提供了ISR进出 和 Thread进出Hook功能,拓展这个模块,是不是就能实现SystemView这个工具的移植呢?
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2021-8-18 20:41:28 | 显示全部楼层
本帖最后由 吉吉安 于 2021-8-19 00:59 编辑


大佬们请问下。宏都已经包含了,几个时间还是为0。调试状态下看到_tx_execution_thread_enter执行不了。




无标题.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-8-19 09:25:19 | 显示全部楼层
吉吉安 发表于 2021-8-18 20:41
大佬们请问下。宏都已经包含了,几个时间还是为0。调试状态下看到_tx_execution_thread_enter执行不了。
...

方便的话,参考我的吧

教程是第16章,例子是V7-3011

http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2021-8-19 13:44:50 | 显示全部楼层
eric2013 发表于 2021-8-19 09:25
方便的话,参考我的吧

教程是第16章,例子是V7-3011


我这边参考的是V6的例程呢。
对比V6,V7和我这边的版本发现.s文件里的条件编译有差异

V6,V7
  IF EF: TX_ENABLE_EXECUTION_CHANGE_NOTIFY                                
    /* Call the thread entry function to indicate the thread is executing.  */
    PUSH    {r0, r1}                                // Save r0 and r1
    BL      _tx_execution_thread_enter              // Call the thread execution enter function
    POP     {r0, r1}                                // Recover r0 and r1
  ENDIF


我这边的是
#if (defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) || defined(TX_EXECUTION_PROFILE_ENABLE))                               
    /* Call the thread entry function to indicate the thread is executing.  */
    PUSH    {r0, r1}                                // Save r0 and r1
    BL      _tx_execution_thread_enter              // Call the thread execution enter function
    POP     {r0, r1}                                // Recover r0 and r1
#endif

  配置工程包含的宏定义不能被.S文件识别到。将#if格式改为IF:后这个功能就正常了。
或者在.S文件中加宏定义#define TX_ENABLE_EXECUTION_CHANGE_NOTIFY。


附图两边的差异,更详细的原因还望有了解过这一块的大佬解惑。


无标题.png




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2021-8-19 17:36:03 | 显示全部楼层
吉吉安 发表于 2021-8-19 13:44
我这边参考的是V6的例程呢。
对比V6,V7和我这边的版本发现.s文件里的条件编译有差异

ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法用,AC5的汇编代码里面搞了个#if,#endif
http://www.armbbs.cn/forum.php?m ... 7261&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2021-8-19 23:47:19 | 显示全部楼层
eric2013 发表于 2021-8-19 17:36
ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法用,AC5的汇编代码里面搞了个 ...

谢谢。。
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2024-1-10 11:47:49 | 显示全部楼层
eric2013 发表于 2021-8-19 09:25
方便的话,参考我的吧

教程是第16章,例子是V7-3011

我参考了这个方案,也是AC6,工程是使用CubeMX直接生成的,这样避免了移植修改太多的文件。也是这个问题,那几个变量移植没有变化。但是在调试状态下,全速运行确是有的。C:\Users\Administrator\Desktop\11.png
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2024-1-10 14:01:54 | 显示全部楼层
lyj41801 发表于 2024-1-10 11:47
我参考了这个方案,也是AC6,工程是使用CubeMX直接生成的,这样避免了移植修改太多的文件。也是这个问题 ...

调试结果是这样的
11.png
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2024-1-10 15:17:45 | 显示全部楼层
然后我使用V6-3011例程测试了一下,也是同样的情况。在调试模式下全速运行是没有问题的,一旦退出调试模式就不行了。
12.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106746
QQ
发表于 2024-1-11 10:15:58 | 显示全部楼层
lyj41801 发表于 2024-1-10 15:17
然后我使用V6-3011例程测试了一下,也是同样的情况。在调试模式下全速运行是没有问题的,一旦退出调试模式 ...

这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2024-1-11 11:17:07 | 显示全部楼层
eric2013 发表于 2024-1-11 10:15
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。

试过,没有用。在调试模式下是正常的,一旦退出调试模式就不对了。打印统计相关的几个变量都是没有变化的。
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2024-1-11 11:38:45 | 显示全部楼层
eric2013 发表于 2024-1-11 10:15
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。

是的,我在应用函数里面再次调用了一次就好了。它不是在low_level.s那个文件里面已经启动了吗。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 00:49 , Processed in 0.258757 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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