Пришлось сделать шпаргалку , так как процесс включения кода 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.
Можно еще так прописать пути для хедеров:
../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 разрядной ОС).
Также поступаем с 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
закоментируем #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 буфер много непонятных иероглифов и буфер быстро переполняется....