|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* FreeRTOS+Trace v2.2.2 Recorder Library
|
|
|
|
|
* Percepio AB, www.percepio.se
|
|
|
|
|
* Tracealyzer v2.4.1 Recorder Library
|
|
|
|
|
* Percepio AB, www.percepio.com
|
|
|
|
|
*
|
|
|
|
|
* trcConfig.h
|
|
|
|
|
*
|
|
|
|
@ -9,12 +9,12 @@
|
|
|
|
|
* appropriate for your system, and if necessary adjust these. Most likely, you
|
|
|
|
|
* will need to adjust the NTask, NISR, NQueue, NMutex and NSemaphore values to
|
|
|
|
|
* reflect the number of such objects in your system. These may be
|
|
|
|
|
* overapproximated, although larger values values implies more RAM usage.
|
|
|
|
|
* over-approximated, although larger values values implies more RAM usage.
|
|
|
|
|
*
|
|
|
|
|
* Terms of Use
|
|
|
|
|
* This software is copyright Percepio AB. The recorder library is free for
|
|
|
|
|
* use together with Percepio products. You may distribute the recorder library
|
|
|
|
|
* in its original form, including modifications in trcPort.c and trcPort.h
|
|
|
|
|
* in its original form, including modifications in trcHardwarePort.c/.h
|
|
|
|
|
* given that these modification are clearly marked as your own modifications
|
|
|
|
|
* and documented in the initial comment section of these source files.
|
|
|
|
|
* This software is the intellectual property of Percepio AB and may not be
|
|
|
|
@ -36,17 +36,15 @@
|
|
|
|
|
* damages, or the exclusion of implied warranties or limitations on how long an
|
|
|
|
|
* implied warranty may last, so the above limitations may not apply to you.
|
|
|
|
|
*
|
|
|
|
|
* FreeRTOS+Trace is available as Free Edition and in two premium editions.
|
|
|
|
|
* You may use the premium features during 30 days for evaluation.
|
|
|
|
|
* Download FreeRTOS+Trace at http://www.percepio.se/index.php?page=downloads
|
|
|
|
|
*
|
|
|
|
|
* Copyright Percepio AB, 2012.
|
|
|
|
|
* www.percepio.se
|
|
|
|
|
* Copyright Percepio AB, 2013.
|
|
|
|
|
* www.percepio.com
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
|
|
#ifndef TRCCONFIG_H
|
|
|
|
|
#define TRCCONFIG_H
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* CONFIGURATION RELATED TO CAPACITY AND ALLOCATION
|
|
|
|
|
******************************************************************************/
|
|
|
|
@ -61,11 +59,30 @@
|
|
|
|
|
* vTracePrintF may use multiple records depending on the number of data args.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
|
|
#if WIN32
|
|
|
|
|
#define EVENT_BUFFER_SIZE 3000
|
|
|
|
|
#else
|
|
|
|
|
#define EVENT_BUFFER_SIZE 1000 /* Adjust wrt. to available RAM */
|
|
|
|
|
#endif
|
|
|
|
|
#define EVENT_BUFFER_SIZE 100000 /* Adjust wrt. to available RAM */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* USE_LINKER_PRAGMA
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as an integer value, default is 0.
|
|
|
|
|
*
|
|
|
|
|
* If this is 1, the header file "recorderdata_linker_pragma.h" is included just
|
|
|
|
|
* before the declaration of RecorderData (in trcBase.c), i.e., the trace data
|
|
|
|
|
* structure. This allows the user to specify a pragma with linker options.
|
|
|
|
|
*
|
|
|
|
|
* Example (for IAR Embedded Workbench and NXP LPC17xx):
|
|
|
|
|
* #pragma location="AHB_RAM_MEMORY"
|
|
|
|
|
*
|
|
|
|
|
* This example instructs the IAR linker to place RecorderData in another RAM
|
|
|
|
|
* bank, the AHB RAM. This can also be used for other compilers with a similar
|
|
|
|
|
* pragmas for linker options.
|
|
|
|
|
*
|
|
|
|
|
* Note that this only applies if using static allocation, see below.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
|
|
#define USE_LINKER_PRAGMA 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* SYMBOL_TABLE_SIZE
|
|
|
|
@ -78,7 +95,44 @@
|
|
|
|
|
* 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.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
#define SYMBOL_TABLE_SIZE 1000
|
|
|
|
|
#define SYMBOL_TABLE_SIZE 5000
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* USE_SEPARATE_USER_EVENT_BUFFER
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as an integer value.
|
|
|
|
|
* Default is zero (0).
|
|
|
|
|
*
|
|
|
|
|
* This enables and disables the use of the separate user event buffer.
|
|
|
|
|
*
|
|
|
|
|
* Note: When using the separate user event buffer, you may get an artificial
|
|
|
|
|
* task instance named "Unknown actor". This is added as a placeholder when the
|
|
|
|
|
* user event history is longer than the task scheduling history.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
#define USE_SEPARATE_USER_EVENT_BUFFER 0
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* USER_EVENT_BUFFER_SIZE
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as an integer value.
|
|
|
|
|
*
|
|
|
|
|
* This defines the capacity of the user event buffer, in number of slots.
|
|
|
|
|
* A single user event can use between 1 and X slots, depending on the data.
|
|
|
|
|
*
|
|
|
|
|
* Only in use if USE_SEPARATE_USER_EVENT_BUFFER is set to 1.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
#define USER_EVENT_BUFFER_SIZE 500
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* USER_EVENT_CHANNELS
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as an integer value.
|
|
|
|
|
*
|
|
|
|
|
* This defines the number of allowed user event channels.
|
|
|
|
|
*
|
|
|
|
|
* Only in use if USE_SEPARATE_USER_EVENT_BUFFER is set to 1.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
#define CHANNEL_FORMAT_PAIRS 32
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* NTask, NISR, NQueue, NSemaphore, NMutex
|
|
|
|
@ -95,32 +149,33 @@
|
|
|
|
|
*
|
|
|
|
|
* Using too small values will give an error message through the vTraceError
|
|
|
|
|
* routine, which makes the error message appear when opening the trace data
|
|
|
|
|
* in FreeRTOS+Trace. If you are using the recorder status monitor task,
|
|
|
|
|
* in Tracealyzer. If you are using the recorder status monitor task,
|
|
|
|
|
* any error messages are displayed in console prints, assuming that the
|
|
|
|
|
* print macro has been defined properly (vConsolePrintMessage).
|
|
|
|
|
* print macro has been defined properly (vConsolePrintMessage).
|
|
|
|
|
*
|
|
|
|
|
* It can be wise to start with very large values for these constants,
|
|
|
|
|
* unless you are very confident on these numbers. Then do a recording and
|
|
|
|
|
* check the actual usage in Tracealyzer. This is shown by selecting
|
|
|
|
|
* View -> Trace Details -> Resource Usage -> Object Table
|
|
|
|
|
*
|
|
|
|
|
* NOTE 2: If you include the monitor task (USE_TRACE_PROGRESS_MONITOR_TASK)
|
|
|
|
|
* make sure to dimension NTask with this task accounted for.
|
|
|
|
|
*
|
|
|
|
|
* Also remember to account for all tasks created by FreeRTOS, such as the
|
|
|
|
|
* IDLE task, the FreeRTOS timer task, and any tasks created by other 3rd party
|
|
|
|
|
* software components, such as communication stacks.
|
|
|
|
|
* Moreover, one task slot is used to indicate "(startup)", i.e., a "task" that
|
|
|
|
|
* represent the time before the first task starts. NTask should thus be at
|
|
|
|
|
* least 2-3 slots larger than your application task count.
|
|
|
|
|
*
|
|
|
|
|
* NOTE 3: The FreeRTOS timer task creates a Queue, that should be accounted
|
|
|
|
|
* for in NQueue.
|
|
|
|
|
* NOTE 2: Remember to account for all tasks created by the kernel, such as the
|
|
|
|
|
* IDLE task, timer task, and any tasks created by other 3rd party
|
|
|
|
|
* software components, such as communication stacks. The recorder also has an
|
|
|
|
|
* optional monitor task to account for, if this is used.
|
|
|
|
|
* Moreover, one task slot is used to indicate "(startup)", i.e., a fictive
|
|
|
|
|
* task that represent the time before the scheduler starts.
|
|
|
|
|
* NTask should thus be at least 2-3 slots larger than your application task count.
|
|
|
|
|
*
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
#define NTask ( 200 )
|
|
|
|
|
#define NISR ( 200 )
|
|
|
|
|
#define NQueue ( 200 )
|
|
|
|
|
#define NSemaphore ( 200 )
|
|
|
|
|
#define NMutex ( 200 )
|
|
|
|
|
#define NTask 100
|
|
|
|
|
#define NISR 20
|
|
|
|
|
#define NQueue 60
|
|
|
|
|
#define NSemaphore 60
|
|
|
|
|
#define NMutex 60
|
|
|
|
|
|
|
|
|
|
/* Maximum object name length for each class (includes zero termination) */
|
|
|
|
|
#define NameLenTask configMAX_TASK_NAME_LEN
|
|
|
|
|
#define NameLenISR 10
|
|
|
|
|
#define NameLenTask 15
|
|
|
|
|
#define NameLenISR 15
|
|
|
|
|
#define NameLenQueue 15
|
|
|
|
|
#define NameLenSemaphore 15
|
|
|
|
|
#define NameLenMutex 15
|
|
|
|
@ -130,12 +185,12 @@
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as a string.
|
|
|
|
|
*
|
|
|
|
|
* This string is stored in the trace and displayed in FreeRTOS+Trace. Can be
|
|
|
|
|
* This string is stored in the trace and displayed in Tracealyzer. Can be
|
|
|
|
|
* used to store, e.g., system version or build date. This is also used to store
|
|
|
|
|
* internal error messages from the recorder, which if occurs overwrites the
|
|
|
|
|
* value defined here. This may be maximum 256 chars.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define TRACE_DESCRIPTION "FreeRTOS+Trace Demo"
|
|
|
|
|
#define TRACE_DESCRIPTION "Tracealyzer Recorder Test Program"
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* TRACE_DESCRIPTION_MAX_LENGTH
|
|
|
|
@ -173,6 +228,33 @@
|
|
|
|
|
* CONFIGURATION REGARDING WHAT CODE/FEATURES TO INCLUDE
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* USE_TRACE_ASSERT
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as either zero (0) or one (1).
|
|
|
|
|
* Default is 0.
|
|
|
|
|
*
|
|
|
|
|
* If this is one (1), the TRACE_ASSERT macro will verify that a condition is
|
|
|
|
|
* true. If the condition is false, vTraceError() will be called.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define USE_TRACE_ASSERT 1
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* INCLUDE_FLOAT_SUPPORT
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as either zero (0) or one (1).
|
|
|
|
|
* Default is 1.
|
|
|
|
|
*
|
|
|
|
|
* If this is zero (0), all references to floating point values are removed,
|
|
|
|
|
* in case floating point values are not supported by the platform used.
|
|
|
|
|
* Floating point values are only used in vTracePrintF and its subroutines, to
|
|
|
|
|
* store float (%f) or double (%lf) argments.
|
|
|
|
|
*
|
|
|
|
|
* Note: vTracePrintF can still be used with integer and string arguments in
|
|
|
|
|
* either case.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define INCLUDE_FLOAT_SUPPORT 0
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* INCLUDE_USER_EVENTS
|
|
|
|
|
*
|
|
|
|
@ -185,11 +267,34 @@
|
|
|
|
|
* much faster than a printf and can therefore be used in timing critical code.
|
|
|
|
|
* See vTraceUserEvent() and vTracePrintF() in trcUser.h
|
|
|
|
|
*
|
|
|
|
|
* Note that FreeRTOS+Trace Standard Edition or Professional Edition is required
|
|
|
|
|
* for User Events, they are not displayed in FreeRTOS+Trace Free Edition.
|
|
|
|
|
* Note that Tracealyzer Standard Edition or Professional Edition is required
|
|
|
|
|
* for User Events, they are not displayed in Tracealyzer Free Edition.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define INCLUDE_USER_EVENTS 1
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* INCLUDE_READY_EVENTS
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as either zero (0) or one (1).
|
|
|
|
|
* Default is 1.
|
|
|
|
|
*
|
|
|
|
|
* If this is zero (0), the code for recording Ready events is
|
|
|
|
|
* excluded. Note, this will make it impossible to calculate the correct
|
|
|
|
|
* response times.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define INCLUDE_READY_EVENTS 1
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* INCLUDE_NEW_TIME_EVENTS
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as either zero (0) or one (1).
|
|
|
|
|
* Default is 0.
|
|
|
|
|
*
|
|
|
|
|
* If this is zero (1), events will be generated whenever the os clock is
|
|
|
|
|
* increased.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define INCLUDE_NEW_TIME_EVENTS 0
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************
|
|
|
|
|
* INCLUDE_ISR_TRACING
|
|
|
|
|
*
|
|
|
|
@ -197,10 +302,11 @@
|
|
|
|
|
* Default is 1.
|
|
|
|
|
*
|
|
|
|
|
* If this is zero (0), the code for recording Interrupt Service Routines is
|
|
|
|
|
* excluded to reduce code size. Note, recording ISRs require that you insert
|
|
|
|
|
* calls to vTraceStoreISRBegin and vTraceStoreISREnd in your interrupt handlers.
|
|
|
|
|
* There is no automatic recording of ISRs like for task scheduling, since
|
|
|
|
|
* FreeRTOS does not have a central interrupt dispatcher.
|
|
|
|
|
* excluded to reduce code size.
|
|
|
|
|
*
|
|
|
|
|
* Note, if the kernel has no central interrupt dispatcher, recording ISRs
|
|
|
|
|
* require that you insert calls to vTraceStoreISRBegin and vTraceStoreISREnd
|
|
|
|
|
* in your interrupt handlers.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define INCLUDE_ISR_TRACING 1
|
|
|
|
|
|
|
|
|
@ -211,43 +317,42 @@
|
|
|
|
|
* Default is 1.
|
|
|
|
|
*
|
|
|
|
|
* This must be enabled (1) if tasks, queues or other
|
|
|
|
|
* traced kernel objects are deleted at runtime, e.g., using vTaskDelete or
|
|
|
|
|
* vQueueDelete. If no deletes are made, this can be set to 0 in order to
|
|
|
|
|
* exclude the delete-handling code.
|
|
|
|
|
* 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.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define INCLUDE_OBJECT_DELETE 1
|
|
|
|
|
#define INCLUDE_OBJECT_DELETE 0
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* CONFIGURATION RELATED TO BEHAVIOR
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* RECORDER_STORE_MODE
|
|
|
|
|
* TRACE_RECORDER_STORE_MODE
|
|
|
|
|
*
|
|
|
|
|
* Macro which should be defined as one of:
|
|
|
|
|
* - STORE_MODE_RING_BUFFER
|
|
|
|
|
* - STORE_MODE_STOP_WHEN_FULL
|
|
|
|
|
* Default is STORE_MODE_RING_BUFFER.
|
|
|
|
|
*
|
|
|
|
|
* With RECORDER_STORE_MODE set to STORE_MODE_RING_BUFFER, the events are stored
|
|
|
|
|
* in a ring buffer, i.e., where the oldest events are overwritten when the
|
|
|
|
|
* buffer becomes full. This allows you to get the last events leading up to an
|
|
|
|
|
* interesting state, e.g., an error, without having a large trace buffer for
|
|
|
|
|
* string the whole run since startup. In this mode, the recorder can run
|
|
|
|
|
* - TRACE_STORE_MODE_RING_BUFFER
|
|
|
|
|
* - TRACE_STORE_MODE_STOP_WHEN_FULL
|
|
|
|
|
* Default is TRACE_STORE_MODE_RING_BUFFER.
|
|
|
|
|
*
|
|
|
|
|
* With TRACE_RECORDER_STORE_MODE set to TRACE_STORE_MODE_RING_BUFFER, the events are
|
|
|
|
|
* stored in a ring buffer, i.e., where the oldest events are overwritten when
|
|
|
|
|
* the buffer becomes full. This allows you to get the last events leading up
|
|
|
|
|
* to an interesting state, e.g., an error, without having a large trace buffer
|
|
|
|
|
* for string the whole run since startup. In this mode, the recorder can run
|
|
|
|
|
* "forever" as the buffer never gets full, i.e., in the sense that it always
|
|
|
|
|
* has room for more events.
|
|
|
|
|
*
|
|
|
|
|
* To fetch the trace in mode STORE_MODE_RING_BUFFER, you need to first halt the
|
|
|
|
|
* To fetch the trace in mode TRACE_STORE_MODE_RING_BUFFER, you need to first halt the
|
|
|
|
|
* system using your debugger and then do a RAM dump, or to explicitly stop the
|
|
|
|
|
* recorder using vTraceStop() and then store/upload the trace data using a
|
|
|
|
|
* FreeRTOS task that you need to provide yourself. The trace data is found in
|
|
|
|
|
* the struct RecorderData, initialized in trcBase.c.
|
|
|
|
|
* task that you need to provide yourself. The trace data is found in the struct
|
|
|
|
|
* RecorderData, initialized in trcBase.c.
|
|
|
|
|
*
|
|
|
|
|
* Note that, if you upload the trace using a RAM dump, i.e., when the system is
|
|
|
|
|
* halted on a breakpoint or by a debugger command, there is no need to stop the
|
|
|
|
|
* recorder first.
|
|
|
|
|
*
|
|
|
|
|
* When RECORDER_STORE_MODE is STORE_MODE_STOP_WHEN_FULL, the recording is
|
|
|
|
|
* When TRACE_RECORDER_STORE_MODE is TRACE_STORE_MODE_STOP_WHEN_FULL, the recording is
|
|
|
|
|
* stopped when the buffer becomes full. When the recorder stops itself this way
|
|
|
|
|
* vTracePortEnd() is called which allows for custom actions, such as triggering
|
|
|
|
|
* a task that stores the trace buffer, i.e., in case taking a RAM dump
|
|
|
|
@ -255,8 +360,8 @@
|
|
|
|
|
* saves the trace to file directly, but this is not recommended in a real-time
|
|
|
|
|
* system since the scheduler is blocked during the processing of vTracePortEnd.
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define RECORDER_STORE_MODE STORE_MODE_RING_BUFFER
|
|
|
|
|
/*#define RECORDER_STORE_MODE STORE_MODE_STOP_WHEN_FULL*/
|
|
|
|
|
|
|
|
|
|
#define TRACE_RECORDER_STORE_MODE TRACE_STORE_MODE_RING_BUFFER
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* STOP_AFTER_N_EVENTS
|
|
|
|
@ -283,27 +388,21 @@
|
|
|
|
|
*
|
|
|
|
|
* For tasks with "infinite" main loops (non-terminating tasks), the concept
|
|
|
|
|
* of a task instance has no clear definition, it is an application-specific
|
|
|
|
|
* thing. FreeRTOS+Trace allows you to define Instance Finish Events (IFEs),
|
|
|
|
|
* thing. Tracealyzer allows you to define Instance Finish Events (IFEs),
|
|
|
|
|
* which marks the point in a cyclic task when the "task instance" ends.
|
|
|
|
|
* The IFE is a blocking kernel call, typically in the main loop of a task
|
|
|
|
|
* which typically reads a message queue, waits for a semaphore or performs
|
|
|
|
|
* an explicit delay.
|
|
|
|
|
*
|
|
|
|
|
* If USE_IMPLICIT_IFE_RULES is one (1), the following FreeRTOS kernel calls
|
|
|
|
|
* are considered by default to be IFEs (Implicit IFEs):
|
|
|
|
|
* - vTaskDelay
|
|
|
|
|
* - vTaskDelayUntil
|
|
|
|
|
* - vTaskSuspend
|
|
|
|
|
* - xQueueReceive (blocking cases only)
|
|
|
|
|
* - xSemaphoreTake (blocking cases only)
|
|
|
|
|
* If USE_IMPLICIT_IFE_RULES is one (1), the kernel macros (trcKernelPort.h)
|
|
|
|
|
* will define what kernel calls are considered by default to be IFEs.
|
|
|
|
|
*
|
|
|
|
|
* However, Implicit IFEs only applies to blocking kernel calls. If an
|
|
|
|
|
* xQueueReceive reads a message without blocking, it does not create a new
|
|
|
|
|
* However, Implicit IFEs only applies to blocking kernel calls. If a
|
|
|
|
|
* service reads a message without blocking, it does not create a new
|
|
|
|
|
* instance since no blocking occurred.
|
|
|
|
|
*
|
|
|
|
|
* Moreover, the actual IFE might sometimes be another blocking call such as
|
|
|
|
|
* xQueueSend or xSemaphoreGive. We therefore allow for user-defined
|
|
|
|
|
* Explicit IFEs by calling
|
|
|
|
|
* Moreover, the actual IFE might sometimes be another blocking call. We
|
|
|
|
|
* therefore allow for user-defined Explicit IFEs by calling
|
|
|
|
|
*
|
|
|
|
|
* vTraceTaskInstanceIsFinished()
|
|
|
|
|
*
|
|
|
|
@ -311,8 +410,8 @@
|
|
|
|
|
* additional event but instead stores the service code and object handle
|
|
|
|
|
* of the IFE call as properties of the task.
|
|
|
|
|
*
|
|
|
|
|
* If using Explicit IFEs and the task also calls an Implicit IFE like
|
|
|
|
|
* vTaskDelay, this may result in additional incorrect task instances.
|
|
|
|
|
* If using Explicit IFEs and the task also calls an Implicit IFE, this may
|
|
|
|
|
* result in additional incorrect task instances.
|
|
|
|
|
* This is solved by disabling the Implicit IFEs for the task, by adding
|
|
|
|
|
* a call to
|
|
|
|
|
*
|
|
|
|
@ -360,7 +459,7 @@
|
|
|
|
|
*
|
|
|
|
|
* See vTraceMonitorTask in trcUser.c
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#define TRACE_PROGRESS_MONITOR_TASK_PRIORITY (tskIDLE_PRIORITY + 3)
|
|
|
|
|
#define TRACE_PROGRESS_MONITOR_TASK_PRIORITY (tskIDLE_PRIORITY + 1)
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
|
* TRACE_PROGRESS_MONITOR_TASK_STACKSIZE
|
|
|
|
@ -386,13 +485,13 @@
|
|
|
|
|
* be mapped to your console "printf" routine. The task is named TraceMon but
|
|
|
|
|
* is intentionally excluded from the demo trace.
|
|
|
|
|
*
|
|
|
|
|
* Default is 1000 FreeRTOS 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 FreeRTOS time.
|
|
|
|
|
* 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
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
#if WIN32
|
|
|
|
|
#ifdef WIN32
|
|
|
|
|
#define TRACE_PROGRESS_MONITOR_TASK_PERIOD 100
|
|
|
|
|
#else
|
|
|
|
|
#define TRACE_PROGRESS_MONITOR_TASK_PERIOD 1000
|
|
|
|
|