Как показать время выполнения в списке задач FreeRTOS во время отладки - PullRequest
0 голосов
/ 21 июня 2019

Я работаю над проектом встраиваемого программного обеспечения (ARM Cortex-M7, микроконтроллер STM32F7) с System Workbench для STM32, который является IDE на основе Eclipse.Я установил «FreeRTOS Task Aware Debugger для GDB» из NXP Kinetis Design Studio (KDS) 1 .Я хочу видеть время выполнения каждой задачи, что должно быть возможно с FreeRTOS и этим плагином.К сожалению, в списке задач время выполнения не отображается.Вместо этого отображается следующее предупреждающее сообщение (см. Также скриншот):

Enable "configGENERATE_RUN_TIME_STATS" macro in FreeRTOSconfig.h to see "Runtime".

screenshot

Однако я уже включилуказанный макрос и другие необходимые макросы в FreeRTOSconfig.h:

#define configGENERATE_RUN_TIME_STATS            1

/* Definitions needed when configGENERATE_RUN_TIME_STATS is on */
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS configureTimerForRunTimeStats
#define portGET_RUN_TIME_COUNTER_VALUE getRunTimeCounterValue

Почему плагин упоминает, что этот макрос должен быть включен, когда он уже включен?Что я должен сделать, чтобы увидеть время выполнения в списке задач во время отладки?


1 Eclipse update-site: http://freescale.com/lgfiles/updates/Eclipse/KDS

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Согласно этой записи решение состоит в

#define portREMOVE_STATIC_QUALIFIER 1

Это имеет смысл, поскольку исходный код FreeRTOS (tasks.c) содержит следующий комментарий:

/*
 * Some kernel aware debuggers require the data the debugger needs access to be
 * global, rather than file scope.
 */
#ifdef portREMOVE_STATIC_QUALIFIER
    #define static
#endif

и в этом же файле соответствующие переменные действительно определены как статические:

#if ( configGENERATE_RUN_TIME_STATS == 1 )
    PRIVILEGED_DATA static uint32_t ulTaskSwitchedInTime = 0UL;
    PRIVILEGED_DATA static uint32_t ulTotalRunTime = 0UL;
#endif
1 голос
/ 21 июня 2019

Первое, что нужно сделать, это определить, есть ли проблема в плагине отладчика (я не уверен, какой это) или в сборке.Для этого поместите точку останова в xTaskIncrementTick () внутри tasks.c, затем просмотрите переменную pxCurrentTCB, которая является указателем на структуру TCB.Если статистика времени выполнения включена, то должен быть элемент структуры с именем ulRunTimeCounter.Это член структуры там?Если да, содержит ли оно значение?Даже если значение неверно, если оно есть, это может указывать на то, что проблема в подключаемом модуле отладчика.

...