eric2013 发表于 2022-8-18 13:13:09

【原创】H7-TOOL的RTOS Trace操作说明,不需要目标板额外做任何代码,实时检测RTOS任务执行情况,支持在线和脱机玩法2023-12-04

从2.20版本固件开始支持,持续更新

【说明】
像uC/Probe,SystemView,Tracealyzer,   ThreadX TraceX都是这种功能的代表,但是使用的时候需要各种各样的骚操作,比如SystemView需要用户倒腾补丁代码进去才行,又比如TraceX,需要目标板导出运行信息,再加载到TraceX,非常繁琐。
所以H7-TOOL的RTOS Trace功能应运而生,采用LUA小程序,支持个性化修改,不需要用户编写LUA,可以直接无痛生成。

【特色】
1、已经支持RTX5,ThreadX,uCOS-III,uCOS-II和FreeRTOS。陆续增加RT-Thread,MbedOS,NuttX和Zephyr。
2、仅需用H7-TOOL的SWD接口连接目标板,支持3线,4线或5线方式。
3、全程无需复位芯片,实时检测,而且随时随地都可以连接目标板,不影响目标板的正常功能,不需要额外资源,不需要用户像SystemView似的倒腾些补丁代码上去。
4、支持WiFi、以太网和USB连接,支持外网远程访问,USB访问速度最快。
5、支持RTOS Trace链表功能,可以一键了解内核链表框架。OS内核源码就是通过各种链表组装起来的,让大家更直观的看内核实现,专门录制的一期视频教程
   https://www.armbbs.cn/forum.php?mod=viewthread&tid=121848

【注意事项】
1、目标板下载的程序和elf,axf,out文件要对应。
2、需要客户PC机安装Keil MDK 5.20以上。

【从elf文件中获得固件】
大家可以使用IDE直接下载工程,也可以使用我们脱机烧录下载。
1、执行"解析ELF"时,会自动解析出其中的固件。路径:h7toolPC_release\Temp\target.hex。
2、用户可将hex文件通过脱机烧录功能写入目标板。
3、方便客户管理不同版本的elf文件,避免目标板固件和axf文件不对应。

【IDE开发环境】
1、务必使能Debug信息输出。如果工程可以正常调试,就说明已经使能了调试信息输出。
2、MDK要勾选option->output -> Debug Infomation选项。
3、IAR要选择选择优化等级low,其中如下两个地方比勾选。
   a. option->C/C++ Compiler->Output选项中勾选Generate debug information
   b. option->linker->Output选项中勾选Include Generate debug information in output
4、使用GCC类开发环境同理,大家仅需保证自己的工程可以正常调试,就可以说明已经使能了调试信息输出。
5、各种IDE测试情况:
   a、RTOS Trace的MDK AC5文件解析都没问题。
   b、RTOS Trace的MDK AC6文件解析,不要使用MDK5.38/5.38a带的AC6.19编程的工程生成的调试信息,有bug,最新发布MDK5.39解决了这个问题。
   c、IAR的解析暂没有发现问题,含当前最新的IAR9.3X。
   d、GCC测试了STM32CubeIDE和Embedded Studio的几个版本,含当前最新版,都没有问题。

【uCOS-III】
1、不限制uCOS-III版本
2、使能uCOS-III的调试信息和统计任务宏定义,如果大家的移植没问题都可以正常展示:
   #define OS_CFG_DBG_EN             1u-- 使能调试信息
   #define OS_CFG_STAT_TASK_EN       1u
   #define CPU_CFG_INT_DIS_MEAS_EN   1u

【RTX5】
1、不限制版本,大部分信息都可以正常检索。

【ThreadX】
1、ThreadX V6.0.0版本到V6.1.7版本源码本身还不支持任务统计检索,所以TOOL可以检索部分信息。
2、V6.1.7版本及其以上已经开始自带任务统计信息,大家如果正常移植了,TOOL可以正常检索所有信息。

【uCOS-II】
1、使用前必看操作说明:https://www.armbbs.cn/forum.php?mod=viewthread&tid=119845
2、推荐使用2.92及其以上版本,含最新的2.93.x
3、创建任务请使用函数OSTaskCreateExt,函数OSTaskCreate创建的任务信息不全。
4、使能uCOS-II的调试信息和统计任务宏定义,如果大家的移植没问题都可以正常展示:
   使能OS_DEBUG_EN
   使能OS_TASK_STAT_EN
   使能OS_EVENT_NAME_EN
   使能OS_TASK_CREATE_EXT_EN
   使能OS_EVENT_EN, 并设置OS_MAX_EVENTS > 0u
   使能OSFlagEn,并设置OS_MAX_FLAGS > 0u

【FreeRTOS】
1、使用前必看操作说明:https://www.armbbs.cn/forum.php?mod=viewthread&tid=119914
2、请使用V8.2.X及其以上版本,含最新的V10.X, 也支持使用CMSIS-RTOS V2封装层。
3、开启FreeRTOS任务信息统计功能,FreeRTOSConfig.h文件添加的定义
      extern volatile uint32_t ulHighFrequencyTimerTicks;
      #define configGENERATE_RUN_TIME_STATS                     1
   #define configUSE_STATS_FORMATTING_FUNCTIONS         1
   #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()    (ulHighFrequencyTimerTicks = 0ul)
   #define portGET_RUN_TIME_COUNTER_VALUE()                  ulHighFrequencyTimerTicks

    并在其它C源文件, 定义变量volatile uint32_t ulHighFrequencyTimerTicks,以我们的开发板FreeRTOS程序为例,是开了个SysInfoTest.c文件,在此文件里面,每50us变量+1。
         
4、同时在FreeRTOSConfig.h文件里面添加宏定义
   #define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }   

5、视频教程
    【实战技能】 单步运行源码分析,一期视频整明白FreeRTOS内核源码框架和运行机制,RTOS Trace链表功能展示
   https://www.armbbs.cn/forum.php?mod=viewthread&tid=121848

【常见问题解决】
https://www.armbbs.cn/forum.php?mod=viewthread&tid=118141

【操作说明】

1、打开要解析的文件,MDK生成的是axf文件,IAR生成的是out文件,GCC生成的是elf文件

比如下面一个基于我们H7开发板的工程代码,将其编译下载到目标板里面,
https://www.armbbs.cn/static/image/filetype/zip.gif基于STM32H7的uCOS-III + FatFS + emWin + ST USB的综合模板.7z (7.09MB)

加载编译代码的可执行文件:


2、点击解析elf



3、点击”刷新一次"按钮就可以观察到输出信息。勾选”定时刷新"可自动刷新,刷新周期可设置。

注:如果大家的程序里面使能了Cache,记得勾上Cache选项

uCOS-III单次点击效果:



下面是uCOS-III勾选“定时刷新” 动态效果:

https://img.alicdn.com/imgextra/i2/299314119/O1CN01K6qXQm1gIYD9UKhzR_!!299314119.gif

uCOS-III链接展示:




4、同理,RTX5的单次点击效果如下:



RTX5的动态刷新效果:

https://img.alicdn.com/imgextra/i2/299314119/O1CN01lZw8FI1gIYD7buP8C_!!299314119.gif

RTX5链表展示:



5、ThreadX的单次点击效果如下:



动态效果如下:

https://img.alicdn.com/imgextra/i3/299314119/O1CN01LVGaFf1gIYCyhM3SU_!!299314119.gif

ThreadX链表展示:


6、FreeRTOS单次点击效果

https://img.anfulai.cn/dz/attachment/forum/202307/07/091057dp9o40ks1osz1996.png

动态效果:
https://img.anfulai.cn/dz/attachment/forum/202307/07/091105zy22x9qxx2xnczuw.gif

FreeRTOS链表展示


7、uCOS-II单次点击效果



动态效果:

https://img.anfulai.cn/dz/attachment/forum/202306/30/011338kitt6i2fz24ti76q.gif

uCOS-II链表展示









会飞的猪_2020 发表于 2022-8-18 13:26:14

帮顶

会飞的猪_2020 发表于 2022-8-18 13:30:42

硬汉哥本身就是一个牛X的一塌糊涂的人,连这么牛X的人,都用了如此夸张的形容词来形容这个功能。
这个功能值得期待。

Keepgoing 发表于 2022-8-18 13:43:26

牛逼,玩出花了

taovik 发表于 2022-8-18 14:11:14

坐个小板凳

旺仔不喝牛奶 发表于 2022-8-18 15:04:26

赶紧去买一个,再晚点涨价了

sync 发表于 2022-8-18 15:12:56

牛,一定要上来顶下{:8:}

nnqtdf 发表于 2022-8-18 16:02:55

{:8:}{:8:}{:8:}

cjunrong 发表于 2022-8-18 19:28:44

这个牛逼

gallop020142 发表于 2022-8-19 08:37:25

牛!现在是监测,是不是可以黑掉目标程序?

eric2013 发表于 2022-8-19 10:22:01

会飞的猪_2020 发表于 2022-8-18 13:30
硬汉哥本身就是一个牛X的一塌糊涂的人,连这么牛X的人,都用了如此夸张的形容词来形容这个功能。
这个功能 ...

相比现有的机制,想了个更骚的办法,用户可以基于自己的RTOS工程生成LUA小程序,复制到TOOL上位机就可以检索了。

eric2013 发表于 2022-8-19 10:27:19

gallop020142 发表于 2022-8-19 08:37
牛!现在是监测,是不是可以黑掉目标程序?

功能本身需要用户基于自己的RTOS工程,生成LUA小程序。

当然,如果想随意修改目标程序,也没问题。TOOL读写操作目标板API都可以直接调用。

jowo_pBuGF 发表于 2022-8-19 10:45:31

eric2013 发表于 2022-8-19 10:27
功能本身需要用户基于自己的RTOS工程,生成LUA小程序。

当然,如果想随意修改目标程序,也没问题。TOO ...

那这样的话是不是也可以用于一些测试,比如给某个变量赋值,然后看程序运行情况。人为的去制造异常。

eric2013 发表于 2022-8-19 10:48:07

jowo_pBuGF 发表于 2022-8-19 10:45
那这样的话是不是也可以用于一些测试,比如给某个变量赋值,然后看程序运行情况。人为的去制造异常。

可以随意设置修改。

byccc 发表于 2022-8-19 11:04:11

可以考虑支持更多的RTOS,操作过程尽可能简单易用。

eric2013 发表于 2022-8-19 11:07:55

byccc 发表于 2022-8-19 11:04
可以考虑支持更多的RTOS,操作过程尽可能简单易用。

操作过程给出简单,不需要用户编程代码,我都写好了,仅需生成LUA小程序复制到TOOL运行即可

byccc 发表于 2022-8-19 12:00:21

eric2013 发表于 2022-8-19 11:07
操作过程给出简单,不需要用户编程代码,我都写好了,仅需生成LUA小程序复制到TOOL运行即可

{:8:}

可以可以

挖东衣宇 发表于 2022-8-19 14:04:10

不懂,至少也得在目标芯片上移植检测代码才行吧

旮旯旭 发表于 2022-8-19 14:21:41

挖东衣宇 发表于 2022-8-19 14:04
不懂,至少也得在目标芯片上移植检测代码才行吧

不需要,基于SWD接口,访问特定操作系统的寄存器值获取的把,看16楼硬汉的回复。如果要目标芯片移植代码,那就不算厉害了。相当于使用操作系统自带的接口SWD访问

Dinor 发表于 2022-8-19 14:41:46

硬汉哥,会支持RT-Thread吗

eric2013 发表于 2022-8-19 16:37:48

挖东衣宇 发表于 2022-8-19 14:04
不懂,至少也得在目标芯片上移植检测代码才行吧

直接使用大家的RTOS工程,生成对应的LUA小程序就可以了。这个LUA小程序可以把相关的信息都卷出来。

将LUA小程序复制到TOOL端后,TOOL直接操作相应的RAM和Flash空间地址检索信息出来。不需要目标板CPU的参与。

eric2013 发表于 2022-8-19 16:39:00

旮旯旭 发表于 2022-8-19 14:21
不需要,基于SWD接口,访问特定操作系统的寄存器值获取的把,看16楼硬汉的回复。如果要目标芯片移植代码 ...

对,就是这个意思。

eric2013 发表于 2022-8-19 16:40:28

Dinor 发表于 2022-8-19 14:41
硬汉哥,会支持RT-Thread吗

可以支持,等我熟悉RTT了,也会做个对应的DEMO。这个玩法需要我熟悉下操作系统的源码。

大家可以不用熟悉。

gnail092 发表于 2022-8-19 20:22:47

eric2013 发表于 2022-8-19 16:40
可以支持,等我熟悉RTT了,也会做个对应的DEMO。这个玩法需要我熟悉下操作系统的源码。

大家可以不用 ...

硬汉兄,uCOS-III做了,uCOS-II也做下吧,项目中还在用uCOS-II

eric2013 发表于 2022-8-19 21:10:38

gnail092 发表于 2022-8-19 20:22
硬汉兄,uCOS-III做了,uCOS-II也做下吧,项目中还在用uCOS-II

发布的时候会有多款RTOS Trace支持上线。

missfox 发表于 2022-8-20 11:13:14

eric2013 发表于 2022-8-19 21:10
发布的时候会有多款RTOS Trace支持上线。

牛逼卡拉斯,坐等月末发布:victory:

在水一方 发表于 2022-8-20 14:35:50

可以开发个高级功能,卷出来每个任务的堆栈压栈调用,通过add2lin 可以解析出来。查看当前任务状态

eric2013 发表于 2022-8-20 15:21:27

在水一方 发表于 2022-8-20 14:35
可以开发个高级功能,卷出来每个任务的堆栈压栈调用,通过add2lin 可以解析出来。查看当前任务状态
所有任务的状态信息都可以读出来,已经支持了。

eric2013 发表于 2022-8-22 01:28:29

白天周报发布完毕后,开始继续完善,把其它RTOS的Trace实现了。

missfox 发表于 2022-8-22 10:46:53

eric2013 发表于 2022-8-22 01:28
白天周报发布完毕后,开始继续完善,把其它RTOS的Trace实现了。

关注,期待早日发布。

henge-stone 发表于 2022-8-22 15:09:57

大佬,牛啤,这功能要赶上Trace

morning_enr6U 发表于 2022-8-23 09:08:45

{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}{:34:}

abcde1224 发表于 2022-8-24 09:18:02

能检测rtthreadx嘛硬汉哥

eric2013 发表于 2022-8-24 10:07:37

abcde1224 发表于 2022-8-24 09:18
能检测rtthreadx嘛硬汉哥

第二版支持RTT,MbedOS和Zephyr,这三个的内核源码我还没有看过,实现这个功能得研究下源码。

当前先把ThreadX,RTX4, RTX5,FreeRTOS, uCOS-II,uCOS-III做了。

abcde1224 发表于 2022-8-24 10:38:40

eric2013 发表于 2022-8-24 10:07
第二版支持RTT,MbedOS和Zephyr,这三个的内核源码我还没有看过,实现这个功能得研究下源码。

当前先 ...

可以扒一下tracealyzer检测部分的源码都是注入到线程中我一直想搞个类似于这样的塞rtt里面 今年项目用的rtt多它支持的那些就应该很快集成到h7-tool了

eric2013 发表于 2022-8-24 10:55:24

abcde1224 发表于 2022-8-24 10:38
可以扒一下tracealyzer检测部分的源码都是注入到线程中我一直想搞个类似于这样的塞rtt里面 今年项目 ...
我们不用这种方法,太麻烦。采用一种更好的思路,完全不需要目标板CPU参与。用户使用自己的程序生成LUA小程序(复制粘贴运行下就出来了)。
然后TOOL就可以通过SWD接口检索各种信息了。

abcde1224 发表于 2022-8-24 14:07:46

eric2013 发表于 2022-8-24 10:55
我们不用这种方法,太麻烦。采用一种更好的思路,完全不需要目标板CPU参与。用户使用自己的程序生成LUA小 ...

咦这样的嘛硬汉哥加油 期待你的力作:lol:lol:lol

eric2013 发表于 2022-8-26 10:16:12

重新弄了几个接口函数,方便检索采集信息。

eric2013 发表于 2022-8-28 02:20:32


qqjamesjian 发表于 2022-8-31 11:21:07

RTOS lua 的例子更新了吗?我在期待中
页: [1] 2 3
查看完整版本: 【原创】H7-TOOL的RTOS Trace操作说明,不需要目标板额外做任何代码,实时检测RTOS任务执行情况,支持在线和脱机玩法2023-12-04