怎么在freeRTOS中使用Trancealyer
本帖最后由 watershade 于 2019-4-2 14:20 编辑Trancealyer和systemView都是调试RTOS的好工具。后者免费版本其实功能够了,但是只支持J-Link.(好消息是官方提供了将普通的ST-Link转变成J-Link的工具。我之前描述过过程。)前者支持更多的调试方法。支持J-Link,ST-Link,UART,USB等。甚至支持文件系统。界面和功能也十分强大。可惜的是任何版本都要一个license.而且售价一万多,对于我们这些挣扎这的无房无产工人阶级,这太贵了。(补充一点ST-Link v2需要搞成J-Link才能烧写。)
官方资料很多,这里有两个有针对性的资料:
Tracealyzer on STM32
和Tracealyzer for FreeRTOS
其中后者更具体。此外还可以看这个链接的信息。
OK现在开始具体描述。
1、两种传输模式
尽管吐槽它贵,但是功能很多。如果这玩意一二十块钱,我会买的。因为这款软件考虑周全,支持两种传输模式。
A、Snapshot Mode快照模式
这种模式下trace data保存在目标RAM中。允许你对通过保存RAM中的内容,保存任何点的“快照”。这种模式优化了内存效率。产生的数据通常每秒10~20K。
通常几K的数据就满足对很多近期时间的追踪。可以将其作为黑盒作为整个系统的基础。可方便现场测试和部署。
(注意这种模式其实用处很大,如果你的系统又足够空间的化。这样你的系统就增加了诊断功能)
http://percepio.com/docs/FreeRTOS/images/FreeRTOS/system_overview_snapshot.png
B、Streaming Mode流模式
(这种模式是调试时最常用的模式。速度快了就变成流了。这点其实很好理解。如果你的速度很慢,比如你用串口传递一张张照片,这就不是流模式。如果你直接通过DMA将照片的信息直接写到屏幕,可以视作流模式。)
在流模式下trace data是连续不断的传送到主机上。因此可以传输很长的周期。柳陌实现通常一秒钟需要传输20-200KB的数据。前面说过接口的丰富性。原文这么说:
This supports streaming via SEGGER J-Link debug probes, but may also utilize other interfaces in your system, such as USB, TCP/IP, UARTs, or device file systems.
http://percepio.com/docs/FreeRTOS/images/FreeRTOS/system_overview_streaming_rtt.png
两种模式,都需要库文件配合。可以在安装之后的目录找到。这两种模式都在同一个库文件中。
两种模式篇幅太长,前者本次就不介绍了。等有时间的网友翻译分享一下。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2、流模式详细介绍
两种模式都需要运行在主机的程序配合。前者可以后期读取的方式。后者需要一直保持连接状态。
为了实现流模式,需要从以下步骤开始:
I->集成recorder库到你的工程中
Step 1: 在安装目录中找到配套版本的recorder library。目录是\FreeRTOS\TraceRecorder\
也可以从官网下载库(不够新)。
目前的版本支持FreeRTOS v7.3以来的版本,包括最新的Amazon FreeRTOS.
Step 2: 将工程文件整体拷贝到工程中。我喜欢放在Middlewares\Third_Party\下。
和FreeRTOS同处在一个文件夹。下面两图是以keil为例:
其它的工具,或使用不同的端口。适当配置不同目录就可以了。机器就是包含根目录下的源文件和头文件以及要使用传输端口对应的头文件和源文件。这不难理解。
step 3: 配置文件以支持FreeRTOS和对应端口 > 修改TRC_CFG_HARDWARE_PORT and TRC_CFG_FREERTOS_VERSION @trcConfig.h以保证正确的软硬件版本。
对于M0的内核,默认使用SysTick。因为用不了DWT。而对于M3,M4,M7内核的优先使用DWT,也可使用SysTick。可以在trcConfig.h中通过设置以下选项来正确开启:
/****** Port Name ************************************* Code ** Official ** OS Platform *********/
#define TRC_HARDWARE_PORT_APPLICATION_DEFINED 98 /* - - */
#define TRC_HARDWARE_PORT_NOT_SET 99 /* - - */
#define TRC_HARDWARE_PORT_HWIndependent 0 /* Yes Any */
#define TRC_HARDWARE_PORT_Win32 1 /* Yes FreeRTOS on Win32 */
#define TRC_HARDWARE_PORT_Atmel_AT91SAM7 2 /* No Any */
#define TRC_HARDWARE_PORT_Atmel_UC3A0 3 /* No Any */
#define TRC_HARDWARE_PORT_ARM_Cortex_M 4 /* Yes Any */
#define TRC_HARDWARE_PORT_Renesas_RX600 6 /* Yes Any */
#define TRC_HARDWARE_PORT_MICROCHIP_PIC24_PIC32 7 /* Yes Any */
#define TRC_HARDWARE_PORT_TEXAS_INSTRUMENTS_TMS570_RM48 8 /* Yes Any */
#define TRC_HARDWARE_PORT_TEXAS_INSTRUMENTS_MSP430 9 /* No Any */
#define TRC_HARDWARE_PORT_XILINX_PPC405 11 /* No FreeRTOS */
#define TRC_HARDWARE_PORT_XILINX_PPC440 12 /* No FreeRTOS */
#define TRC_HARDWARE_PORT_XILINX_MICROBLAZE 13 /* No Any */
#define TRC_HARDWARE_PORT_NXP_LPC210X 14 /* No Any */
#define TRC_HARDWARE_PORT_ARM_CORTEX_A9 15 /* Yes Any */
#define TRC_HARDWARE_PORT_POWERPC_Z4 16/*No FreeRTOS */
#define TRC_HARDWARE_PORT_Altera_NiosII 17/*No Any */
#endif /*TRC_PORTDEFINES_H*/ >接着需要设置TRC_CFG_RECORDER_MODE来使能recorder的不同模式。即上面提到的模式:TRC_RECORDER_MODE_SNAPSHOT
或TRC_RECORDER_MODE_STREAMING
>而FreeRTOS的版本(TRC_CFG_FREERTOS_VERSION),可以查看task.c等文件开始的描述来确定版本。目前不同的设备最新的HAL库支持 的FreeRTOS不同有9.0.0的也有10.0 以上的。
* TRC_FREERTOS_VERSION_7_3 If using FreeRTOS v7.3.x
* TRC_FREERTOS_VERSION_7_4 If using FreeRTOS v7.4.x
* TRC_FREERTOS_VERSION_7_5_OR_7_6 If using FreeRTOS v7.5.0 - v7.6.0
* TRC_FREERTOS_VERSION_8_X If using FreeRTOS v8.X.X
* TRC_FREERTOS_VERSION_9_0_0 If using FreeRTOS v9.0.0
* TRC_FREERTOS_VERSION_9_0_1 If using FreeRTOS v9.0.1
* TRC_FREERTOS_VERSION_9_0_2 If using FreeRTOS v9.0.2
* TRC_FREERTOS_VERSION_10_0_0 If using FreeRTOS v10.0.0 or later 其余还有多个宏定义。可被用来控制对不同事件的记录,其中包含ISR,userevent,Timer等。详细看trcConfig.h的注释部分。非常详细,
建议精读。有很多减少RAM使用的例子。
> 在FreeRTOSConfig.h中包含“trcRecorder.h”头文件 。在FreeRTOSConfig.h末尾添加如下代码即可:
/*If want to open tracealyzer. Set it to 1*/
#define configUSE_TRACE_FACILITY 1
/* Integrates the Tracealyzer recorder with FreeRTOS */
#if ( configUSE_TRACE_FACILITY == 1 )
#include "trcRecorder.h"
#endif > 在main函数开始freeRTOS之前调用 vTraceEnable(TRC_START)函数。(尽量在trcConfig.h中包含“stm32f#xx.h”)要采集ISR还需要其它 指令。详细的话看上面提供的英文链接。
> 如果有精力,你甚至可以参考别的接口通讯设计来使用自己的端口通讯。
II->配置流模式
III->调用vTraceEnable
IV->设置软件,检测端口硬件,开始recoder
一些其它link:
st-link-rtos-trace-streaming
tracealyzer-support-stlink-v3
上一张自己测试的图片
页:
[1]