关于ThreadX任务统计分析功能
通过代码库XX:\GitHub\azure-rtos\threadx\utility\execution_profile_kit
发现ThreadX全家桶提供了执行任务分析工具
有没有资料能够深入分析使用呢?
我也看到这个了,准备移植下。 eric2013 发表于 2021-6-3 14:50
我也看到这个了,准备移植下。
我根据头文件里描述,尝试了一下,没成,关心的几个利用率时间始终为零 wanglehui_12 发表于 2021-6-5 14:12
我根据头文件里描述,尝试了一下,没成,关心的几个利用率时间始终为零
过几天了我试试。 eric2013 发表于 2021-6-3 14:50
我也看到这个了,准备移植下。
这个功能是不是就对应着IAR里面ThreadX那个当前灰色无显示的插件:) ndx1986 发表于 2021-6-6 17:26
这个功能是不是就对应着IAR里面ThreadX那个当前灰色无显示的插件
有可能,本周有时间我试试。 我也没用起来呢
已经搞定
搞定ThreadX原装的任务,中断和空闲执行时间统计功能
http://www.armbbs.cn/forum.php?mod=viewthread&tid=107270&fromuid=58
(出处: 硬汉嵌入式论坛)
eric2013 发表于 2021-6-8 15:09
已经搞定
搞定ThreadX原装的任务,中断和空闲执行时间统计功能
{:32:}{:32:}{:32:}
有啥特殊注意要点吗? 我找到原因了,
_tx_execution_thread_enter函数在汇编文件tx_thread_schedule.s中没有被调用
需要开启两个宏定义:
TX_EXECUTION_PROFILE_ENABLE
TX_ENABLE_EXECUTION_CHANGE_NOTIFY
获得统计时间计数:
公式我使用如下方式:
根据API接口函数_tx_execution_thread_time_get,可以细分到每个Task的CPU利用率计算
多说两句,这个两个宏定义有点别扭
在C源码处生效
(1) tx_user.h中定义,或者
(2)IDE里全局定义
还需要在汇编处生效
通过分析源码,推测出于兼容性考虑,TX_ENABLE_EXECUTION_CHANGE_NOTIFY定义没有被删除
在使用中,等同于 TX_EXECUTION_PROFILE_ENABLE
但是移植部分代码,没有处理完整,
还是用TX_ENABLE_EXECUTION_CHANGE_NOTIFY,所以需要在汇编处定义
TX_ENABLE_EXECUTION_CHANGE_NOTIFY
wanglehui_12 发表于 2021-6-9 09:28
获得统计时间计数:
你的ISR中断时间还没有执行,需要也加上。
另外这个CPU利用率计算的是绝对值,从开始运行到现在。
需要你做个简单的处理,做成单位时间内的CPU利用率,这样效果更好些。
eric2013 发表于 2021-6-9 10:06
你的ISR中断时间还没有执行,需要也加上。
嗯,是漏掉了{:33:} 分析了tx_execution_profile,突发奇想,这个模块本质上提供了ISR进出 和 Thread进出Hook功能,拓展这个模块,是不是就能实现SystemView这个工具的移植呢?:)
本帖最后由 吉吉安 于 2021-8-19 00:59 编辑
大佬们请问下。宏都已经包含了,几个时间还是为0。调试状态下看到_tx_execution_thread_enter执行不了。
吉吉安 发表于 2021-8-18 20:41
大佬们请问下。宏都已经包含了,几个时间还是为0。调试状态下看到_tx_execution_thread_enter执行不了。
...
方便的话,参考我的吧
教程是第16章,例子是V7-3011
http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 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。
附图两边的差异,更详细的原因还望有了解过这一块的大佬解惑。
吉吉安 发表于 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
(出处: 硬汉嵌入式论坛)
eric2013 发表于 2021-8-19 17:36
ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法用,AC5的汇编代码里面搞了个 ...
谢谢。。:handshake eric2013 发表于 2021-8-19 09:25
方便的话,参考我的吧
教程是第16章,例子是V7-3011
我参考了这个方案,也是AC6,工程是使用CubeMX直接生成的,这样避免了移植修改太多的文件。也是这个问题,那几个变量移植没有变化。但是在调试状态下,全速运行确是有的。C:\Users\Administrator\Desktop\11.png lyj41801 发表于 2024-1-10 11:47
我参考了这个方案,也是AC6,工程是使用CubeMX直接生成的,这样避免了移植修改太多的文件。也是这个问题 ...
调试结果是这样的
然后我使用V6-3011例程测试了一下,也是同样的情况。在调试模式下全速运行是没有问题的,一旦退出调试模式就不行了。 lyj41801 发表于 2024-1-10 15:17
然后我使用V6-3011例程测试了一下,也是同样的情况。在调试模式下全速运行是没有问题的,一旦退出调试模式 ...
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。 eric2013 发表于 2024-1-11 10:15
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。
试过,没有用。在调试模式下是正常的,一旦退出调试模式就不对了。打印统计相关的几个变量都是没有变化的。 eric2013 发表于 2024-1-11 10:15
这个应该是DWT时钟周期计数器没有正常启动,板子断电,等待10秒重新上电是否正常。
是的,我在应用函数里面再次调用了一次就好了。它不是在low_level.s那个文件里面已经启动了吗。
页:
[1]