Update final demos that use the trace recorder code to use the new version.
This commit is contained in:
@ -0,0 +1,256 @@
|
|||||||
|
/*
|
||||||
|
FreeRTOS V8.0.0:rc1 - Copyright (C) 2014 Real Time Engineers Ltd.
|
||||||
|
All rights reserved
|
||||||
|
|
||||||
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* FreeRTOS provides completely free yet professionally developed, *
|
||||||
|
* robust, strictly quality controlled, supported, and cross *
|
||||||
|
* platform software that has become a de facto standard. *
|
||||||
|
* *
|
||||||
|
* Help yourself get started quickly and support the FreeRTOS *
|
||||||
|
* project by purchasing a FreeRTOS tutorial book, reference *
|
||||||
|
* manual, or both from: http://www.FreeRTOS.org/Documentation *
|
||||||
|
* *
|
||||||
|
* Thank you! *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
This file is part of the FreeRTOS distribution.
|
||||||
|
|
||||||
|
FreeRTOS is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License (version 2) as published by the
|
||||||
|
Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
|
||||||
|
|
||||||
|
>>! NOTE: The modification to the GPL is included to allow you to distribute
|
||||||
|
>>! a combined work that includes FreeRTOS without being obliged to provide
|
||||||
|
>>! the source code for proprietary components outside of the FreeRTOS
|
||||||
|
>>! kernel.
|
||||||
|
|
||||||
|
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. Full license text is available from the following
|
||||||
|
link: http://www.freertos.org/a00114.html
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
|
||||||
|
***************************************************************************
|
||||||
|
* *
|
||||||
|
* Having a problem? Start by reading the FAQ "My application does *
|
||||||
|
* not run, what could be wrong?" *
|
||||||
|
* *
|
||||||
|
* http://www.FreeRTOS.org/FAQHelp.html *
|
||||||
|
* *
|
||||||
|
***************************************************************************
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org - Documentation, books, training, latest versions,
|
||||||
|
license and Real Time Engineers Ltd. contact details.
|
||||||
|
|
||||||
|
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
|
||||||
|
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
|
||||||
|
compatible FAT file system, and our tiny thread aware UDP/IP stack.
|
||||||
|
|
||||||
|
http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
|
||||||
|
Integrity Systems to sell under the OpenRTOS brand. Low cost OpenRTOS
|
||||||
|
licenses offer ticketed support, indemnification and middleware.
|
||||||
|
|
||||||
|
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
|
||||||
|
engineered and independently SIL3 certified version for use in safety and
|
||||||
|
mission critical applications that require provable dependability.
|
||||||
|
|
||||||
|
1 tab == 4 spaces!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: This file uses a third party USB CDC driver.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard includes. */
|
||||||
|
#include "string.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
|
||||||
|
/* FreeRTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "task.h"
|
||||||
|
#include "semphr.h"
|
||||||
|
|
||||||
|
/* Example includes. */
|
||||||
|
#include "FreeRTOS_CLI.h"
|
||||||
|
|
||||||
|
/* Demo application includes. */
|
||||||
|
#include "serial.h"
|
||||||
|
|
||||||
|
/* Dimensions the buffer into which input characters are placed. */
|
||||||
|
#define cmdMAX_INPUT_SIZE 50
|
||||||
|
|
||||||
|
#define cmdQUEUE_LENGTH 25
|
||||||
|
|
||||||
|
/* DEL acts as a backspace. */
|
||||||
|
#define cmdASCII_DEL ( 0x7F )
|
||||||
|
|
||||||
|
#define cmdMAX_MUTEX_WAIT ( ( ( TickType_t ) 300 ) / ( portTICK_PERIOD_MS ) )
|
||||||
|
|
||||||
|
#ifndef configCLI_BAUD_RATE
|
||||||
|
#define configCLI_BAUD_RATE 115200
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The task that implements the command console processing.
|
||||||
|
*/
|
||||||
|
static void prvUARTCommandConsoleTask( void *pvParameters );
|
||||||
|
void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority );
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Const messages output by the command console. */
|
||||||
|
static const char * const pcWelcomeMessage = "FreeRTOS command server.\r\nType Help to view a list of registered commands.\r\n\r\n>";
|
||||||
|
static const char * const pcEndOfOutputMessage = "\r\n[Press ENTER to execute the previous command again]\r\n>";
|
||||||
|
static const char * const pcNewLine = "\r\n";
|
||||||
|
|
||||||
|
SemaphoreHandle_t xTxMutex = NULL;
|
||||||
|
static xComPortHandle xPort = 0;
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vUARTCommandConsoleStart( uint16_t usStackSize, UBaseType_t uxPriority )
|
||||||
|
{
|
||||||
|
/* Create the semaphore used to access the UART Tx. */
|
||||||
|
xTxMutex = xSemaphoreCreateMutex();
|
||||||
|
configASSERT( xTxMutex );
|
||||||
|
|
||||||
|
/* Create that task that handles the console itself. */
|
||||||
|
xTaskCreate( prvUARTCommandConsoleTask, /* The task that implements the command console. */
|
||||||
|
"CLI", /* Text name assigned to the task. This is just to assist debugging. The kernel does not use this name itself. */
|
||||||
|
usStackSize, /* The size of the stack allocated to the task. */
|
||||||
|
NULL, /* The parameter is not used, so NULL is passed. */
|
||||||
|
uxPriority, /* The priority allocated to the task. */
|
||||||
|
NULL ); /* A handle is not required, so just pass NULL. */
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
static void prvUARTCommandConsoleTask( void *pvParameters )
|
||||||
|
{
|
||||||
|
signed char cRxedChar;
|
||||||
|
uint8_t ucInputIndex = 0;
|
||||||
|
char *pcOutputString;
|
||||||
|
static char cInputString[ cmdMAX_INPUT_SIZE ], cLastInputString[ cmdMAX_INPUT_SIZE ];
|
||||||
|
portBASE_TYPE xReturned;
|
||||||
|
xComPortHandle xPort;
|
||||||
|
|
||||||
|
( void ) pvParameters;
|
||||||
|
|
||||||
|
/* Obtain the address of the output buffer. Note there is no mutual
|
||||||
|
exclusion on this buffer as it is assumed only one command console interface
|
||||||
|
will be used at any one time. */
|
||||||
|
pcOutputString = FreeRTOS_CLIGetOutputBuffer();
|
||||||
|
|
||||||
|
/* Initialise the UART. */
|
||||||
|
xPort = xSerialPortInitMinimal( configCLI_BAUD_RATE, cmdQUEUE_LENGTH );
|
||||||
|
|
||||||
|
/* Send the welcome message. */
|
||||||
|
vSerialPutString( xPort, ( signed char * ) pcWelcomeMessage, strlen( pcWelcomeMessage ) );
|
||||||
|
|
||||||
|
for( ;; )
|
||||||
|
{
|
||||||
|
/* Wait for the next character. The while loop is used in case
|
||||||
|
INCLUDE_vTaskSuspend is not set to 1 - in which case portMAX_DELAY will
|
||||||
|
be a genuine block time rather than an infinite block time. */
|
||||||
|
while( xSerialGetChar( xPort, &cRxedChar, portMAX_DELAY ) != pdPASS );
|
||||||
|
|
||||||
|
/* Ensure exclusive access to the UART Tx. */
|
||||||
|
if( xSemaphoreTake( xTxMutex, cmdMAX_MUTEX_WAIT ) == pdPASS )
|
||||||
|
{
|
||||||
|
/* Echo the character back. */
|
||||||
|
xSerialPutChar( xPort, cRxedChar, portMAX_DELAY );
|
||||||
|
|
||||||
|
/* Was it the end of the line? */
|
||||||
|
if( cRxedChar == '\n' || cRxedChar == '\r' )
|
||||||
|
{
|
||||||
|
/* Just to space the output from the input. */
|
||||||
|
vSerialPutString( xPort, ( signed char * ) pcNewLine, strlen( pcNewLine ) );
|
||||||
|
|
||||||
|
/* See if the command is empty, indicating that the last command
|
||||||
|
is to be executed again. */
|
||||||
|
if( ucInputIndex == 0 )
|
||||||
|
{
|
||||||
|
/* Copy the last command back into the input string. */
|
||||||
|
strcpy( cInputString, cLastInputString );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pass the received command to the command interpreter. The
|
||||||
|
command interpreter is called repeatedly until it returns
|
||||||
|
pdFALSE (indicating there is no more output) as it might
|
||||||
|
generate more than one string. */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/* Get the next output string from the command interpreter. */
|
||||||
|
xReturned = FreeRTOS_CLIProcessCommand( cInputString, pcOutputString, configCOMMAND_INT_MAX_OUTPUT_SIZE );
|
||||||
|
|
||||||
|
/* Write the generated string to the UART. */
|
||||||
|
vSerialPutString( xPort, ( signed char * ) pcOutputString, strlen( pcOutputString ) );
|
||||||
|
|
||||||
|
} while( xReturned != pdFALSE );
|
||||||
|
|
||||||
|
/* All the strings generated by the input command have been
|
||||||
|
sent. Clear the input string ready to receive the next command.
|
||||||
|
Remember the command that was just processed first in case it is
|
||||||
|
to be processed again. */
|
||||||
|
strcpy( cLastInputString, cInputString );
|
||||||
|
ucInputIndex = 0;
|
||||||
|
memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );
|
||||||
|
|
||||||
|
vSerialPutString( xPort, ( signed char * ) pcEndOfOutputMessage, strlen( pcEndOfOutputMessage ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( cRxedChar == '\r' )
|
||||||
|
{
|
||||||
|
/* Ignore the character. */
|
||||||
|
}
|
||||||
|
else if( ( cRxedChar == '\b' ) || ( cRxedChar == cmdASCII_DEL ) )
|
||||||
|
{
|
||||||
|
/* Backspace was pressed. Erase the last character in the
|
||||||
|
string - if any. */
|
||||||
|
if( ucInputIndex > 0 )
|
||||||
|
{
|
||||||
|
ucInputIndex--;
|
||||||
|
cInputString[ ucInputIndex ] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* A character was entered. Add it to the string entered so
|
||||||
|
far. When a \n is entered the complete string will be
|
||||||
|
passed to the command interpreter. */
|
||||||
|
if( ( cRxedChar >= ' ' ) && ( cRxedChar <= '~' ) )
|
||||||
|
{
|
||||||
|
if( ucInputIndex < cmdMAX_INPUT_SIZE )
|
||||||
|
{
|
||||||
|
cInputString[ ucInputIndex ] = cRxedChar;
|
||||||
|
ucInputIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Must ensure to give the mutex back. */
|
||||||
|
xSemaphoreGive( xTxMutex );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
void vOutputString( const char * const pcMessage )
|
||||||
|
{
|
||||||
|
if( xSemaphoreTake( xTxMutex, cmdMAX_MUTEX_WAIT ) == pdPASS )
|
||||||
|
{
|
||||||
|
vSerialPutString( xPort, ( signed char * ) pcMessage, strlen( pcMessage ) );
|
||||||
|
xSemaphoreGive( xTxMutex );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*-----------------------------------------------------------*/
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Tracealyzer v2.4.1 Recorder Library
|
* Tracealyzer v2.6.0 Recorder Library
|
||||||
* Percepio AB, www.percepio.com
|
* Percepio AB, www.percepio.com
|
||||||
*
|
*
|
||||||
* trcConfig.h
|
* trcConfig.h
|
||||||
@ -43,8 +43,6 @@
|
|||||||
#ifndef TRCCONFIG_H
|
#ifndef TRCCONFIG_H
|
||||||
#define TRCCONFIG_H
|
#define TRCCONFIG_H
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* CONFIGURATION RELATED TO CAPACITY AND ALLOCATION
|
* CONFIGURATION RELATED TO CAPACITY AND ALLOCATION
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -93,10 +91,16 @@
|
|||||||
* stores User Events labels and names of deleted tasks, queues, or other kernel
|
* stores User Events labels and names of deleted tasks, queues, or other kernel
|
||||||
* objects. Note that the names of active objects not stored here but in the
|
* objects. Note that the names of active objects not stored here but in the
|
||||||
* Object Table. Thus, if you don't use User Events or delete any kernel
|
* Object Table. Thus, if you don't use User Events or delete any kernel
|
||||||
* objects you set this to zero (0) to minimize RAM usage.
|
* objects you set this to a very low value, e.g. 4, but not zero (0) since
|
||||||
|
* this causes a declaration of a zero-sized array, for which the C compiler
|
||||||
|
* behavior is not standardized and may cause misaligned data.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define SYMBOL_TABLE_SIZE 1000
|
#define SYMBOL_TABLE_SIZE 1000
|
||||||
|
|
||||||
|
#if (SYMBOL_TABLE_SIZE == 0)
|
||||||
|
#error "SYMBOL_TABLE_SIZE may not be zero!"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* USE_SEPARATE_USER_EVENT_BUFFER
|
* USE_SEPARATE_USER_EVENT_BUFFER
|
||||||
*
|
*
|
||||||
@ -158,10 +162,9 @@
|
|||||||
* check the actual usage in Tracealyzer. This is shown by selecting
|
* check the actual usage in Tracealyzer. This is shown by selecting
|
||||||
* View -> Trace Details -> Resource Usage -> Object Table
|
* View -> Trace Details -> Resource Usage -> Object Table
|
||||||
*
|
*
|
||||||
* NOTE 2: Remember to account for all tasks created by the kernel, such as the
|
* NOTE 2: Remember to account for all tasks and other objects created by
|
||||||
* IDLE task, timer task, and any tasks created by other 3rd party
|
* the kernel, such as the IDLE task, any timer tasks, and any tasks created
|
||||||
* software components, such as communication stacks. The recorder also has an
|
* by other 3rd party software components, such as communication stacks.
|
||||||
* optional monitor task to account for, if this is used.
|
|
||||||
* Moreover, one task slot is used to indicate "(startup)", i.e., a fictive
|
* Moreover, one task slot is used to indicate "(startup)", i.e., a fictive
|
||||||
* task that represent the time before the scheduler starts.
|
* task that represent the time before the scheduler starts.
|
||||||
* NTask should thus be at least 2-3 slots larger than your application task count.
|
* NTask should thus be at least 2-3 slots larger than your application task count.
|
||||||
@ -172,6 +175,8 @@
|
|||||||
#define NQueue 15
|
#define NQueue 15
|
||||||
#define NSemaphore 15
|
#define NSemaphore 15
|
||||||
#define NMutex 15
|
#define NMutex 15
|
||||||
|
#define NTimer 15
|
||||||
|
#define NEventGroup 15
|
||||||
|
|
||||||
/* Maximum object name length for each class (includes zero termination) */
|
/* Maximum object name length for each class (includes zero termination) */
|
||||||
#define NameLenTask 15
|
#define NameLenTask 15
|
||||||
@ -179,6 +184,8 @@
|
|||||||
#define NameLenQueue 15
|
#define NameLenQueue 15
|
||||||
#define NameLenSemaphore 15
|
#define NameLenSemaphore 15
|
||||||
#define NameLenMutex 15
|
#define NameLenMutex 15
|
||||||
|
#define NameLenTimer 15
|
||||||
|
#define NameLenEventGroup 15
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* TRACE_DESCRIPTION
|
* TRACE_DESCRIPTION
|
||||||
@ -267,8 +274,7 @@
|
|||||||
* much faster than a printf and can therefore be used in timing critical code.
|
* much faster than a printf and can therefore be used in timing critical code.
|
||||||
* See vTraceUserEvent() and vTracePrintF() in trcUser.h
|
* See vTraceUserEvent() and vTracePrintF() in trcUser.h
|
||||||
*
|
*
|
||||||
* Note that Tracealyzer Standard Edition or Professional Edition is required
|
* Note that User Events are not displayed in FreeRTOS+Trace Free Edition.
|
||||||
* for User Events, they are not displayed in Tracealyzer Free Edition.
|
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define INCLUDE_USER_EVENTS 1
|
#define INCLUDE_USER_EVENTS 1
|
||||||
|
|
||||||
@ -320,7 +326,18 @@
|
|||||||
* traced kernel objects are deleted at runtime. If no deletes are made, this
|
* traced kernel objects are deleted at runtime. If no deletes are made, this
|
||||||
* can be set to 0 in order to exclude the delete-handling code.
|
* can be set to 0 in order to exclude the delete-handling code.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define INCLUDE_OBJECT_DELETE 0
|
#define INCLUDE_OBJECT_DELETE 1
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* INCLUDE_MEMMANG_EVENTS
|
||||||
|
*
|
||||||
|
* Macro which should be defined as either zero (0) or one (1).
|
||||||
|
* Default is 1.
|
||||||
|
*
|
||||||
|
* This controls if malloc and free calls should be traced. Set this to zero to
|
||||||
|
* exclude malloc/free calls from the tracing.
|
||||||
|
*****************************************************************************/
|
||||||
|
#define INCLUDE_MEMMANG_EVENTS 1
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* CONFIGURATION RELATED TO BEHAVIOR
|
* CONFIGURATION RELATED TO BEHAVIOR
|
||||||
@ -428,83 +445,86 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#define USE_IMPLICIT_IFE_RULES 1
|
#define USE_IMPLICIT_IFE_RULES 1
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* INCLUDE_SAVE_TO_FILE
|
* USE_16BIT_OBJECT_HANDLES
|
||||||
*
|
*
|
||||||
* Macro which should be defined as either zero (0) or one (1).
|
* Macro which should be defined as either zero (0) or one (1).
|
||||||
* Default is 0.
|
* Default is 0.
|
||||||
*
|
*
|
||||||
* If enabled (1), the recorder will include code for saving the trace
|
* If set to 0 (zero), the recorder uses 8-bit handles to identify kernel
|
||||||
* to a local file system.
|
* objects such as tasks and queues. This limits the supported number of
|
||||||
|
* concurrently active objects to 255 of each type (object class).
|
||||||
|
*
|
||||||
|
* If set to 1 (one), the recorder uses 16-bit handles to identify kernel
|
||||||
|
* objects such as tasks and queues. This limits the supported number of
|
||||||
|
* concurrent objects to 65535 of each type (object class). However, since the
|
||||||
|
* object property table is limited to 64 KB, the practical limit is about
|
||||||
|
* 3000 objects in total.
|
||||||
|
*
|
||||||
|
* NOTE: An object with a high ID (> 255) will generate an extra event
|
||||||
|
* (= 4 byte) in the event buffer.
|
||||||
|
*
|
||||||
|
* NOTE: Some internal tables in the recorder gets larger when using 16-bit
|
||||||
|
* handles. The additional RAM usage is 5-10 byte plus 1 byte per kernel object
|
||||||
|
*, i.e., task, queue, semaphore, mutex, etc.
|
||||||
|
*****************************************************************************/
|
||||||
|
#define USE_16BIT_OBJECT_HANDLES 0
|
||||||
|
|
||||||
|
/****** Port Name ******************** Code ** Official ** OS Platform ******
|
||||||
|
* PORT_APPLICATION_DEFINED -2 - -
|
||||||
|
* PORT_NOT_SET -1 - -
|
||||||
|
* PORT_HWIndependent 0 Yes Any
|
||||||
|
* PORT_Win32 1 Yes FreeRTOS Win32
|
||||||
|
* PORT_Atmel_AT91SAM7 2 No Any
|
||||||
|
* PORT_Atmel_UC3A0 3 No Any
|
||||||
|
* PORT_ARM_CortexM 4 Yes Any
|
||||||
|
* PORT_Renesas_RX600 5 Yes Any
|
||||||
|
* PORT_Microchip_dsPIC_AND_PIC24 6 Yes Any
|
||||||
|
* PORT_TEXAS_INSTRUMENTS_TMS570 7 No Any
|
||||||
|
* PORT_TEXAS_INSTRUMENTS_MSP430 8 No Any
|
||||||
|
* PORT_MICROCHIP_PIC32 9 No Any
|
||||||
|
* PORT_XILINX_PPC405 10 No FreeRTOS
|
||||||
|
* PORT_XILINX_PPC440 11 No FreeRTOS
|
||||||
|
* PORT_XILINX_MICROBLAZE 12 No Any
|
||||||
|
* PORT_NXP_LPC210X 13 No Any
|
||||||
|
*****************************************************************************/
|
||||||
|
#define SELECTED_PORT PORT_Win32
|
||||||
|
|
||||||
|
#if (SELECTED_PORT == PORT_NOT_SET)
|
||||||
|
#error "You need to define SELECTED_PORT here!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* USE_PRIMASK_CS (for Cortex M devices only)
|
||||||
|
*
|
||||||
|
* An integer constant that selects between two options for the critical
|
||||||
|
* sections of the recorder library.
|
||||||
|
*
|
||||||
|
* 0: The default FreeRTOS critical section (BASEPRI) - default setting
|
||||||
|
* 1: Always disable ALL interrupts (using PRIMASK)
|
||||||
|
*
|
||||||
|
* Option 0 uses the standard FreeRTOS macros for critical sections.
|
||||||
|
* However, on Cortex-M devices they only disable interrupts with priorities
|
||||||
|
* below a certain configurable level, while higher priority ISRs remain active.
|
||||||
|
* Such high-priority ISRs may not use the recorder functions in this mode.
|
||||||
|
*
|
||||||
|
* Option 1 allows you to safely call the recorder from any ISR, independent of
|
||||||
|
* the interrupt priority. This mode may however cause higher IRQ latencies
|
||||||
|
* (some microseconds) since ALL configurable interrupts are disabled during
|
||||||
|
* the recorder's critical sections in this mode, using the PRIMASK register.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#ifdef WIN32
|
#define USE_PRIMASK_CS 0
|
||||||
#define INCLUDE_SAVE_TO_FILE 1
|
|
||||||
#else
|
|
||||||
#define INCLUDE_SAVE_TO_FILE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* TRACE_PROGRESS_MONITOR_TASK_PRIORITY
|
* HEAP_SIZE_BELOW_16M
|
||||||
*
|
*
|
||||||
* Macro which sets the priority of the "recorder status monitor" task.
|
* An integer constant that can be used to reduce the buffer usage of memory
|
||||||
*
|
* allocation events (malloc/free). This value should be 1 if the heap size is
|
||||||
* This task, vTraceMonitorTask in trcUser.c, periodically writes
|
* below 16 MB (2^24 byte), and you can live with addresses truncated to the
|
||||||
* the recorder status using the vTraceConsoleMessage macro, which is to
|
* lower 24 bit. Otherwise set it to 0 to get the full 32-bit addresses.
|
||||||
* be mapped to your console "printf" routine. The task is named TraceMon but
|
******************************************************************************/
|
||||||
* is intentionally excluded from the demo trace.
|
#define HEAP_SIZE_BELOW_16M 0
|
||||||
*
|
|
||||||
* Default is tskIDLE_PRIORITY + 1
|
|
||||||
* Note that if your system constantly has a high CPU load from high-priority
|
|
||||||
* tasks, this might not be get a chance to execute.
|
|
||||||
*
|
|
||||||
* See vTraceMonitorTask in trcUser.c
|
|
||||||
*****************************************************************************/
|
|
||||||
#define TRACE_PROGRESS_MONITOR_TASK_PRIORITY (tskIDLE_PRIORITY + 1)
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TRACE_PROGRESS_MONITOR_TASK_STACKSIZE
|
|
||||||
*
|
|
||||||
* Macro which sets the stack size of the "recorder status monitor" task.
|
|
||||||
*
|
|
||||||
* This task, vTraceMonitorTask in trcUser.c, periodically writes
|
|
||||||
* the recorder status using the vTraceConsoleMessage macro, which is to
|
|
||||||
* be mapped to your console "printf" routine. The task is intentionally
|
|
||||||
* excluded from the demo trace.
|
|
||||||
*
|
|
||||||
* See vTraceMonitorTask in trcUser.c
|
|
||||||
*****************************************************************************/
|
|
||||||
#define TRACE_PROGRESS_MONITOR_TASK_STACKSIZE 500
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TRACE_PROGRESS_MONITOR_TASK_PERIOD
|
|
||||||
*
|
|
||||||
* Macro which sets the period of the "recorder status monitor" task.
|
|
||||||
*
|
|
||||||
* This task, vTraceMonitorTask in trcUser.c, periodically writes
|
|
||||||
* the recorder status using the vTraceConsoleMessage macro, which is to
|
|
||||||
* be mapped to your console "printf" routine. The task is named TraceMon but
|
|
||||||
* is intentionally excluded from the demo trace.
|
|
||||||
*
|
|
||||||
* Default is 1000 ticks (typically 1 second). On the Windows port, a lower
|
|
||||||
* value is suggested since the Windows port runs very slowly, often 20-40
|
|
||||||
* times slower than the simulated time.
|
|
||||||
*
|
|
||||||
* See vTraceMonitorTask in trcUser.c
|
|
||||||
*****************************************************************************/
|
|
||||||
#ifdef WIN32
|
|
||||||
#define TRACE_PROGRESS_MONITOR_TASK_PERIOD 100
|
|
||||||
#else
|
|
||||||
#define TRACE_PROGRESS_MONITOR_TASK_PERIOD 1000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* TEAM_LICENSE_CODE
|
|
||||||
*
|
|
||||||
* Macro which defines a string - the team license code.
|
|
||||||
* If no team license is available, this should be an empty string "".
|
|
||||||
* This should be maximum 32 chars, including zero-termination.
|
|
||||||
*****************************************************************************/
|
|
||||||
#define TEAM_LICENSE_CODE ""
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -519,8 +519,8 @@ RecorderDataPtr->ObjectPropertyTable.objbytes[uiIndexOfObject(handle, objectclas
|
|||||||
#define TRACE_CLEAR_EVENT_CODE_FLAG_ISEXCLUDED(eventCode) TRACE_CLEAR_FLAG_ISEXCLUDED(excludedEventCodes, eventCode)
|
#define TRACE_CLEAR_EVENT_CODE_FLAG_ISEXCLUDED(eventCode) TRACE_CLEAR_FLAG_ISEXCLUDED(excludedEventCodes, eventCode)
|
||||||
#define TRACE_GET_EVENT_CODE_FLAG_ISEXCLUDED(eventCode) TRACE_GET_FLAG_ISEXCLUDED(excludedEventCodes, eventCode)
|
#define TRACE_GET_EVENT_CODE_FLAG_ISEXCLUDED(eventCode) TRACE_GET_FLAG_ISEXCLUDED(excludedEventCodes, eventCode)
|
||||||
|
|
||||||
#define TRACE_UPDATE_HEAP_USAGE_POSITIVE(change) {if (RecorderDataPtr != NULL) RecorderDataPtr->heapMemUsage += change;}
|
#define TRACE_INCR_HEAP_USAGE(change) {if (RecorderDataPtr != NULL) RecorderDataPtr->heapMemUsage += change;}
|
||||||
#define TRACE_UPDATE_HEAP_USAGE_NEGATIVE(change) {if (RecorderDataPtr != NULL) RecorderDataPtr->heapMemUsage -= change;}
|
#define TRACE_DECR_HEAP_USAGE(change) {if (RecorderDataPtr != NULL) RecorderDataPtr->heapMemUsage -= change;}
|
||||||
|
|
||||||
/* DEBUG ASSERTS */
|
/* DEBUG ASSERTS */
|
||||||
#if defined USE_TRACE_ASSERT && USE_TRACE_ASSERT != 0
|
#if defined USE_TRACE_ASSERT && USE_TRACE_ASSERT != 0
|
||||||
|
@ -746,11 +746,11 @@ else \
|
|||||||
extern void vTraceStoreMemMangEvent(uint32_t ecode, uint32_t address, uint32_t size);
|
extern void vTraceStoreMemMangEvent(uint32_t ecode, uint32_t address, uint32_t size);
|
||||||
|
|
||||||
#undef traceMALLOC
|
#undef traceMALLOC
|
||||||
#define traceMALLOC( pvAddress, uiSize ) {vTraceStoreMemMangEvent(MEM_MALLOC_SIZE, ( uint32_t ) pvAddress, uiSize); TRACE_UPDATE_HEAP_USAGE_POSITIVE(uiSize);}
|
#define traceMALLOC( pvAddress, uiSize ) {vTraceStoreMemMangEvent(MEM_MALLOC_SIZE, ( uint32_t ) pvAddress, uiSize); TRACE_INCR_HEAP_USAGE(uiSize);}
|
||||||
|
|
||||||
|
|
||||||
#undef traceFREE
|
#undef traceFREE
|
||||||
#define traceFREE( pvAddress, uiSize ) {vTraceStoreMemMangEvent(MEM_FREE_SIZE, ( uint32_t ) pvAddress, uiSize); TRACE_UPDATE_HEAP_USAGE_NEGATIVE(uiSize);}
|
#define traceFREE( pvAddress, uiSize ) {vTraceStoreMemMangEvent(MEM_FREE_SIZE, ( uint32_t ) pvAddress, uiSize); TRACE_DECR_HEAP_USAGE(uiSize);}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user