硬汉嵌入式论坛

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

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

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-8-18 13:13:09 | 显示全部楼层 |阅读模式
从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开发板的工程代码,将其编译下载到目标板里面,
基于STM32H7的uCOS-III + FatFS + emWin + ST USB的综合模板.7z (7.09MB)

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

2、点击解析elf

image.png

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

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

uCOS-III单次点击效果:

image.png

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



uCOS-III链接展示:

12456.png


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

image.png

RTX5的动态刷新效果:



RTX5链表展示:

RTX5.png

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

image.png

动态效果如下:



ThreadX链表展示:
ThreadX.png

6、FreeRTOS单次点击效果



动态效果:


FreeRTOS链表展示
FreeRTOS.png

7、uCOS-II单次点击效果

12.png

动态效果:



uCOS-II链表展示

uCOS-II.png







评分

参与人数 9金币 +161 收起 理由
15605177809 + 1
james03 + 20 很给力!
suozhang + 20 很给力!
sa0123456 + 20 很给力!
312456990 + 20 赞一个!
笔记本的自嘲 + 20 很给力!
missfox + 20 很给力!
byccc + 20
在水一方 + 20 很给力!

查看全部评分

回复

使用道具 举报

38

主题

195

回帖

319

积分

高级会员

积分
319
发表于 2022-8-18 13:26:14 | 显示全部楼层
帮顶
回复

使用道具 举报

38

主题

195

回帖

319

积分

高级会员

积分
319
发表于 2022-8-18 13:30:42 | 显示全部楼层
硬汉哥本身就是一个牛X的一塌糊涂的人,连这么牛X的人,都用了如此夸张的形容词来形容这个功能。
这个功能值得期待。
回复

使用道具 举报

2

主题

45

回帖

51

积分

初级会员

积分
51
发表于 2022-8-18 13:43:26 | 显示全部楼层
牛逼,玩出花了
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-8-18 14:11:14 | 显示全部楼层
坐个小板凳
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-8-18 15:04:26 | 显示全部楼层
赶紧去买一个,再晚点涨价了
回复

使用道具 举报

0

主题

34

回帖

34

积分

新手上路

积分
34
发表于 2022-8-18 15:12:56 | 显示全部楼层
牛,一定要上来顶下
回复

使用道具 举报

1

主题

92

回帖

100

积分

初级会员

积分
100
发表于 2022-8-18 16:02:55 | 显示全部楼层

回复

使用道具 举报

6

主题

130

回帖

148

积分

初级会员

积分
148
发表于 2022-8-18 19:28:44 | 显示全部楼层
这个牛逼
回复

使用道具 举报

12

主题

176

回帖

212

积分

高级会员

积分
212
发表于 2022-8-19 08:37:25 来自手机 | 显示全部楼层
牛!现在是监测,是不是可以黑掉目标程序?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 10:22:01 | 显示全部楼层
会飞的猪_2020 发表于 2022-8-18 13:30
硬汉哥本身就是一个牛X的一塌糊涂的人,连这么牛X的人,都用了如此夸张的形容词来形容这个功能。
这个功能 ...

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 10:27:19 | 显示全部楼层
gallop020142 发表于 2022-8-19 08:37
牛!现在是监测,是不是可以黑掉目标程序?

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

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

回复

使用道具 举报

3

主题

163

回帖

172

积分

初级会员

积分
172
发表于 2022-8-19 10:45:31 | 显示全部楼层
eric2013 发表于 2022-8-19 10:27
功能本身需要用户基于自己的RTOS工程,生成LUA小程序。

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

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 10:48:07 | 显示全部楼层
jowo_pBuGF 发表于 2022-8-19 10:45
那这样的话是不是也可以用于一些测试,比如给某个变量赋值,然后看程序运行情况。人为的去制造异常。

可以随意设置修改。
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2022-8-19 11:04:11 | 显示全部楼层
可以考虑支持更多的RTOS,操作过程尽可能简单易用。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 11:07:55 | 显示全部楼层
byccc 发表于 2022-8-19 11:04
可以考虑支持更多的RTOS,操作过程尽可能简单易用。

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

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2022-8-19 12:00:21 | 显示全部楼层
eric2013 发表于 2022-8-19 11:07
操作过程给出简单,不需要用户编程代码,我都写好了,仅需生成LUA小程序复制到TOOL运行即可



可以可以
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1

主题

369

回帖

372

积分

高级会员

积分
372
发表于 2022-8-19 14:04:10 | 显示全部楼层
不懂,至少也得在目标芯片上移植检测代码才行吧
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2022-8-19 14:21:41 | 显示全部楼层
挖东衣宇 发表于 2022-8-19 14:04
不懂,至少也得在目标芯片上移植检测代码才行吧

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

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
发表于 2022-8-19 14:41:46 | 显示全部楼层
硬汉哥,会支持RT-Thread吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 16:37:48 | 显示全部楼层
挖东衣宇 发表于 2022-8-19 14:04
不懂,至少也得在目标芯片上移植检测代码才行吧

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

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

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

对,就是这个意思。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 16:40:28 | 显示全部楼层
Dinor 发表于 2022-8-19 14:41
硬汉哥,会支持RT-Thread吗

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

大家可以不用熟悉。
回复

使用道具 举报

12

主题

141

回帖

177

积分

初级会员

积分
177
发表于 2022-8-19 20:22:47 | 显示全部楼层
eric2013 发表于 2022-8-19 16:40
可以支持,等我熟悉RTT了,也会做个对应的DEMO。这个玩法需要我熟悉下操作系统的源码。

大家可以不用 ...

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-19 21:10:38 | 显示全部楼层
gnail092 发表于 2022-8-19 20:22
硬汉兄,uCOS-III做了,uCOS-II也做下吧,项目中还在用uCOS-II

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

使用道具 举报

23

主题

1404

回帖

1473

积分

至尊会员

积分
1473
发表于 2022-8-20 11:13:14 | 显示全部楼层
eric2013 发表于 2022-8-19 21:10
发布的时候会有多款RTOS Trace支持上线。

牛逼卡拉斯,坐等月末发布
代码不规范,亲人两行泪!
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2022-8-20 14:35:50 | 显示全部楼层
可以开发个高级功能,卷出来每个任务的堆栈压栈调用,通过add2lin 可以解析出来。查看当前任务状态
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-20 15:21:27 | 显示全部楼层
在水一方 发表于 2022-8-20 14:35
可以开发个高级功能,卷出来每个任务的堆栈压栈调用,通过add2lin 可以解析出来。查看当前任务状态

所有任务的状态信息都可以读出来,已经支持了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-22 01:28:29 | 显示全部楼层
白天周报发布完毕后,开始继续完善,把其它RTOS的Trace实现了。
回复

使用道具 举报

23

主题

1404

回帖

1473

积分

至尊会员

积分
1473
发表于 2022-8-22 10:46:53 | 显示全部楼层
eric2013 发表于 2022-8-22 01:28
白天周报发布完毕后,开始继续完善,把其它RTOS的Trace实现了。

关注,期待早日发布。
代码不规范,亲人两行泪!
回复

使用道具 举报

0

主题

43

回帖

43

积分

新手上路

积分
43
发表于 2022-8-22 15:09:57 | 显示全部楼层
大佬,牛啤,这功能要赶上Trace
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2022-8-23 09:08:45 | 显示全部楼层
回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

积分
216
发表于 2022-8-24 09:18:02 | 显示全部楼层
能检测rtthreadx嘛硬汉哥
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-24 10:07:37 | 显示全部楼层
abcde1224 发表于 2022-8-24 09:18
能检测rtthreadx嘛硬汉哥

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

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

回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

积分
216
发表于 2022-8-24 10:38:40 | 显示全部楼层
eric2013 发表于 2022-8-24 10:07
第二版支持RTT,MbedOS和Zephyr,这三个的内核源码我还没有看过,实现这个功能得研究下源码。

当前先 ...

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-24 10:55:24 | 显示全部楼层
abcde1224 发表于 2022-8-24 10:38
可以扒一下tracealyzer检测部分的源码  都是注入到线程中  我一直想搞个类似于这样的塞rtt里面 今年项目 ...

我们不用这种方法,太麻烦。采用一种更好的思路,完全不需要目标板CPU参与。用户使用自己的程序生成LUA小程序(复制粘贴运行下就出来了)。
然后TOOL就可以通过SWD接口检索各种信息了。
回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

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

咦  这样的嘛  硬汉哥加油 期待你的力作
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-26 10:16:12 | 显示全部楼层
重新弄了几个接口函数,方便检索采集信息。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2022-8-28 02:20:32 | 显示全部楼层
image.png
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2022-8-31 11:21:07 | 显示全部楼层
RTOS lua 的例子更新了吗?  我在期待中
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 16:34 , Processed in 0.329843 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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