TraceAlyzer в Atollic TrueStudio

Пришлось сделать шпаргалку , так как процесс включения кода TraceAlyzer в проект Atollic True Studio нельзя назвать совсем простым , лучше записать на будущее и не наступать на одни и те же грабли.

Для начала надо добиться , что TaskList самого FreeRTOS нормально работал. Смотрим в соседней ветке сайта.

Особенность TraceAlyzer в том , что он добавляет свой поток в программу.

TzCtrl - поток , который добавляет сам Tracealyzer (это его поток).

В двух словах суть в том , что TraceAlyzer довключает свои макросы трассировки в макросы трассировки самого FreeRTOS.

Tracealyzer здесь:

C:\Program Files\Percepio\Tracealyzer 4

Тут папка и исходниками , которую надо добавить в ваш проект:
C:\Program Files\Percepio\Tracealyzer 4\FreeRTOS\TraceRecorder

Берем исходники TraceAlyzer из папки C:\Program Files\Percepio\Tracealyzer 4\FreeRTOS\TraceRecorder.

Эту папку (целиком) добавляем в проект TrueStudio в ветку src .

Потом добавляем 2 пути к *.h файлам TraceAlyzer в свойства проекта. Удобнее встать на ветку проекта include к примеру и далее правой кнопкой мыши , там есть Add/Remove Include Path.

фотка 1

Можно еще так прописать пути для хедеров:

../TraceRecorder/config
../TraceRecorder/streamports/ARM_ITM/include
../TraceRecorder/include

Потом компилируем и исправляем ошибки :

Поскольку у нас контроллер STM32F407VE нам надо изменить :

#define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M

в конец файла FreeRTOSConfig.h надо добавить :

/* USER CODE BEGIN Defines */   	      
/* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */
/* Integrates the Tracealyzer recorder with FreeRTOS */
#if ( configUSE_TRACE_FACILITY == 1 )
	#include "trcRecorder.h";
#endif
/* USER CODE END Defines */

закоментировать строку (она специально для напоминания , чтобы ее закоментировать)
// #error "Trace Recorder: Please include your processor's header file here and remove this line."

В ветке streamports перечислены варианты (способы) трассировки, но все они не нужны. Надо оставить только подходящий для вас.
Поскольку у нас не компилится ветка TCPIP_Win32 просто удаляем ее и все. ( TCPIP_Win32 скорее всего для 32 разрядной ОС).

фотка 2

Также поступаем с Jlink_RTT (это скорее всего для Embedded Studio).

#include "stm32f4xx_hal.h"

Добавляем в начале файла trcConfig.h .

#include "stm32f4xx_hal.h"

При пересборки проекта не забываем F5 Refresh, Clean Project, Rebuild ...

Остается еще ошибка multiple definition of `SysTick_Handler':

multiple definition of `SysTick_Handler' port.c /FreeRTOS_TraceOn_2task_empty/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F line 489 C/C++ Problem
фотка 3

закоментируем #define xPortSysTickHandler SysTick_Handler

/* IMPORTANT: This define is commented when used with STM32Cube firmware, when the timebase source is SysTick,
              to prevent overwriting SysTick_Handler defined within STM32Cube HAL */
//#define xPortSysTickHandler SysTick_Handler

IMPORTANT это не импотент, а ВАЖНО!

Ошибки ушли! Но только для варианта TRC_RECORDER_MODE_SNAPSHOT.

TRC_RECORDER_MODE_SNAPSHOT работает нормально.

#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING

Вариант TRC_RECORDER_MODE_STREAMING выдает ошибки .

Тут пришлось поудалять ветки USB_CDC (как я понял она для задействования USB контроллера как VCOM для ПК)

пришлось удалить TCPIP , AFR_WIFI_LOCAL , File.

В результате остался только ARM_ITM.

При ARM_ITM контроллер вали в SWO буфер много непонятных иероглифов и буфер быстро переполняется....