Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » CERGEI » Tracealyzer for FreeRTOS подключение через jlink


Tracealyzer for FreeRTOS подключение через jlink

Сообщений 1 страница 5 из 5

1

Напишу небольшой мануал по подключению и тестированию Tracealyzer  для FreeRtos.
Начну с официальной документации по настройки и подключении document

Сам только недавно стал пользоваться и ощутил уже сразу как отловил пару багов своих.Также удобно отслеживать загрузку очередей и нагрузку процессора каждой задачей. Пользуюсь jlink v 9.4. Keil v 5.26.2.0 .

Создаем проект стандартно с FreeRtos , описание есть в топике. Качаем сами исходники трасера Ссылка

Далее по шагам :

1) Закидываем исходники Tracealyzer в проект свой отдельной папочкой
http://s3.uploads.ru/t/HPpmY.png

2) Подключаем все папки в ваш проект,кроме streamports . В streamports подключаем в папочке Jlink_RTT все файлы в ваш проект
http://s3.uploads.ru/t/0TX79.png

3) Идем в FreeRTOSConfig.h и подключаем трасер:

Код:
#define configUSE_TRACE_FACILITY 1
#if ( configUSE_TRACE_FACILITY == 1 )
#include "trcRecorder.h"
#endif


4) Подключаем определение регистров в trcConfig.h

Код:
#include "stm32f10x.h"


5) Настраиваем поток в trcConfig.h

a) порт на cortex_m 

Код:
#define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M

б) поток

Код:
#define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING

с) какая версия freertos

Код:
#define TRC_CFG_FREERTOS_VERSION TRC_FREERTOS_VERSION_10_0_0


6) Теперь до создания задач и т д мы прописываем команду

Код:
	vTraceEnable(TRC_START_AWAIT_HOST);

http://s7.uploads.ru/t/sJW2K.png

7) Для примера создал три задачи и в них отладочные сообщения с показанием сообщений, почитать документацию можно там и очередям дать названия
http://s3.uploads.ru/t/5cToU.png

Компиляции и если нет ошибок то прошивка,программа не запускается,а ждет команды трассера.

8) Идем в Tracealyzer  настраиваю jlink и какой проц
http://s9.uploads.ru/t/EiwvU.png

Запускаем Tracealyzer  идет запись в комп,останавливаем и начинаем изучать поток выполнения задач и прерываний.....
http://s5.uploads.ru/t/HaR6p.png

сам иходник с майн и задачами

Код:
#include "stm32f10x.h"


#include "FreeRTOS.h"
#include "task.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "queue.h"
#include "semphr.h"
#include "timers.h"

/*** descript RTOS ***/
TaskHandle_t xTask_task1_Handle,xTask_task2_Handle,xTask_task3_Handle;
TimerHandle_t xTimer;


void vTask_task1( void *pvParametrs);
void vTask_task2(void *pvParametrs);
void vTask_task3(void *pvParametrs);

//////////////////////////////////////////////////////////
// TIMER RTOS
void vAutoReloadTimerFunction(TimerHandle_t xTimer) {
	
	GPIOC->ODR ^= GPIO_ODR_ODR13;
}



//----------------------------------------------------------------------
int main(void)
{
  
  uint8_t error_timer;
	
	RCC->APB2ENR|=RCC_APB2ENR_IOPCEN;
	// miganie PC13
    GPIOC->CRH&=~GPIO_CRH_MODE13;
	  GPIOC->CRH|=GPIO_CRH_MODE13_1;   //  50 mgh
	  GPIOC->CRH|=GPIO_CRH_MODE13_0;
	  GPIOC->CRH&=~GPIO_CRH_CNF13; 
	
	vTraceEnable(TRC_START_AWAIT_HOST);
	
	
	// Task setup-------------------------------------------------------------
    xTaskCreate( vTask_task1, 
    ( const char * ) "Task_task1",
    configMINIMAL_STACK_SIZE,
    NULL, 
    3,
    &xTask_task1_Handle );
    
    xTaskCreate( vTask_task2, 
    ( const char * ) "Task_task2",
    configMINIMAL_STACK_SIZE,
    NULL, 
    1,
    &xTask_task2_Handle );
    
    xTaskCreate( vTask_task3, 
    ( const char * ) "Task_task3",
    configMINIMAL_STACK_SIZE,
    NULL, 
    2,
    &xTask_task3_Handle );
    
	
    	// Timer Rtos
	xTimer=xTimerCreate
                   ( /* Just a text name, not used by the RTOS
                     kernel. */
                     "Timer",
                     /* The timer period in ticks, must be
                     greater than 0. */
                     500/portTICK_PERIOD_MS,
                     /* The timers will auto-reload themselves
                     when they expire. */
                     pdTRUE,
                     /* The ID is used to store a count of the
                     number of times the timer has expired, which
                     is initialised to 0. */
                     ( void * ) 0,
                     /* Each timer calls the same callback when
                     it expires. */
                     vAutoReloadTimerFunction
                   );
    if( xTimer == NULL )
         {
             /* The timer was not created. */
        	   error_timer=1;
         }
         else
         {
             /* Start the timer.  No block time is specified, and
             even if one was it would be ignored because the RTOS
             scheduler has not yet been started. */
             if( xTimerStart( xTimer, 0 ) != pdPASS )
             {
                 /* The timer could not be set into the Active
                 state. */
            	   error_timer=0;
             }
         }
         
    vTaskStartScheduler();
         
    while (1)
    {
    }
}


// Task..............................


void vTask_task1(void *pvParameters )
{
	char t=0;
	
	for(;;)
	{
    t++;
    traceString task1 = xTraceRegisterString("task1");
    vTracePrintF(task1,	"t= %d", t);
    vTaskDelay(  10/portTICK_PERIOD_MS );
	}
	
}

void vTask_task2(void *pvParameters )
{
	char d=0;
	for(;;)
	{
    d++;
     traceString task2 = xTraceRegisterString("task2");
     vTracePrintF(task2,	"d= %d", d);
    vTaskDelay(  10/portTICK_PERIOD_MS );
	}
	
}

void vTask_task3(void *pvParameters )
{
	char c=0;
	for(;;)
	{
    c++;
    traceString task3 = xTraceRegisterString("task3");
     vTracePrintF(task3,	"c= %d", c);
    vTaskDelay(  10/portTICK_PERIOD_MS );
	}
	
}


Проект здесь мой Ссылка

Что нового буду обновлять топик.

2

Это что теоретически можно подцепить под свою ОС и прикинуться FreeRTOS? Я так понял в TraceRecorder модули для того чтобы Tracealyzer мог с ним работать?

3

Думаю вряд ли подцепить свою ось,вызовы специальные на каждой оси для сбора инфы отладки.
http://s5.uploads.ru/t/8CPmn.png

4

CERGEI написал(а):

Думаю вряд ли подцепить свою ось,вызовы специальные на каждой оси для сбора инфы отладки.

В бесплатном SEGGER System Viewer можно как с системой, так и без системы это сделать, достаточно в правильных местах расставить макросы от этого System Viewer'а.
Я так свой шедулер инструментировал, и теперь "вижу", какая задача когда в очередь шедулера попадает и когда непосредственно выполняется. А так же все/выборочные прерывания.
Есть также и платная версия, где неограниченное количество записываемых евентов, но пока что и безплатной хватает с ее 1 Млн евентов.

5

не осилил я ее,с freertos не смог запустить. Была уже тема отдельная.


Вы здесь » Микроконтроллеры » CERGEI » Tracealyzer for FreeRTOS подключение через jlink