wanglehui_12 发表于 2021-6-3 13:24:13

关于ThreadX任务统计分析功能

通过代码库
XX:\GitHub\azure-rtos\threadx\utility\execution_profile_kit
发现ThreadX全家桶提供了执行任务分析工具

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


eric2013 发表于 2021-6-3 14:50:27

我也看到这个了,准备移植下。

wanglehui_12 发表于 2021-6-5 14:12:20

eric2013 发表于 2021-6-3 14:50
我也看到这个了,准备移植下。

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

eric2013 发表于 2021-6-5 14:20:17

wanglehui_12 发表于 2021-6-5 14:12
我根据头文件里描述,尝试了一下,没成,关心的几个利用率时间始终为零

过几天了我试试。

ndx1986 发表于 2021-6-6 17:26:47

eric2013 发表于 2021-6-3 14:50
我也看到这个了,准备移植下。

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

eric2013 发表于 2021-6-7 09:55:12

ndx1986 发表于 2021-6-6 17:26
这个功能是不是就对应着IAR里面ThreadX那个当前灰色无显示的插件

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

质的飞跃 发表于 2021-6-7 12:22:02

我也没用起来呢

eric2013 发表于 2021-6-8 15:09:53

已经搞定

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

wanglehui_12 发表于 2021-6-9 08:37:41

eric2013 发表于 2021-6-8 15:09
已经搞定

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


{:32:}{:32:}{:32:}

有啥特殊注意要点吗?

wanglehui_12 发表于 2021-6-9 09:23:45

我找到原因了,
_tx_execution_thread_enter函数在汇编文件tx_thread_schedule.s中没有被调用

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

wanglehui_12 发表于 2021-6-9 09:28:18

获得统计时间计数:




公式我使用如下方式:


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


wanglehui_12 发表于 2021-6-9 09:36:57

多说两句,这个两个宏定义有点别扭

在C源码处生效
(1) tx_user.h中定义,或者
(2)IDE里全局定义


还需要在汇编处生效

wanglehui_12 发表于 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





eric2013 发表于 2021-6-9 10:06:39

wanglehui_12 发表于 2021-6-9 09:28
获得统计时间计数:



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

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

wanglehui_12 发表于 2021-6-9 10:07:29

eric2013 发表于 2021-6-9 10:06
你的ISR中断时间还没有执行,需要也加上。

嗯,是漏掉了{:33:}

wanglehui_12 发表于 2021-6-9 13:04:16

分析了tx_execution_profile,突发奇想,这个模块本质上提供了ISR进出 和 Thread进出Hook功能,拓展这个模块,是不是就能实现SystemView这个工具的移植呢?:)

吉吉安 发表于 2021-8-18 20:41:28

本帖最后由 吉吉安 于 2021-8-19 00:59 编辑


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






eric2013 发表于 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

吉吉安 发表于 2021-8-19 13:44:50

eric2013 发表于 2021-8-19 09:25
方便的话,参考我的吧

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



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

V6,V7
IF :DEF: 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。


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







eric2013 发表于 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?mod=viewthread&tid=107261&fromuid=58
(出处: 硬汉嵌入式论坛)

吉吉安 发表于 2021-8-19 23:47:19

eric2013 发表于 2021-8-19 17:36
ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法用,AC5的汇编代码里面搞了个 ...

谢谢。。:handshake

lyj41801 发表于 2024-1-10 11:47:49

eric2013 发表于 2021-8-19 09:25
方便的话,参考我的吧

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


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

lyj41801 发表于 2024-1-10 14:01:54

lyj41801 发表于 2024-1-10 11:47
我参考了这个方案,也是AC6,工程是使用CubeMX直接生成的,这样避免了移植修改太多的文件。也是这个问题 ...

调试结果是这样的

lyj41801 发表于 2024-1-10 15:17:45

然后我使用V6-3011例程测试了一下,也是同样的情况。在调试模式下全速运行是没有问题的,一旦退出调试模式就不行了。

eric2013 发表于 2024-1-11 10:15:58

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

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

lyj41801 发表于 2024-1-11 11:17:07

eric2013 发表于 2024-1-11 10:15
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。

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

lyj41801 发表于 2024-1-11 11:38:45

eric2013 发表于 2024-1-11 10:15
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。

是的,我在应用函数里面再次调用了一次就好了。它不是在low_level.s那个文件里面已经启动了吗。
页: [1]
查看完整版本: 关于ThreadX任务统计分析功能