+ Update demos that use FreeRTOS+Trace to work with the latest trace recorder library.
+ Fix a few compiler warnings.
+ Add TickType_t specific critical sections so critical sections are not used when accessing the tick count in cases where the access is atomic (32-bit tick count, 32-bit architecture).

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/FreeRTOSConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/FreeRTOSConfig.h
index c365385..ab48663 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/FreeRTOSConfig.h
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/FreeRTOSConfig.h
@@ -105,7 +105,7 @@
 #define configTIMER_QUEUE_LENGTH		20

 #define configTIMER_TASK_STACK_DEPTH	( configMINIMAL_STACK_SIZE * 2 )

 

-#define configMAX_PRIORITIES			( ( UBaseType_t ) 7 )

+#define configMAX_PRIORITIES			( 7 )

 #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

 

 

@@ -157,6 +157,8 @@
 

 

 /* Include the FreeRTOS+Trace FreeRTOS trace macro definitions. */

+#define TRACE_ENTER_CRITICAL_SECTION() portENTER_CRITICAL()

+#define TRACE_EXIT_CRITICAL_SECTION() portEXIT_CRITICAL()

 #include "trcKernelPort.h"

 

 #endif /* FREERTOS_CONFIG_H */

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/Trace_Recorder_Configuration/trcConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/Trace_Recorder_Configuration/trcConfig.h
index a81aeb8..7039112 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/Trace_Recorder_Configuration/trcConfig.h
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/Trace_Recorder_Configuration/trcConfig.h
@@ -1,14 +1,14 @@
 /*******************************************************************************

- * Tracealyzer v2.6.0 Recorder Library

+ * Tracealyzer v2.7.0 Recorder Library

  * Percepio AB, www.percepio.com

  *

  * trcConfig.h

  *

- * Configuration parameters for the trace recorder library. Before using the 

- * trace recorder library, please check that the default settings are 

- * 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 

+ * Configuration parameters for the trace recorder library. Before using the

+ * trace recorder library, please check that the default settings are

+ * 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

  * over-approximated, although larger values values implies more RAM usage.

  *

  * Terms of Use

@@ -16,36 +16,121 @@
  * use together with Percepio products. You may distribute the recorder library

  * 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 

- * sold or in other ways commercially redistributed without explicit written 

+ * and documented in the initial comment section of these source files.

+ * This software is the intellectual property of Percepio AB and may not be

+ * sold or in other ways commercially redistributed without explicit written

  * permission by Percepio AB.

  *

- * Disclaimer 

- * The trace tool and recorder library is being delivered to you AS IS and 

- * Percepio AB makes no warranty as to its use or performance. Percepio AB does 

- * not and cannot warrant the performance or results you may obtain by using the 

- * software or documentation. Percepio AB make no warranties, express or 

- * implied, as to noninfringement of third party rights, merchantability, or 

- * fitness for any particular purpose. In no event will Percepio AB, its 

- * technology partners, or distributors be liable to you for any consequential, 

- * incidental or special damages, including any lost profits or lost savings, 

- * even if a representative of Percepio AB has been advised of the possibility 

- * of such damages, or for any claim by any third party. Some jurisdictions do 

- * not allow the exclusion or limitation of incidental, consequential or special 

- * damages, or the exclusion of implied warranties or limitations on how long an 

+ * Disclaimer

+ * The trace tool and recorder library is being delivered to you AS IS and

+ * Percepio AB makes no warranty as to its use or performance. Percepio AB does

+ * not and cannot warrant the performance or results you may obtain by using the

+ * software or documentation. Percepio AB make no warranties, express or

+ * implied, as to noninfringement of third party rights, merchantability, or

+ * fitness for any particular purpose. In no event will Percepio AB, its

+ * technology partners, or distributors be liable to you for any consequential,

+ * incidental or special damages, including any lost profits or lost savings,

+ * even if a representative of Percepio AB has been advised of the possibility

+ * of such damages, or for any claim by any third party. Some jurisdictions do

+ * not allow the exclusion or limitation of incidental, consequential or special

+ * 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.

  *

- * Copyright Percepio AB, 2013.

+ * Tabs are used for indent in this file (1 tab = 4 spaces)

+ *

+ * Copyright Percepio AB, 2014.

  * www.percepio.com

  ******************************************************************************/

 

 #ifndef TRCCONFIG_H

 #define TRCCONFIG_H

 

+/******************************************************************************

+ * SELECTED_PORT

+ *

+ * Macro that specifies what hardware port that should be used.

+ * Available ports are:

+ *

+ * Port Name							Code	 Official	OS supported

+ * PORT_APPLICATION_DEFINED				-2		-			-

+ * PORT_NOT_SET							-1		-			-

+ * PORT_HWIndependent					0		Yes			Any

+ * PORT_Win32							1		Yes			FreeRTOS on 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_PIC32MX				9		Yes			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

+ * PORT_MICROCHIP_PIC32MZ				14		Yes			Any

+ * PORT_ARM_CORTEX_A9					15		No			Any

+ *****************************************************************************/

+

+#ifndef WIN32

+	// Set the port setting here!

+	#define SELECTED_PORT PORT_NOT_SET

+

+	#if (SELECTED_PORT == PORT_NOT_SET)

+		#error "You need to define SELECTED_PORT here!"

+	#endif

+#else

+	// For Win32 demo projects this is set automatically

+	#define SELECTED_PORT PORT_Win32

+#endif

+

+/******************************************************************************

+ * FREERTOS_VERSION

+ *

+ * Specify what version of FreeRTOS that is used. This is necessary compensate

+ * for renamed symbols in the FreeRTOS kernel (does not build if incorrect).

+ *

+ * FREERTOS_VERSION_7_3_OR_7_4 (= 1)		If using FreeRTOS v7.3.0 - v7.4.2

+ * FREERTOS_VERSION_7_5_OR_7_6 (= 2)		If using FreeRTOS v7.5.0 - v7.6.0

+ * FREERTOS_VERSION_8_0_OR_LATER (= 3)		If using FreeRTOS v8.0.0 or later

+ *****************************************************************************/

+#define FREERTOS_VERSION	FREERTOS_VERSION_8_0_OR_LATER

+

+/******************************************************************************

+ * TRACE_RECORDER_STORE_MODE

+ *

+ * Macro which should be defined as one of:

+ * - 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

+ * to store the whole run since startup.

+ *

+ * When TRACE_RECORDER_STORE_MODE is TRACE_STORE_MODE_STOP_WHEN_FULL, the

+ * recording is stopped when the buffer becomes full. This is useful for

+ * recording events following a specific state, e.g., the startup sequence.

+ *****************************************************************************/

+#define TRACE_RECORDER_STORE_MODE TRACE_STORE_MODE_RING_BUFFER

+

 /*******************************************************************************

- * CONFIGURATION RELATED TO CAPACITY AND ALLOCATION 

+ * TRACE_SCHEDULING_ONLY

+ *

+ * Macro which should be defined as an integer value.

+ *

+ * If this setting is enabled (= 1), only scheduling events are recorded.

+ * If disabled (= 0), all events are recorded.

+ *

+ * Users of FreeRTOS+Trace Free Edition only displays scheduling events, so this

+ * option can be used to avoid storing unsupported events.

+ *

+ * Default value is 0 (store all enabled events).

+ *

  ******************************************************************************/

+#define TRACE_SCHEDULING_ONLY 0

 

 /*******************************************************************************

  * EVENT_BUFFER_SIZE

@@ -53,64 +138,312 @@
  * Macro which should be defined as an integer value.

  *

  * This defines the capacity of the event buffer, i.e., the number of records

- * it may store. Each registered event typically use one record (4 byte), but

- * vTracePrintF may use multiple records depending on the number of data args.

+ * it may store. Most events use one record (4 byte), although some events

+ * require multiple 4-byte records. You should adjust this to the amount of RAM

+ * available in the target system.

+ *

+ * Default value is 1000, which means that 4000 bytes is allocated for the

+ * event buffer.

  ******************************************************************************/

-

-#define EVENT_BUFFER_SIZE 4000 /* Adjust wrt. to available RAM */

-

+#define EVENT_BUFFER_SIZE 15000

 

 /*******************************************************************************

- * USE_LINKER_PRAGMA

+ * NTask, NISR, NQueue, NSemaphore, NMutex

  *

- * Macro which should be defined as an integer value, default is 0.

+ * A group of macros which should be defined as integer values, zero or larger.

  *

- * 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. 

+ * These define the capacity of the Object Property Table, i.e., the maximum

+ * number of objects active at any given point, within each object class (e.g.,

+ * task, queue, semaphore, ...).

  *

- * 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.

+ * If tasks or other other objects are deleted in your system, this

+ * setting does not limit the total amount of objects created, only the number

+ * of objects that have been successfully created but not yet deleted.

+ *

+ * Using too small values will cause vTraceError to be called, which stores an

+ * error message in the trace that is shown when opening the trace file.

+ *

+ * It can be wise to start with large values for these constants,

+ * unless you are very confident on these numbers. Then do a recording and

+ * check the actual usage by selecting View menu -> Trace Details ->

+ * Resource Usage -> Object Table.

  ******************************************************************************/

+#define NTask			100

+#define NISR			60

+#define NQueue			60

+#define NSemaphore		60

+#define NMutex			60

+#define NTimer			200

+#define NEventGroup		60

 

-#define USE_LINKER_PRAGMA 0

+/******************************************************************************

+ * INCLUDE_MEMMANG_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * This controls if malloc and free calls should be traced. Set this to zero to

+ * exclude malloc/free calls, or one (1) to include such events in the trace.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_MEMMANG_EVENTS 1

 

+/******************************************************************************

+ * INCLUDE_USER_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If this is zero (0) the code for creating User Events is excluded to

+ * reduce code size. User Events are application-generated events, like

+ * "printf" but for the trace log instead of console output. User Events are

+ * much faster than a printf and can therefore be used in timing critical code.

+ * See vTraceUserEvent() and vTracePrintF() in trcUser.h

+ *

+ * Default value is 1.

+ *

+ * Note that User Events are only displayed in Professional Edition.

+ *****************************************************************************/

+#define INCLUDE_USER_EVENTS 1

+

+/*****************************************************************************

+ * INCLUDE_ISR_TRACING

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If this is zero (0), the code for recording Interrupt Service Routines is

+ * excluded to reduce code size.

+ *

+ * Default value is 1.

+ *

+ * 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

+

+/*****************************************************************************

+ * INCLUDE_READY_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If one (1), events are recorded when tasks enter scheduling state "ready".

+ * This uses a lot of space in the event buffer, so excluding "ready events"

+ * will allow for longer traces. Including ready events however allows for

+ * showing the initial pending time before tasks enter the execution state, and

+ * for presenting accurate response times.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_READY_EVENTS 1

+

+/*****************************************************************************

+ * INCLUDE_NEW_TIME_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If this is zero (1), events will be generated whenever the OS clock is

+ * increased.

+ *

+ * Default value is 0.

+ *****************************************************************************/

+#define INCLUDE_NEW_TIME_EVENTS 1

+

+/******************************************************************************

+ * INCLUDE_FLOAT_SUPPORT

+ *

+ * Macro which should be defined as either zero (0) or one (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) arguments.

+ *

+ * vTracePrintF can be used with integer and string arguments in either case.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_FLOAT_SUPPORT 0

+

+/******************************************************************************

+ * INCLUDE_OBJECT_DELETE

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * This must be enabled (1) if tasks, queues or other

+ * 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.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_OBJECT_DELETE 1

 

 /*******************************************************************************

  * SYMBOL_TABLE_SIZE

  *

  * Macro which should be defined as an integer value.

  *

- * This defines the capacity of the symbol table, in bytes. This symbol table 

+ * This defines the capacity of the symbol table, in bytes. This symbol table

  * 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 

- * Object Table. Thus, if you don't use User Events or delete any kernel 

- * 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.

+ * objects. If you don't use User Events or delete any kernel

+ * objects you set this to a very low value. The minimum recommended value is 4.

+ * A size of zero (0) is not allowed since a zero-sized array may result in a

+ * 32-bit pointer, i.e., using 4 bytes rather than 0.

+ *

+ * Default value is 800.

  ******************************************************************************/

-#define SYMBOL_TABLE_SIZE 1000

+#define SYMBOL_TABLE_SIZE 5000

 

 #if (SYMBOL_TABLE_SIZE == 0)

 #error "SYMBOL_TABLE_SIZE may not be zero!"

 #endif

 

+/******************************************************************************

+ * NameLenTask, NameLenQueue, ...

+ *

+ * Macros that specify the maximum lengths (number of characters) for names of

+ * kernel objects, such as tasks and queues. If longer names are used, they will

+ * be truncated when stored in the recorder.

+ *****************************************************************************/

+#define NameLenTask			15

+#define NameLenISR			15

+#define NameLenQueue		15

+#define NameLenSemaphore	15

+#define NameLenMutex		15

+#define NameLenTimer		15

+#define NameLenEventGroup 	15

+

+/******************************************************************************

+ * TRACE_DATA_ALLOCATION

+ *

+ * This defines how to allocate the recorder data structure, i.e., using a

+ * static declaration or using a dynamic allocation in runtime (malloc).

+ *

+ * Should be one of these two options:

+ * - TRACE_DATA_ALLOCATION_STATIC (default)

+ * - TRACE_DATA_ALLOCATION_DYNAMIC

+ *

+ * Using static allocation has the benefits of compile-time errors if the buffer

+ * is too large (too large constants in trcConfig.h) and no need to call the

+ * initialization routine (xTraceInitTraceData).

+ *

+ * Using dynamic allocation may give more flexibility in some cases.

+ *****************************************************************************/

+#define TRACE_DATA_ALLOCATION TRACE_DATA_ALLOCATION_STATIC

+

+

+

+/******************************************************************************

+ *** ADVANCED SETTINGS ********************************************************

+ ******************************************************************************

+ * The remaining settings are not necessary to modify but allows for optimizing

+ * the recorder setup for your specific needs, e.g., to exclude events that you

+ * are not interested in, in order to get longer traces.

+ *****************************************************************************/

+

+/******************************************************************************

+* HEAP_SIZE_BELOW_16M

+*

+* 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

+* below 16 MB (2^24 byte), and you can live with reported addresses showing the

+* lower 24 bits only. If 0, you get the full 32-bit addresses.

+*

+* Default value is 0.

+******************************************************************************/

+#define HEAP_SIZE_BELOW_16M 0

+

+/******************************************************************************

+ * 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

+

+/******************************************************************************

+ * USE_IMPLICIT_IFE_RULES

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ * Default is 1.

+ *

+ * Tracealyzer groups the events into actor instances, based on context-switches

+ * and a definition of "Instance Finish Events", or IFEs. These are kernel calls

+ * considered to be the last event in a task instance. Some kernel calls are

+ * considered IFEs by default (e.g., delay functions), but it is also possible

+ * to specify this individually for each task (see vTraceTaskInstanceFinish).

+ *

+ * If USE_IMPLICIT_IFE_RULES is one (1), the default IFEs will be enabled, which

+ * gives a "typical" grouping of events into instances. You can combine this

+ * with calls to vTraceTaskInstanceFinish for specific tasks.

+ *

+ * If USE_IMPLICIT_IFE_RULES is zero (0), the implicit IFEs are disabled and all

+ * events withing each task is then shown as a single instance, unless  you call

+ * vTraceTaskInstanceFinish() at suitable locations to mark the IFEs.

+ *****************************************************************************/

+#define USE_IMPLICIT_IFE_RULES 1

+

+/******************************************************************************

+ * USE_16BIT_OBJECT_HANDLES

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If set to 0 (zero), the recorder uses 8-bit handles to identify kernel

+ * 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.

+ *

+ * Default is 0.

+ *

+ * NOTE: An object with handle above 255 will use an extra 4-byte record in

+ * the event buffer whenever referenced. Moreover, 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, mutex, etc.

+ *****************************************************************************/

+#define USE_16BIT_OBJECT_HANDLES 0

+

+/******************************************************************************

+ * USE_TRACE_ASSERT

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ * Default is 1.

+ *

+ * 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.

+ * This is used on several places in the recorder code for sanity checks on

+ * parameters. Can be switched off to reduce CPU usage of the tracing.

+ *****************************************************************************/

+#define USE_TRACE_ASSERT 1

+

 /*******************************************************************************

  * 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.

+ * This enables and disables the use of the separate user event buffer. Using

+ * this separate buffer has the benefit of not overwriting the user events with

+ * kernel events (usually generated at a much higher rate), i.e., when using

+ * ring-buffer mode.

  *

  * 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 

+ * 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

@@ -125,7 +458,7 @@
  *

  * Only in use if USE_SEPARATE_USER_EVENT_BUFFER is set to 1.

  ******************************************************************************/

-#define USER_EVENT_BUFFER_SIZE 500

+#define USER_EVENT_BUFFER_SIZE 10

 

 /*******************************************************************************

  * USER_EVENT_CHANNELS

@@ -138,393 +471,5 @@
  ******************************************************************************/

 #define CHANNEL_FORMAT_PAIRS 32

 

-/*******************************************************************************

- * NTask, NISR, NQueue, NSemaphore, NMutex

- *

- * A group of Macros which should be defined as an integer value of zero (0) 

- * or larger.

- *

- * This defines the capacity of the Object Property Table - the maximum number

- * of objects active at any given point within each object class.

- * 

- * NOTE: In case objects are deleted and created during runtime, this setting

- * does not limit the total amount of objects, only the number of concurrently

- * active objects. 

- *

- * 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 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). 

- *

- * 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: Remember to account for all tasks and other objects created by 

- * the kernel, such as the IDLE task, any timer tasks, 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 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             15

-#define NISR              15

-#define NQueue            15

-#define NSemaphore        15

-#define NMutex            15

-#define NTimer            15

-#define NEventGroup       15

-

-/* Maximum object name length for each class (includes zero termination) */

-#define NameLenTask       15

-#define NameLenISR        15

-#define NameLenQueue      15

-#define NameLenSemaphore  15

-#define NameLenMutex      15

-#define NameLenTimer      15

-#define NameLenEventGroup 15

-

-/******************************************************************************

- * TRACE_DESCRIPTION

- *

- * Macro which should be defined as a string.

- *

- * 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 "Tracealyzer Recorder Test Program"

-

-/******************************************************************************

- * TRACE_DESCRIPTION_MAX_LENGTH

- *

- * The maximum length (including zero termination) for the TRACE_DESCRIPTION

- * string. Since this string also is used for internal error messages from the 

- * recorder do not make it too short, as this may truncate the error messages.

- * Default is 80. 

- * Maximum allowed length is 256 - the trace will fail to load if longer.

- *****************************************************************************/

-#define TRACE_DESCRIPTION_MAX_LENGTH 80

-

-

-/******************************************************************************

- * TRACE_DATA_ALLOCATION

- *

- * This defines how to allocate the recorder data structure, i.e., using a 

- * static declaration or using a dynamic allocation in runtime (malloc).

- *

- * Should be one of these two options:

- * - TRACE_DATA_ALLOCATION_STATIC (default)

- * - TRACE_DATA_ALLOCATION_DYNAMIC

- *

- * Using static allocation has the benefits of compile-time errors if the buffer 

- * is too large (too large constants in trcConfig.h) and no need to call the 

- * initialization routine (xTraceInitTraceData).

- *

- * Using dynamic allocation may give more flexibility in some cases.

- *****************************************************************************/

-

-#define TRACE_DATA_ALLOCATION TRACE_DATA_ALLOCATION_STATIC

-

-

-/******************************************************************************

- * 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

- *

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * If this is zero (0) the code for creating User Events is excluded to

- * reduce code size. User Events are application-generated events, like 

- * "printf" but for the trace log instead of console output. User Events are 

- * much faster than a printf and can therefore be used in timing critical code.

- * See vTraceUserEvent() and vTracePrintF() in trcUser.h

- * 

- * Note that User Events are not displayed in FreeRTOS+Trace 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

- *

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * If this is zero (0), the code for recording Interrupt Service Routines is 

- * 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

-

-/******************************************************************************

- * INCLUDE_OBJECT_DELETE

- * 

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * This must be enabled (1) if tasks, queues or other 

- * 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

-

-/******************************************************************************

- * 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

- *****************************************************************************/

-

-/******************************************************************************

- * TRACE_RECORDER_STORE_MODE

- *

- * Macro which should be defined as one of:

- * - 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 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

- * 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 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

- * using an on-chip debugger is not possible. In the Windows port, vTracePortEnd

- * 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 TRACE_RECORDER_STORE_MODE TRACE_STORE_MODE_RING_BUFFER

-

-/******************************************************************************

- * STOP_AFTER_N_EVENTS

- *

- * Macro which should be defined as an integer value, or not defined.

- * Default is -1

- *

- * STOP_AFTER_N_EVENTS is intended for tests of the ring buffer mode (when

- * RECORDER_STORE_MODE is STORE_MODE_RING_BUFFER). It stops the recording when

- * the specified number of events has been observed. This value can be larger

- * than the buffer size, to allow for test of the "wrapping around" that occurs

- * in ring buffer mode . A negative value (or no definition of this macro)

- * disables this feature.

- *****************************************************************************/

-#define STOP_AFTER_N_EVENTS -1

-

-/******************************************************************************

- * USE_IMPLICIT_IFE_RULES

- *

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * ### Instance Finish Events (IFE) ###

- *

- * 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. 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 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 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. We 

- * therefore allow for user-defined Explicit IFEs by calling

- *

- *     vTraceTaskInstanceIsFinished()

- *

- * right before the kernel call considered as IFE. This does not create an

- * 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, this may 

- * result in additional incorrect task instances.

- * This is solved by disabling the Implicit IFEs for the task, by adding

- * a call to

- * 

- *     vTraceTaskSkipDefaultInstanceFinishedEvents()

- * 

- * in the very beginning of that task. This allows you to combine Explicit IFEs

- * for some tasks with Implicit IFEs for the rest of the tasks, if

- * USE_IMPLICIT_IFE_RULES is 1.

- *

- * By setting USE_IMPLICIT_IFE_RULES to zero (0), the implicit IFEs are disabled

- * for all tasks. Tasks will then be considered to have a single instance only, 

- * covering all execution fragments, unless you define an explicit IFE in each

- * task by calling vTraceTaskInstanceIsFinished before the blocking call.

- *****************************************************************************/

-#define USE_IMPLICIT_IFE_RULES 1

-

-

-/******************************************************************************

- * USE_16BIT_OBJECT_HANDLES

- *

- * Macro which should be defined as either zero (0) or one (1).

- * Default is 0.

- *

- * If set to 0 (zero), the recorder uses 8-bit handles to identify kernel 

- * 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.

- ******************************************************************************/

-#define USE_PRIMASK_CS 0

-

-/******************************************************************************

-* HEAP_SIZE_BELOW_16M

-*

-* 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 

-* below 16 MB (2^24 byte), and you can live with addresses truncated to the 

-* lower 24 bit. Otherwise set it to 0 to get the full 32-bit addresses.

-******************************************************************************/

-#define HEAP_SIZE_BELOW_16M 0

-

 #endif

 

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj
index e36a30f..89d40da 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj
@@ -151,14 +151,12 @@
   </ItemGroup>

   <ItemGroup>

     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcBase.h" />

-    <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcHooks.h" />

     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcKernel.h" />

     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcKernelPort.h" />

     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcTypes.h" />

     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcUser.h" />

     <ClInclude Include="FreeRTOSConfig.h" />

     <ClInclude Include="Trace_Recorder_Configuration\trcConfig.h" />

-    <ClInclude Include="Trace_Recorder_Configuration\trcHardwarePort.h" />

   </ItemGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj.filters
index 42ab973..cb0cf64 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj.filters
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_CLI_with_Trace_Windows_Simulator/WIN32.vcxproj.filters
@@ -103,9 +103,6 @@
     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcBase.h">

       <Filter>FreeRTOS+\FreeRTOS+Trace\Include</Filter>

     </ClInclude>

-    <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcHooks.h">

-      <Filter>FreeRTOS+\FreeRTOS+Trace\Include</Filter>

-    </ClInclude>

     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcKernel.h">

       <Filter>FreeRTOS+\FreeRTOS+Trace\Include</Filter>

     </ClInclude>

@@ -115,8 +112,5 @@
     <ClInclude Include="..\..\Source\FreeRTOS-Plus-Trace\Include\trcKernelPort.h">

       <Filter>FreeRTOS+\FreeRTOS+Trace\Include</Filter>

     </ClInclude>

-    <ClInclude Include="Trace_Recorder_Configuration\trcHardwarePort.h">

-      <Filter>Demo App Source\Trace Recorder Configuration</Filter>

-    </ClInclude>

   </ItemGroup>

 </Project>
\ No newline at end of file
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/.cproject b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/.cproject
index 8107b25..ed0774e 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/.cproject
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/.cproject
@@ -5,14 +5,14 @@
 			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.crt.advproject.config.exe.debug.56486929" moduleId="org.eclipse.cdt.core.settings" name="Debug">

 				<externalSettings/>

 				<extensions>

-					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>

-					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>

 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

 					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>

 					<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

 					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

 					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>

+					<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>

+					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>

 				</extensions>

 			</storageModule>

 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">

@@ -78,6 +78,7 @@
 								<option id="com.crt.advproject.link.gcc.hdrlib.2006557555" name="Use C library" superClass="com.crt.advproject.link.gcc.hdrlib" value="com.crt.advproject.gcc.link.hdrlib.codered.nohost" valueType="enumerated"/>

 								<option id="gnu.c.link.option.nodeflibs.2072403274" name="Do not use default libraries (-nodefaultlibs)" superClass="gnu.c.link.option.nodeflibs" value="false" valueType="boolean"/>

 								<option id="com.crt.advproject.link.gcc.multicore.slave.1911982348" name="Multicore slave" superClass="com.crt.advproject.link.gcc.multicore.slave"/>

+								<option id="com.crt.advproject.link.gcc.multicore.master.userobjs.502901386" superClass="com.crt.advproject.link.gcc.multicore.master.userobjs" valueType="userObjs"/>

 								<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1085761099" superClass="cdt.managedbuild.tool.gnu.c.linker.input">

 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>

 									<additionalInput kind="additionalinput" paths="$(LIBS)"/>

@@ -133,7 +134,7 @@
 	<storageModule moduleId="com.crt.config">

 		<projectStorage>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13;

 &lt;TargetConfig&gt;&#13;

-&lt;Properties property_0="" property_2="LPC1850A_4350A_SPIFI.cfx" property_3="NXP" property_4="LPC1830" property_count="5" version="60000"/&gt;&#13;

+&lt;Properties property_0="" property_2="LPC1850A_4350A_SPIFI.cfx" property_3="NXP" property_4="LPC1830" property_count="5" version="70200"/&gt;&#13;

 &lt;infoList vendor="NXP"&gt;&lt;info chip="LPC1830" match_id="0x0" name="LPC1830" resetscript="LPC18LPC43ExternalFLASHBootResetscript.scp" stub="crt_emu_lpc18_43_nxp"&gt;&lt;chip&gt;&lt;name&gt;LPC1830&lt;/name&gt;&#13;

 &lt;family&gt;LPC18xx&lt;/family&gt;&#13;

 &lt;vendor&gt;NXP (formerly Philips)&lt;/vendor&gt;&#13;

@@ -154,10 +155,12 @@
 &lt;peripheralInstance derived_from="V7M_ITM" id="ITM" location="0xe0000000"/&gt;&#13;

 &lt;peripheralInstance derived_from="SCT" id="SCT" location="0x40000000"/&gt;&#13;

 &lt;peripheralInstance derived_from="GPDMA" id="GPDMA" location="0x40002000"/&gt;&#13;

+&lt;peripheralInstance derived_from="SPIFI" id="SPIFI" location="0x40003000"/&gt;&#13;

 &lt;peripheralInstance derived_from="SDMMC" id="SDMMC" location="0x40004000"/&gt;&#13;

 &lt;peripheralInstance derived_from="EMC" id="EMC" location="0x40005000"/&gt;&#13;

 &lt;peripheralInstance derived_from="USB0" id="USB0" location="0x40006000"/&gt;&#13;

 &lt;peripheralInstance derived_from="USB1" id="USB1" location="0x40007000"/&gt;&#13;

+&lt;peripheralInstance derived_from="EEPROM" id="EEPROM" location="0x4000e000"/&gt;&#13;

 &lt;peripheralInstance derived_from="ETHERNET" id="ETHERNET" location="0x40010000"/&gt;&#13;

 &lt;peripheralInstance derived_from="ATIMER" id="ATIMER" location="0x40040000"/&gt;&#13;

 &lt;peripheralInstance derived_from="REGFILE" id="REGFILE" location="0x40041000"/&gt;&#13;

@@ -198,7 +201,6 @@
 &lt;peripheralInstance derived_from="ADC0" id="ADC0" location="0x400e3000"/&gt;&#13;

 &lt;peripheralInstance derived_from="ADC1" id="ADC1" location="0x400e4000"/&gt;&#13;

 &lt;peripheralInstance derived_from="GPIO-PORT" id="GPIO-PORT" location="0x400f4000"/&gt;&#13;

-&lt;peripheralInstance derived_from="EEPROM" id="EEPROM" location="0x4000e000"/&gt;&#13;

 &lt;/chip&gt;&#13;

 &lt;processor&gt;&lt;name gcc_name="cortex-m3"&gt;Cortex-M3&lt;/name&gt;&#13;

 &lt;family&gt;Cortex-M&lt;/family&gt;&#13;

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/FreeRTOSConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/FreeRTOSConfig.h
index 7ec8dd1..388c2a2 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/FreeRTOSConfig.h
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/FreeRTOSConfig.h
@@ -92,7 +92,7 @@
 #define configTICK_RATE_HZ				100

 #define configMINIMAL_STACK_SIZE		( ( unsigned short ) 300 )

 #define configTOTAL_HEAP_SIZE			( ( size_t ) ( 40 * 1024 ) ) /* Has not effect in this demo as the heap is manually pointed to AHB RAM. */

-#define configMAX_TASK_NAME_LEN			( 12 )

+#define configMAX_TASK_NAME_LEN			( 9 )

 #define configIDLE_SHOULD_YIELD			0

 #define configQUEUE_REGISTRY_SIZE		10

 #define configUSE_TRACE_FACILITY		1

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/board.h b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/board.h
new file mode 100644
index 0000000..38067a9
--- /dev/null
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/board.h
@@ -0,0 +1,3 @@
+/* The name of this header file is set by the trace recorder code, but the name

+of the actual header file is used below. */

+#include "lpc18xx.h"

diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/trcConfig.h b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/trcConfig.h
index 8d08da0..6ff5961 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/trcConfig.h
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Plus_UDP_and_CLI_LPC1830_GCC/trcConfig.h
@@ -1,14 +1,14 @@
 /*******************************************************************************

- * Tracealyzer v2.6.0 Recorder Library

+ * Tracealyzer v2.7.0 Recorder Library

  * Percepio AB, www.percepio.com

  *

  * trcConfig.h

  *

- * Configuration parameters for the trace recorder library. Before using the 

- * trace recorder library, please check that the default settings are 

- * 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 

+ * Configuration parameters for the trace recorder library. Before using the

+ * trace recorder library, please check that the default settings are

+ * 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

  * over-approximated, although larger values values implies more RAM usage.

  *

  * Terms of Use

@@ -16,36 +16,121 @@
  * use together with Percepio products. You may distribute the recorder library

  * 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 

- * sold or in other ways commercially redistributed without explicit written 

+ * and documented in the initial comment section of these source files.

+ * This software is the intellectual property of Percepio AB and may not be

+ * sold or in other ways commercially redistributed without explicit written

  * permission by Percepio AB.

  *

- * Disclaimer 

- * The trace tool and recorder library is being delivered to you AS IS and 

- * Percepio AB makes no warranty as to its use or performance. Percepio AB does 

- * not and cannot warrant the performance or results you may obtain by using the 

- * software or documentation. Percepio AB make no warranties, express or 

- * implied, as to noninfringement of third party rights, merchantability, or 

- * fitness for any particular purpose. In no event will Percepio AB, its 

- * technology partners, or distributors be liable to you for any consequential, 

- * incidental or special damages, including any lost profits or lost savings, 

- * even if a representative of Percepio AB has been advised of the possibility 

- * of such damages, or for any claim by any third party. Some jurisdictions do 

- * not allow the exclusion or limitation of incidental, consequential or special 

- * damages, or the exclusion of implied warranties or limitations on how long an 

+ * Disclaimer

+ * The trace tool and recorder library is being delivered to you AS IS and

+ * Percepio AB makes no warranty as to its use or performance. Percepio AB does

+ * not and cannot warrant the performance or results you may obtain by using the

+ * software or documentation. Percepio AB make no warranties, express or

+ * implied, as to noninfringement of third party rights, merchantability, or

+ * fitness for any particular purpose. In no event will Percepio AB, its

+ * technology partners, or distributors be liable to you for any consequential,

+ * incidental or special damages, including any lost profits or lost savings,

+ * even if a representative of Percepio AB has been advised of the possibility

+ * of such damages, or for any claim by any third party. Some jurisdictions do

+ * not allow the exclusion or limitation of incidental, consequential or special

+ * 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.

  *

- * Copyright Percepio AB, 2013.

+ * Tabs are used for indent in this file (1 tab = 4 spaces)

+ *

+ * Copyright Percepio AB, 2014.

  * www.percepio.com

  ******************************************************************************/

 

 #ifndef TRCCONFIG_H

 #define TRCCONFIG_H

 

+/******************************************************************************

+ * SELECTED_PORT

+ *

+ * Macro that specifies what hardware port that should be used.

+ * Available ports are:

+ *

+ * Port Name							Code	 Official	OS supported

+ * PORT_APPLICATION_DEFINED				-2		-			-

+ * PORT_NOT_SET							-1		-			-

+ * PORT_HWIndependent					0		Yes			Any

+ * PORT_Win32							1		Yes			FreeRTOS on 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_PIC32MX				9		Yes			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

+ * PORT_MICROCHIP_PIC32MZ				14		Yes			Any

+ * PORT_ARM_CORTEX_A9					15		No			Any

+ *****************************************************************************/

+

+#ifndef WIN32

+	// Set the port setting here!

+	#define SELECTED_PORT PORT_ARM_CortexM

+

+	#if (SELECTED_PORT == PORT_NOT_SET)

+		#error "You need to define SELECTED_PORT here!"

+	#endif

+#else

+	// For Win32 demo projects this is set automatically

+	#define SELECTED_PORT PORT_Win32

+#endif

+

+/******************************************************************************

+ * FREERTOS_VERSION

+ *

+ * Specify what version of FreeRTOS that is used. This is necessary compensate

+ * for renamed symbols in the FreeRTOS kernel (does not build if incorrect).

+ *

+ * FREERTOS_VERSION_7_3_OR_7_4 (= 1)		If using FreeRTOS v7.3.0 - v7.4.2

+ * FREERTOS_VERSION_7_5_OR_7_6 (= 2)		If using FreeRTOS v7.5.0 - v7.6.0

+ * FREERTOS_VERSION_8_0_OR_LATER (= 3)		If using FreeRTOS v8.0.0 or later

+ *****************************************************************************/

+#define FREERTOS_VERSION	FREERTOS_VERSION_8_0_OR_LATER

+

+/******************************************************************************

+ * TRACE_RECORDER_STORE_MODE

+ *

+ * Macro which should be defined as one of:

+ * - 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

+ * to store the whole run since startup.

+ *

+ * When TRACE_RECORDER_STORE_MODE is TRACE_STORE_MODE_STOP_WHEN_FULL, the

+ * recording is stopped when the buffer becomes full. This is useful for

+ * recording events following a specific state, e.g., the startup sequence.

+ *****************************************************************************/

+#define TRACE_RECORDER_STORE_MODE TRACE_STORE_MODE_RING_BUFFER

+

 /*******************************************************************************

- * CONFIGURATION RELATED TO CAPACITY AND ALLOCATION 

+ * TRACE_SCHEDULING_ONLY

+ *

+ * Macro which should be defined as an integer value.

+ *

+ * If this setting is enabled (= 1), only scheduling events are recorded.

+ * If disabled (= 0), all events are recorded.

+ *

+ * Users of FreeRTOS+Trace Free Edition only displays scheduling events, so this

+ * option can be used to avoid storing unsupported events.

+ *

+ * Default value is 0 (store all enabled events).

+ *

  ******************************************************************************/

+#define TRACE_SCHEDULING_ONLY 0

 

 /*******************************************************************************

  * EVENT_BUFFER_SIZE

@@ -53,64 +138,312 @@
  * Macro which should be defined as an integer value.

  *

  * This defines the capacity of the event buffer, i.e., the number of records

- * it may store. Each registered event typically use one record (4 byte), but

- * vTracePrintF may use multiple records depending on the number of data args.

+ * it may store. Most events use one record (4 byte), although some events

+ * require multiple 4-byte records. You should adjust this to the amount of RAM

+ * available in the target system.

+ *

+ * Default value is 1000, which means that 4000 bytes is allocated for the

+ * event buffer.

  ******************************************************************************/

-

-#define EVENT_BUFFER_SIZE 10000 /* Adjust wrt. to available RAM */

-

+#define EVENT_BUFFER_SIZE 1000

 

 /*******************************************************************************

- * USE_LINKER_PRAGMA

+ * NTask, NISR, NQueue, NSemaphore, NMutex

  *

- * Macro which should be defined as an integer value, default is 0.

+ * A group of macros which should be defined as integer values, zero or larger.

  *

- * 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. 

+ * These define the capacity of the Object Property Table, i.e., the maximum

+ * number of objects active at any given point, within each object class (e.g.,

+ * task, queue, semaphore, ...).

  *

- * 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.

+ * If tasks or other other objects are deleted in your system, this

+ * setting does not limit the total amount of objects created, only the number

+ * of objects that have been successfully created but not yet deleted.

+ *

+ * Using too small values will cause vTraceError to be called, which stores an

+ * error message in the trace that is shown when opening the trace file.

+ *

+ * It can be wise to start with large values for these constants,

+ * unless you are very confident on these numbers. Then do a recording and

+ * check the actual usage by selecting View menu -> Trace Details ->

+ * Resource Usage -> Object Table.

  ******************************************************************************/

+#define NTask			15

+#define NISR			4

+#define NQueue			10

+#define NSemaphore		10

+#define NMutex			5

+#define NTimer			10

+#define NEventGroup		1

 

-#define USE_LINKER_PRAGMA 0

+/******************************************************************************

+ * INCLUDE_MEMMANG_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * This controls if malloc and free calls should be traced. Set this to zero to

+ * exclude malloc/free calls, or one (1) to include such events in the trace.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_MEMMANG_EVENTS 1

 

+/******************************************************************************

+ * INCLUDE_USER_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If this is zero (0) the code for creating User Events is excluded to

+ * reduce code size. User Events are application-generated events, like

+ * "printf" but for the trace log instead of console output. User Events are

+ * much faster than a printf and can therefore be used in timing critical code.

+ * See vTraceUserEvent() and vTracePrintF() in trcUser.h

+ *

+ * Default value is 1.

+ *

+ * Note that User Events are only displayed in Professional Edition.

+ *****************************************************************************/

+#define INCLUDE_USER_EVENTS 0

+

+/*****************************************************************************

+ * INCLUDE_ISR_TRACING

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If this is zero (0), the code for recording Interrupt Service Routines is

+ * excluded to reduce code size.

+ *

+ * Default value is 1.

+ *

+ * 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

+

+/*****************************************************************************

+ * INCLUDE_READY_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If one (1), events are recorded when tasks enter scheduling state "ready".

+ * This uses a lot of space in the event buffer, so excluding "ready events"

+ * will allow for longer traces. Including ready events however allows for

+ * showing the initial pending time before tasks enter the execution state, and

+ * for presenting accurate response times.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_READY_EVENTS 1

+

+/*****************************************************************************

+ * INCLUDE_NEW_TIME_EVENTS

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If this is zero (1), events will be generated whenever the OS clock is

+ * increased.

+ *

+ * Default value is 0.

+ *****************************************************************************/

+#define INCLUDE_NEW_TIME_EVENTS 0

+

+/******************************************************************************

+ * INCLUDE_FLOAT_SUPPORT

+ *

+ * Macro which should be defined as either zero (0) or one (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) arguments.

+ *

+ * vTracePrintF can be used with integer and string arguments in either case.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_FLOAT_SUPPORT 0

+

+/******************************************************************************

+ * INCLUDE_OBJECT_DELETE

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * This must be enabled (1) if tasks, queues or other

+ * 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.

+ *

+ * Default value is 1.

+ *****************************************************************************/

+#define INCLUDE_OBJECT_DELETE 1

 

 /*******************************************************************************

  * SYMBOL_TABLE_SIZE

  *

  * Macro which should be defined as an integer value.

  *

- * This defines the capacity of the symbol table, in bytes. This symbol table 

+ * This defines the capacity of the symbol table, in bytes. This symbol table

  * 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 

- * Object Table. Thus, if you don't use User Events or delete any kernel 

- * 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.

+ * objects. If you don't use User Events or delete any kernel

+ * objects you set this to a very low value. The minimum recommended value is 4.

+ * A size of zero (0) is not allowed since a zero-sized array may result in a

+ * 32-bit pointer, i.e., using 4 bytes rather than 0.

+ *

+ * Default value is 800.

  ******************************************************************************/

-#define SYMBOL_TABLE_SIZE 1000

+#define SYMBOL_TABLE_SIZE 5000

 

 #if (SYMBOL_TABLE_SIZE == 0)

 #error "SYMBOL_TABLE_SIZE may not be zero!"

 #endif

 

+/******************************************************************************

+ * NameLenTask, NameLenQueue, ...

+ *

+ * Macros that specify the maximum lengths (number of characters) for names of

+ * kernel objects, such as tasks and queues. If longer names are used, they will

+ * be truncated when stored in the recorder.

+ *****************************************************************************/

+#define NameLenTask			15

+#define NameLenISR			15

+#define NameLenQueue		15

+#define NameLenSemaphore	15

+#define NameLenMutex		15

+#define NameLenTimer		15

+#define NameLenEventGroup 	15

+

+/******************************************************************************

+ * TRACE_DATA_ALLOCATION

+ *

+ * This defines how to allocate the recorder data structure, i.e., using a

+ * static declaration or using a dynamic allocation in runtime (malloc).

+ *

+ * Should be one of these two options:

+ * - TRACE_DATA_ALLOCATION_STATIC (default)

+ * - TRACE_DATA_ALLOCATION_DYNAMIC

+ *

+ * Using static allocation has the benefits of compile-time errors if the buffer

+ * is too large (too large constants in trcConfig.h) and no need to call the

+ * initialization routine (xTraceInitTraceData).

+ *

+ * Using dynamic allocation may give more flexibility in some cases.

+ *****************************************************************************/

+#define TRACE_DATA_ALLOCATION TRACE_DATA_ALLOCATION_STATIC

+

+

+

+/******************************************************************************

+ *** ADVANCED SETTINGS ********************************************************

+ ******************************************************************************

+ * The remaining settings are not necessary to modify but allows for optimizing

+ * the recorder setup for your specific needs, e.g., to exclude events that you

+ * are not interested in, in order to get longer traces.

+ *****************************************************************************/

+

+/******************************************************************************

+* HEAP_SIZE_BELOW_16M

+*

+* 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

+* below 16 MB (2^24 byte), and you can live with reported addresses showing the

+* lower 24 bits only. If 0, you get the full 32-bit addresses.

+*

+* Default value is 0.

+******************************************************************************/

+#define HEAP_SIZE_BELOW_16M 0

+

+/******************************************************************************

+ * 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

+

+/******************************************************************************

+ * USE_IMPLICIT_IFE_RULES

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ * Default is 1.

+ *

+ * Tracealyzer groups the events into actor instances, based on context-switches

+ * and a definition of "Instance Finish Events", or IFEs. These are kernel calls

+ * considered to be the last event in a task instance. Some kernel calls are

+ * considered IFEs by default (e.g., delay functions), but it is also possible

+ * to specify this individually for each task (see vTraceTaskInstanceFinish).

+ *

+ * If USE_IMPLICIT_IFE_RULES is one (1), the default IFEs will be enabled, which

+ * gives a "typical" grouping of events into instances. You can combine this

+ * with calls to vTraceTaskInstanceFinish for specific tasks.

+ *

+ * If USE_IMPLICIT_IFE_RULES is zero (0), the implicit IFEs are disabled and all

+ * events withing each task is then shown as a single instance, unless  you call

+ * vTraceTaskInstanceFinish() at suitable locations to mark the IFEs.

+ *****************************************************************************/

+#define USE_IMPLICIT_IFE_RULES 1

+

+/******************************************************************************

+ * USE_16BIT_OBJECT_HANDLES

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ *

+ * If set to 0 (zero), the recorder uses 8-bit handles to identify kernel

+ * 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.

+ *

+ * Default is 0.

+ *

+ * NOTE: An object with handle above 255 will use an extra 4-byte record in

+ * the event buffer whenever referenced. Moreover, 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, mutex, etc.

+ *****************************************************************************/

+#define USE_16BIT_OBJECT_HANDLES 0

+

+/******************************************************************************

+ * USE_TRACE_ASSERT

+ *

+ * Macro which should be defined as either zero (0) or one (1).

+ * Default is 1.

+ *

+ * 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.

+ * This is used on several places in the recorder code for sanity checks on

+ * parameters. Can be switched off to reduce CPU usage of the tracing.

+ *****************************************************************************/

+#define USE_TRACE_ASSERT 1

+

 /*******************************************************************************

  * 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.

+ * This enables and disables the use of the separate user event buffer. Using

+ * this separate buffer has the benefit of not overwriting the user events with

+ * kernel events (usually generated at a much higher rate), i.e., when using

+ * ring-buffer mode.

  *

  * 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 

+ * 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

@@ -125,7 +458,7 @@
  *

  * Only in use if USE_SEPARATE_USER_EVENT_BUFFER is set to 1.

  ******************************************************************************/

-#define USER_EVENT_BUFFER_SIZE 500

+#define USER_EVENT_BUFFER_SIZE 10

 

 /*******************************************************************************

  * USER_EVENT_CHANNELS

@@ -138,397 +471,5 @@
  ******************************************************************************/

 #define CHANNEL_FORMAT_PAIRS 32

 

-/*******************************************************************************

- * NTask, NISR, NQueue, NSemaphore, NMutex

- *

- * A group of Macros which should be defined as an integer value of zero (0) 

- * or larger.

- *

- * This defines the capacity of the Object Property Table - the maximum number

- * of objects active at any given point within each object class.

- * 

- * NOTE: In case objects are deleted and created during runtime, this setting

- * does not limit the total amount of objects, only the number of concurrently

- * active objects. 

- *

- * 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 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). 

- *

- * 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: Remember to account for all tasks and other objects created by 

- * the kernel, such as the IDLE task, any timer tasks, 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 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             15

-#define NISR              4

-#define NQueue            10

-#define NSemaphore        10

-#define NMutex            5

-#define NTimer            10

-#define NEventGroup       1

-

-/* Maximum object name length for each class (includes zero termination) */

-#define NameLenTask       configMAX_TASK_NAME_LEN

-#define NameLenISR        10

-#define NameLenQueue      15

-#define NameLenSemaphore  15

-#define NameLenMutex      15

-#define NameLenTimer      15

-#define NameLenEventGroup 15

-

-/******************************************************************************

- * TRACE_DESCRIPTION

- *

- * Macro which should be defined as a string.

- *

- * 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"

-

-/******************************************************************************

- * TRACE_DESCRIPTION_MAX_LENGTH

- *

- * The maximum length (including zero termination) for the TRACE_DESCRIPTION

- * string. Since this string also is used for internal error messages from the 

- * recorder do not make it too short, as this may truncate the error messages.

- * Default is 80. 

- * Maximum allowed length is 256 - the trace will fail to load if longer.

- *****************************************************************************/

-#define TRACE_DESCRIPTION_MAX_LENGTH 80

-

-

-/******************************************************************************

- * TRACE_DATA_ALLOCATION

- *

- * This defines how to allocate the recorder data structure, i.e., using a 

- * static declaration or using a dynamic allocation in runtime (malloc).

- *

- * Should be one of these two options:

- * - TRACE_DATA_ALLOCATION_STATIC (default)

- * - TRACE_DATA_ALLOCATION_DYNAMIC

- *

- * Using static allocation has the benefits of compile-time errors if the buffer 

- * is too large (too large constants in trcConfig.h) and no need to call the 

- * initialization routine (xTraceInitTraceData).

- *

- * Using dynamic allocation may give more flexibility in some cases.

- *****************************************************************************/

-

-#define TRACE_DATA_ALLOCATION TRACE_DATA_ALLOCATION_STATIC

-

-

-/******************************************************************************

- * 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

- *

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * If this is zero (0) the code for creating User Events is excluded to

- * reduce code size. User Events are application-generated events, like 

- * "printf" but for the trace log instead of console output. User Events are 

- * much faster than a printf and can therefore be used in timing critical code.

- * See vTraceUserEvent() and vTracePrintF() in trcUser.h

- * 

- * Note that User Events are not displayed in FreeRTOS+Trace 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

- *

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * If this is zero (0), the code for recording Interrupt Service Routines is 

- * 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

-

-/******************************************************************************

- * INCLUDE_OBJECT_DELETE

- * 

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * This must be enabled (1) if tasks, queues or other 

- * 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.

- *****************************************************************************/

-#ifdef INCLUDE_OBJECT_DELETE

-#undef INCLUDE_OBJECT_DELETE

-#endif

-

-#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 0

-

-/******************************************************************************

- * CONFIGURATION RELATED TO BEHAVIOR

- *****************************************************************************/

-

-/******************************************************************************

- * TRACE_RECORDER_STORE_MODE

- *

- * Macro which should be defined as one of:

- * - 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 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

- * 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 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

- * using an on-chip debugger is not possible. In the Windows port, vTracePortEnd

- * 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 TRACE_RECORDER_STORE_MODE TRACE_STORE_MODE_RING_BUFFER

-

-/******************************************************************************

- * STOP_AFTER_N_EVENTS

- *

- * Macro which should be defined as an integer value, or not defined.

- * Default is -1

- *

- * STOP_AFTER_N_EVENTS is intended for tests of the ring buffer mode (when

- * RECORDER_STORE_MODE is STORE_MODE_RING_BUFFER). It stops the recording when

- * the specified number of events has been observed. This value can be larger

- * than the buffer size, to allow for test of the "wrapping around" that occurs

- * in ring buffer mode . A negative value (or no definition of this macro)

- * disables this feature.

- *****************************************************************************/

-#define STOP_AFTER_N_EVENTS -1

-

-/******************************************************************************

- * USE_IMPLICIT_IFE_RULES

- *

- * Macro which should be defined as either zero (0) or one (1). 

- * Default is 1.

- *

- * ### Instance Finish Events (IFE) ###

- *

- * 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. 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 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 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. We 

- * therefore allow for user-defined Explicit IFEs by calling

- *

- *     vTraceTaskInstanceIsFinished()

- *

- * right before the kernel call considered as IFE. This does not create an

- * 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, this may 

- * result in additional incorrect task instances.

- * This is solved by disabling the Implicit IFEs for the task, by adding

- * a call to

- * 

- *     vTraceTaskSkipDefaultInstanceFinishedEvents()

- * 

- * in the very beginning of that task. This allows you to combine Explicit IFEs

- * for some tasks with Implicit IFEs for the rest of the tasks, if

- * USE_IMPLICIT_IFE_RULES is 1.

- *

- * By setting USE_IMPLICIT_IFE_RULES to zero (0), the implicit IFEs are disabled

- * for all tasks. Tasks will then be considered to have a single instance only, 

- * covering all execution fragments, unless you define an explicit IFE in each

- * task by calling vTraceTaskInstanceIsFinished before the blocking call.

- *****************************************************************************/

-#define USE_IMPLICIT_IFE_RULES 1

-

-

-/******************************************************************************

- * USE_16BIT_OBJECT_HANDLES

- *

- * Macro which should be defined as either zero (0) or one (1).

- * Default is 0.

- *

- * If set to 0 (zero), the recorder uses 8-bit handles to identify kernel 

- * 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_ARM_CortexM

-

-#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.

- ******************************************************************************/

-#define USE_PRIMASK_CS 0

-

-/******************************************************************************

-* HEAP_SIZE_BELOW_16M

-*

-* 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 

-* below 16 MB (2^24 byte), and you can live with addresses truncated to the 

-* lower 24 bit. Otherwise set it to 0 to get the full 32-bit addresses.

-******************************************************************************/

-#define HEAP_SIZE_BELOW_16M 0

-

 #endif

 

diff --git a/FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/.settings/language.settings.xml b/FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/.settings/language.settings.xml
index 3654c79..284f061 100644
--- a/FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/.settings/language.settings.xml
+++ b/FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/.settings/language.settings.xml
@@ -4,7 +4,7 @@
 		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">

 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>

 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>

-			<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-2135181506" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">

+			<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-726532912" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">

 				<language-scope id="org.eclipse.cdt.core.gcc"/>

 				<language-scope id="org.eclipse.cdt.core.g++"/>

 			</provider>

diff --git a/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/settings/RTOSDemo.wsdt b/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/settings/RTOSDemo.wsdt
index 52332e2..df4ecfe 100644
--- a/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/settings/RTOSDemo.wsdt
+++ b/FreeRTOS/Demo/CORTEX_M4F_Infineon_XMC4000_IAR/settings/RTOSDemo.wsdt
@@ -25,7 +25,7 @@
     <Windows>

       

       

-    <Wnd0>

+    <Wnd2>

         <Tabs>

           <Tab>

             <Identity>TabID-29494-21985</Identity>

@@ -33,11 +33,11 @@
             <Factory>Workspace</Factory>

             <Session>

               

-            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode></NodeDict></Session>

+            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS_Source/port.c</ExpandedNode></NodeDict></Session>

           </Tab>

         </Tabs>

         

-      <SelectedTab>0</SelectedTab></Wnd0><Wnd1>

+      <SelectedTab>0</SelectedTab></Wnd2><Wnd3>

         <Tabs>

           <Tab>

             <Identity>TabID-28344-23030</Identity>

@@ -47,20 +47,20 @@
           </Tab>

         <Tab><Identity>TabID-19430-2343</Identity><TabName>Debug Log</TabName><Factory>Debug-Log</Factory><Session/></Tab></Tabs>

         

-      <SelectedTab>0</SelectedTab></Wnd1></Windows>

+      <SelectedTab>0</SelectedTab></Wnd3></Windows>

     <Editor>

       

       

       

       

-    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>64</YPos2><SelStart2>5909</SelStart2><SelEnd2>5909</SelEnd2></Tab><ActiveTab>0</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>62</YPos2><SelStart2>8654</SelStart2><SelEnd2>8654</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>

+    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>64</YPos2><SelStart2>5909</SelStart2><SelEnd2>5909</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>62</YPos2><SelStart2>8654</SelStart2><SelEnd2>8654</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\main_blinky.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>63</YPos2><SelStart2>0</SelStart2><SelEnd2>0</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CM4F\portmacro.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>132</YPos2><SelStart2>4892</SelStart2><SelEnd2>4892</SelEnd2></Tab><ActiveTab>3</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\tasks.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>1492</YPos2><SelStart2>53848</SelStart2><SelEnd2>53881</SelEnd2></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>

     <Positions>

       

       

       

       

       

-    <Top><Row0><Sizes><Toolbar-013BA698><key>iaridepm.enu1</key></Toolbar-013BA698></Sizes></Row0></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>389</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>232738</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>

+    <Top><Row0><Sizes><Toolbar-002A6A90><key>iaridepm.enu1</key></Toolbar-002A6A90></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>742</Bottom><Right>389</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>232738</sizeVertCX><sizeVertCY>756098</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>200</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>

   </Desktop>

 </Workspace>

 

diff --git a/FreeRTOS/Demo/Common/Minimal/TaskNotify.c b/FreeRTOS/Demo/Common/Minimal/TaskNotify.c
index b6a5ebf..2dd46fc 100644
--- a/FreeRTOS/Demo/Common/Minimal/TaskNotify.c
+++ b/FreeRTOS/Demo/Common/Minimal/TaskNotify.c
@@ -123,6 +123,9 @@
 /* The timer used to notify the task. */

 static TimerHandle_t xTimer = NULL;

 

+/* Used by the pseudo random number generating function. */

+static uint32_t ulNextRand = 0;

+

 /*-----------------------------------------------------------*/

 

 void vStartTaskNotifyTask( void  )

@@ -130,6 +133,9 @@
 	/* Create the task that performs some tests by itself, then loops around

 	being notified by both a software timer and an interrupt. */

 	xTaskCreate( prvNotifiedTask, "Notified", configMINIMAL_STACK_SIZE, NULL, notifyTASK_PRIORITY, &xTaskToNotify );

+

+	/* Pseudo seed the random number generator. */

+	ulNextRand = ( uint32_t ) prvRand;

 }

 /*-----------------------------------------------------------*/

 

@@ -349,9 +355,9 @@
 }

 /*-----------------------------------------------------------*/

 

-static void prvNotifyingTimer( TimerHandle_t xTimer )

+static void prvNotifyingTimer( TimerHandle_t xNotUsed )

 {

-	( void ) xTimer;

+	( void ) xNotUsed;

 

 	xTaskNotifyGive( xTaskToNotify );

 

@@ -494,9 +500,7 @@
 

 static UBaseType_t prvRand( void )

 {

-	static uint32_t ulNextRand = ( uint32_t ) prvRand;

-

-	const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL;

+const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL;

 

 	/* Utility function to generate a pseudo random number. */

 	ulNextRand = ( ulMultiplier * ulNextRand ) + ulIncrement;

diff --git a/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.info b/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.info
index 3aef363..c99b1ca 100644
--- a/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.info
+++ b/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.info
@@ -3,5 +3,5 @@
 TC_INSTALL=C:\devtools\KPIT\GNURXv14.01-ELF\rx-ELF\rx-ELF\
 GCC_STRING=4.7-GNURX_v14.01
 VERSION_IDE=
+E2STUDIO_VERSION=3.1.2.09
 ACTIVE_CONFIGURATION=HardwareDebug
-E2STUDIO_VERSION=3.0.1.09
diff --git a/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.settings/language.settings.xml b/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.settings/language.settings.xml
index f655393..48e715a 100644
--- a/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.settings/language.settings.xml
+++ b/FreeRTOS/Demo/RX600_RX64M_RSK_GCC_e2studio/.settings/language.settings.xml
@@ -3,11 +3,11 @@
 	<configuration id="%com.renesas.cdt.rx.hardwaredebug.win32.configuration.Id.606469687" name="HardwareDebug">

 		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">

 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>

-			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>

-			<provider class="com.renesas.cdt.common.build.spec.RXGCCBuiltinSpecsDetector" console="false" env-hash="982537399514949188" id="RXGCCBuiltinSpecsDetector" keep-relative-paths="false" name="Renesas GCCBuildinCompilerSettings" options-hash="1142094570" parameter="rx-elf-gcc -E -P -v -dD ${INPUTS} -mcpu=rx600 -mlittle-endian-data" prefer-non-shared="true">

+			<provider class="com.renesas.cdt.common.build.spec.RXGCCBuiltinSpecsDetector" console="false" env-hash="879191947459214602" id="RXGCCBuiltinSpecsDetector" keep-relative-paths="false" name="Renesas GCCBuildinCompilerSettings" options-hash="1142094570" parameter="rx-elf-gcc -E -P -v -dD ${INPUTS}" prefer-non-shared="true">

 				<language-scope id="org.eclipse.cdt.core.gcc"/>

 				<language-scope id="org.eclipse.cdt.core.g++"/>

 			</provider>

+			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>

 		</extension>

 	</configuration>

 </project>

diff --git a/FreeRTOS/Demo/WIN32-MSVC/main_full.c b/FreeRTOS/Demo/WIN32-MSVC/main_full.c
index 85691c2..5b1505c 100644
--- a/FreeRTOS/Demo/WIN32-MSVC/main_full.c
+++ b/FreeRTOS/Demo/WIN32-MSVC/main_full.c
@@ -396,6 +396,8 @@
 /* Called by vApplicationTickHook(), which is defined in main.c. */

 void vFullDemoTickHookFunction( void )

 {

+TaskHandle_t xTimerTask;

+

 	/* Call the periodic timer test, which tests the timer API functions that

 	can be called from an ISR. */

 	#if( configUSE_PREEMPTION != 0 )

@@ -420,6 +422,10 @@
 

 	/* Exercise using task notifications from an interrupt. */

 	xNotifyTaskFromISR();

+

+	/* For code coverage purposes. */

+	xTimerTask = xTimerGetTimerDaemonTaskHandle();

+	configASSERT( uxTaskPriorityGetFromISR( xTimerTask ) == configTIMER_TASK_PRIORITY );

 }

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/include/FreeRTOS.h b/FreeRTOS/Source/include/FreeRTOS.h
index 7fa5d5d..c57ecd4 100644
--- a/FreeRTOS/Source/include/FreeRTOS.h
+++ b/FreeRTOS/Source/include/FreeRTOS.h
@@ -727,6 +727,27 @@
 	#define configUSE_TASK_NOTIFICATIONS 1

 #endif

 

+#ifndef portTICK_TYPE_IS_ATOMIC

+	#define portTICK_TYPE_IS_ATOMIC 0

+#endif

+

+#if( portTICK_TYPE_IS_ATOMIC == 0 )

+	/* Either variables of tick type cannot be read atomically, or

+	portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when

+	the tick count is returned to the standard critical section macros. */

+	#define portTICK_TYPE_ENTER_CRITICAL() portENTER_CRITICAL()

+	#define portTICK_TYPE_EXIT_CRITICAL() portEXIT_CRITICAL()

+	#define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()

+	#define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) )

+#else

+	/* The tick type can be read atomically, so critical sections used when the

+	tick count is returned can be defined away. */

+	#define portTICK_TYPE_ENTER_CRITICAL()

+	#define portTICK_TYPE_EXIT_CRITICAL()

+	#define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR() 0

+	#define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x ) ( void ) x

+#endif

+

 /* Definitions to allow backward compatibility with FreeRTOS versions prior to

 V8 if desired. */

 #ifndef configENABLE_BACKWARD_COMPATIBILITY

diff --git a/FreeRTOS/Source/include/task.h b/FreeRTOS/Source/include/task.h
index 1ba9748..c77d422 100644
--- a/FreeRTOS/Source/include/task.h
+++ b/FreeRTOS/Source/include/task.h
@@ -657,6 +657,14 @@
 

 /**

  * task. h

+ * <pre>UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask );</pre>

+ *

+ * A version of uxTaskPriorityGet() that can be used from an ISR.

+ */

+UBaseType_t uxTaskPriorityGetFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;

+

+/**

+ * task. h

  * <pre>eTaskState eTaskGetState( TaskHandle_t xTask );</pre>

  *

  * INCLUDE_eTaskGetState must be defined as 1 for this function to be available.

diff --git a/FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/portmacro.h b/FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/portmacro.h
index ea8f4cc..d774697 100644
--- a/FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/portmacro.h
+++ b/FreeRTOS/Source/portable/CCS/ARM_Cortex-R4/portmacro.h
@@ -95,6 +95,10 @@
 #else

     typedef uint32_t TickType_t;

     #define portMAX_DELAY (TickType_t) 0xFFFFFFFFF

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 

 

diff --git a/FreeRTOS/Source/portable/GCC/ARM_CA9/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CA9/portmacro.h
index cb397eb..c7d3e48 100644
--- a/FreeRTOS/Source/portable/GCC/ARM_CA9/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/ARM_CA9/portmacro.h
@@ -96,6 +96,10 @@
 typedef uint32_t TickType_t;

 #define portMAX_DELAY ( TickType_t ) 0xffffffffUL

 

+/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+not need to be guarded with a critical section. */

+#define portTICK_TYPE_IS_ATOMIC 1

+

 /*-----------------------------------------------------------*/

 

 /* Hardware specifics. */

diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM0/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CM0/portmacro.h
index 263d141..d2761b5 100644
--- a/FreeRTOS/Source/portable/GCC/ARM_CM0/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/ARM_CM0/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h
index 24cdefc..507936b 100644
--- a/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/ARM_CM3/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/portmacro.h
index 15040be..d731dcf 100644
--- a/FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/ARM_CM3_MPU/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h b/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
index 41f1fbc..ae08cbf 100644
--- a/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/MicroBlaze/portmacro.h b/FreeRTOS/Source/portable/GCC/MicroBlaze/portmacro.h
index 2453cb4..4b0bfa7 100644
--- a/FreeRTOS/Source/portable/GCC/MicroBlaze/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/MicroBlaze/portmacro.h
@@ -99,6 +99,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/MicroBlazeV8/portmacro.h b/FreeRTOS/Source/portable/GCC/MicroBlazeV8/portmacro.h
index df14a0e..e1008c8 100644
--- a/FreeRTOS/Source/portable/GCC/MicroBlazeV8/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/MicroBlazeV8/portmacro.h
@@ -103,6 +103,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/NiosII/portmacro.h b/FreeRTOS/Source/portable/GCC/NiosII/portmacro.h
index 7f851d1..0f961e6 100644
--- a/FreeRTOS/Source/portable/GCC/NiosII/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/NiosII/portmacro.h
@@ -101,6 +101,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/RX100/portmacro.h b/FreeRTOS/Source/portable/GCC/RX100/portmacro.h
index 34abc39..caed167 100644
--- a/FreeRTOS/Source/portable/GCC/RX100/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/RX100/portmacro.h
@@ -101,6 +101,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/RX600/portmacro.h b/FreeRTOS/Source/portable/GCC/RX600/portmacro.h
index 0be80cc..361b952 100644
--- a/FreeRTOS/Source/portable/GCC/RX600/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/RX600/portmacro.h
@@ -101,6 +101,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/RX600v2/portmacro.h b/FreeRTOS/Source/portable/GCC/RX600v2/portmacro.h
index 0be80cc..361b952 100644
--- a/FreeRTOS/Source/portable/GCC/RX600v2/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/RX600v2/portmacro.h
@@ -101,6 +101,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/GCC/TriCore_1782/portmacro.h b/FreeRTOS/Source/portable/GCC/TriCore_1782/portmacro.h
index 353ac02..5f693eb 100644
--- a/FreeRTOS/Source/portable/GCC/TriCore_1782/portmacro.h
+++ b/FreeRTOS/Source/portable/GCC/TriCore_1782/portmacro.h
@@ -103,6 +103,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*---------------------------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portmacro.h b/FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portmacro.h
index b6d6ea5..be90f89 100644
--- a/FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/ARM_CA5_No_GIC/portmacro.h
@@ -101,6 +101,10 @@
 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

 

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

+

 	/*-----------------------------------------------------------*/

 

 	/* Hardware specifics. */

diff --git a/FreeRTOS/Source/portable/IAR/ARM_CA9/portmacro.h b/FreeRTOS/Source/portable/IAR/ARM_CA9/portmacro.h
index 5ef448e..8079e21 100644
--- a/FreeRTOS/Source/portable/IAR/ARM_CA9/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/ARM_CA9/portmacro.h
@@ -101,6 +101,10 @@
 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

 

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

+

 	/*-----------------------------------------------------------*/

 

 	/* Hardware specifics. */

diff --git a/FreeRTOS/Source/portable/IAR/ARM_CM0/portmacro.h b/FreeRTOS/Source/portable/IAR/ARM_CM0/portmacro.h
index c5eead3..a4ec1b7 100644
--- a/FreeRTOS/Source/portable/IAR/ARM_CM0/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/ARM_CM0/portmacro.h
@@ -1,5 +1,5 @@
 /*

-    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd. 

+    FreeRTOS V8.1.2 - Copyright (C) 2014 Real Time Engineers Ltd.

     All rights reserved

 

     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.

@@ -101,6 +101,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/IAR/ARM_CM3/portmacro.h b/FreeRTOS/Source/portable/IAR/ARM_CM3/portmacro.h
index 6b0a97d..828dd9c 100644
--- a/FreeRTOS/Source/portable/IAR/ARM_CM3/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/ARM_CM3/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/IAR/ARM_CM4F/portmacro.h b/FreeRTOS/Source/portable/IAR/ARM_CM4F/portmacro.h
index 3c3b76f..502c0e5 100644
--- a/FreeRTOS/Source/portable/IAR/ARM_CM4F/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/ARM_CM4F/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

@@ -110,11 +114,19 @@
 /*-----------------------------------------------------------*/

 

 /* Scheduler utilities. */

+#define portYIELD()											\

+{															\

+	/* Set a PendSV to request a context switch. */			\

+	portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;			\

+	__DSB();												\

+	__ISB();												\

+}

+

 #define portNVIC_INT_CTRL_REG		( * ( ( volatile uint32_t * ) 0xe000ed04 ) )

 #define portNVIC_PENDSVSET_BIT		( 1UL << 28UL )

-#define portYIELD()					vPortYield()

-#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) vPortYield()

+#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired != pdFALSE ) portYIELD()

 #define portYIELD_FROM_ISR( x ) portEND_SWITCHING_ISR( x )

+

 /*-----------------------------------------------------------*/

 

 /* Architecture specific optimisations. */

@@ -145,12 +157,19 @@
 extern void vPortEnterCritical( void );

 extern void vPortExitCritical( void );

 

-#define portDISABLE_INTERRUPTS()				ulPortRaiseBASEPRI()

-#define portENABLE_INTERRUPTS()					vPortSetBASEPRI( 0 )

+#define portDISABLE_INTERRUPTS()							\

+{															\

+	 /* Work around. */										\

+	__set_BASEPRI( configMAX_SYSCALL_INTERRUPT_PRIORITY );	\

+	__DSB();												\

+	__ISB();												\

+}

+

+#define portENABLE_INTERRUPTS()					__set_BASEPRI( 0 )

 #define portENTER_CRITICAL()					vPortEnterCritical()

 #define portEXIT_CRITICAL()						vPortExitCritical()

-#define portSET_INTERRUPT_MASK_FROM_ISR()		ulPortRaiseBASEPRI()

-#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)	vPortSetBASEPRI( x )

+#define portSET_INTERRUPT_MASK_FROM_ISR()		__get_BASEPRI(); portDISABLE_INTERRUPTS()

+#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x)	__set_BASEPRI( x )

 /*-----------------------------------------------------------*/

 

 /* Tickless idle/low power functionality. */

@@ -176,49 +195,6 @@
 /* portNOP() is not required by this port. */

 #define portNOP()

 

-#ifndef portFORCE_INLINE

-	#define portFORCE_INLINE _Pragma("inline=forced")

-#endif

-

-portFORCE_INLINE static void vPortYield( void )

-{

-	/* Set a PendSV to request a context switch. */

-	portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;

-

-	/* Barriers are normally not required but do ensure the code is completely

-	within the specified behaviour for the architecture. */

-	__DSB();

-	__ISB();

-}

-/*-----------------------------------------------------------*/

-

-portFORCE_INLINE static uint32_t ulPortRaiseBASEPRI( void )

-{

-uint32_t ulOriginalBASEPRI;

-

-	__asm volatile

-	(

-		"	mrs %0, basepri											\n" \

-		"	mov r1, %1												\n"	\

-		"	msr basepri, r1											\n" \

-		"	isb														\n" \

-		"	dsb														\n" \

-		:"=r" (ulOriginalBASEPRI) : "i" ( configMAX_SYSCALL_INTERRUPT_PRIORITY ) : "r1"

-	);

-

-	/* This return will not be reached but is necessary to prevent compiler

-	warnings. */

-	return ulOriginalBASEPRI;

-}

-/*-----------------------------------------------------------*/

-

-portFORCE_INLINE static void vPortSetBASEPRI( uint32_t ulNewMaskValue )

-{

-	__asm volatile

-	(

-		"	msr basepri, %0	" :: "r" ( ulNewMaskValue )

-	);

-}

 /*-----------------------------------------------------------*/

 

 /* Suppress warnings that are generated by the IAR tools, but cannot be fixed in

diff --git a/FreeRTOS/Source/portable/IAR/RX100/portmacro.h b/FreeRTOS/Source/portable/IAR/RX100/portmacro.h
index de93d76..18a79fd 100644
--- a/FreeRTOS/Source/portable/IAR/RX100/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/RX100/portmacro.h
@@ -107,6 +107,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/IAR/RX600/portmacro.h b/FreeRTOS/Source/portable/IAR/RX600/portmacro.h
index 85d5ef5..dd1a15a 100644
--- a/FreeRTOS/Source/portable/IAR/RX600/portmacro.h
+++ b/FreeRTOS/Source/portable/IAR/RX600/portmacro.h
@@ -104,6 +104,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/MPLAB/PIC32MX/portmacro.h b/FreeRTOS/Source/portable/MPLAB/PIC32MX/portmacro.h
index 4a9a12c..f6cc189 100644
--- a/FreeRTOS/Source/portable/MPLAB/PIC32MX/portmacro.h
+++ b/FreeRTOS/Source/portable/MPLAB/PIC32MX/portmacro.h
@@ -102,6 +102,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/MPLAB/PIC32MZ/portmacro.h b/FreeRTOS/Source/portable/MPLAB/PIC32MZ/portmacro.h
index bfd028f..601c1e4 100644
--- a/FreeRTOS/Source/portable/MPLAB/PIC32MZ/portmacro.h
+++ b/FreeRTOS/Source/portable/MPLAB/PIC32MZ/portmacro.h
@@ -102,6 +102,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/MSVC-MingW/portmacro.h b/FreeRTOS/Source/portable/MSVC-MingW/portmacro.h
index eaae2af..9de96d8 100644
--- a/FreeRTOS/Source/portable/MSVC-MingW/portmacro.h
+++ b/FreeRTOS/Source/portable/MSVC-MingW/portmacro.h
@@ -91,6 +91,10 @@
 #else

     typedef uint32_t TickType_t;

     #define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 

 /* Hardware specifics. */

diff --git a/FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.h b/FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.h
index 7e0ae12..cf88df0 100644
--- a/FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.h
+++ b/FreeRTOS/Source/portable/RVDS/ARM_CA9/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/RVDS/ARM_CM0/portmacro.h b/FreeRTOS/Source/portable/RVDS/ARM_CM0/portmacro.h
index 23dd302..791e333 100644
--- a/FreeRTOS/Source/portable/RVDS/ARM_CM0/portmacro.h
+++ b/FreeRTOS/Source/portable/RVDS/ARM_CM0/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/RVDS/ARM_CM3/portmacro.h b/FreeRTOS/Source/portable/RVDS/ARM_CM3/portmacro.h
index 7330239..a47010d 100644
--- a/FreeRTOS/Source/portable/RVDS/ARM_CM3/portmacro.h
+++ b/FreeRTOS/Source/portable/RVDS/ARM_CM3/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/RVDS/ARM_CM4F/portmacro.h b/FreeRTOS/Source/portable/RVDS/ARM_CM4F/portmacro.h
index 93a0555..2b29b72 100644
--- a/FreeRTOS/Source/portable/RVDS/ARM_CM4F/portmacro.h
+++ b/FreeRTOS/Source/portable/RVDS/ARM_CM4F/portmacro.h
@@ -100,6 +100,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
index 3dfb9d9..db17b43 100644
--- a/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX100/portmacro.h
@@ -104,6 +104,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
index 3fdbda8..a9ac54e 100644
--- a/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX200/portmacro.h
@@ -104,6 +104,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
index e401400..0cae978 100644
--- a/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX600/portmacro.h
@@ -104,6 +104,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/Renesas/RX600v2/portmacro.h b/FreeRTOS/Source/portable/Renesas/RX600v2/portmacro.h
index 1960ff1..fd180f0 100644
--- a/FreeRTOS/Source/portable/Renesas/RX600v2/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/RX600v2/portmacro.h
@@ -104,6 +104,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/Renesas/SH2A_FPU/portmacro.h b/FreeRTOS/Source/portable/Renesas/SH2A_FPU/portmacro.h
index de49388..39dfcb6 100644
--- a/FreeRTOS/Source/portable/Renesas/SH2A_FPU/portmacro.h
+++ b/FreeRTOS/Source/portable/Renesas/SH2A_FPU/portmacro.h
@@ -103,6 +103,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/portable/Tasking/ARM_CM4F/portmacro.h b/FreeRTOS/Source/portable/Tasking/ARM_CM4F/portmacro.h
index b98add8..02354e9 100644
--- a/FreeRTOS/Source/portable/Tasking/ARM_CM4F/portmacro.h
+++ b/FreeRTOS/Source/portable/Tasking/ARM_CM4F/portmacro.h
@@ -101,6 +101,10 @@
 #else

 	typedef uint32_t TickType_t;

 	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL

+

+	/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do

+	not need to be guarded with a critical section. */

+	#define portTICK_TYPE_IS_ATOMIC 1

 #endif

 /*-----------------------------------------------------------*/

 

diff --git a/FreeRTOS/Source/tasks.c b/FreeRTOS/Source/tasks.c
index 74edf06..99c005f 100644
--- a/FreeRTOS/Source/tasks.c
+++ b/FreeRTOS/Source/tasks.c
@@ -1080,8 +1080,8 @@
 

 		uxSavedInterruptState = portSET_INTERRUPT_MASK_FROM_ISR();

 		{

-			/* If null is passed in here then we are changing the

-			priority of the calling function. */

+			/* If null is passed in here then it is the priority of the calling

+			task that is being queried. */

 			pxTCB = prvGetTCBFromHandle( xTask );

 			uxReturn = pxTCB->uxPriority;

 		}

@@ -1743,11 +1743,11 @@
 TickType_t xTicks;

 

 	/* Critical section required if running on a 16 bit processor. */

-	taskENTER_CRITICAL();

+	portTICK_TYPE_ENTER_CRITICAL();

 	{

 		xTicks = xTickCount;

 	}

-	taskEXIT_CRITICAL();

+	portTICK_TYPE_EXIT_CRITICAL();

 

 	return xTicks;

 }

@@ -1774,11 +1774,11 @@
 	link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */

 	portASSERT_IF_INTERRUPT_PRIORITY_INVALID();

 

-	uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();

+	uxSavedInterruptStatus = portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR();

 	{

 		xReturn = xTickCount;

 	}

-	portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );

+	portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );

 

 	return xReturn;

 }

@@ -3510,7 +3510,7 @@
 

 		/* Pad the end of the string with spaces to ensure columns line up when

 		printed out. */

-		for( x = strlen( pcBuffer ); x < configMAX_TASK_NAME_LEN; x++ )

+		for( x = strlen( pcBuffer ); x < ( configMAX_TASK_NAME_LEN - 1 ); x++ )

 		{

 			pcBuffer[ x ] = ' ';

 		}

@@ -3578,22 +3578,22 @@
 			{

 				switch( pxTaskStatusArray[ x ].eCurrentState )

 				{

-				case eReady:		cStatus = tskREADY_CHAR;

-									break;

+					case eReady:		cStatus = tskREADY_CHAR;

+										break;

 

-				case eBlocked:		cStatus = tskBLOCKED_CHAR;

-									break;

+					case eBlocked:		cStatus = tskBLOCKED_CHAR;

+										break;

 

-				case eSuspended:	cStatus = tskSUSPENDED_CHAR;

-									break;

+					case eSuspended:	cStatus = tskSUSPENDED_CHAR;

+										break;

 

-				case eDeleted:		cStatus = tskDELETED_CHAR;

-									break;

+					case eDeleted:		cStatus = tskDELETED_CHAR;

+										break;

 

-				default:			/* Should not get here, but it is included

-									to prevent static checking errors. */

-									cStatus = 0x00;

-									break;

+					default:			/* Should not get here, but it is included

+										to prevent static checking errors. */

+										cStatus = 0x00;

+										break;

 				}

 

 				/* Write the task name to the string, padding with spaces so it

@@ -3685,13 +3685,13 @@
 					ulTotalRunTimeDiv100 has already been divided by 100. */

 					ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalTime;

 

+					/* Write the task name to the string, padding with

+					spaces so it can be printed in tabular form more

+					easily. */

+					pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName );

+

 					if( ulStatsAsPercentage > 0UL )

 					{

-						/* Write the task name to the string, padding with

-						spaces so it can be printed in tabular form more

-						easily. */

-						pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName );

-

 						#ifdef portLU_PRINTF_SPECIFIER_REQUIRED

 						{

 							sprintf( pcWriteBuffer, "\t\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );

@@ -3710,13 +3710,13 @@
 						consumed less than 1% of the total run time. */

 						#ifdef portLU_PRINTF_SPECIFIER_REQUIRED

 						{

-							sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );

+							sprintf( pcWriteBuffer, "\t\t%lu\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );

 						}

 						#else

 						{

 							/* sizeof( int ) == sizeof( long ) so a smaller

 							printf() library can be used. */

-							sprintf( pcWriteBuffer, "%s\t\t%u\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter );

+							sprintf( pcWriteBuffer, "\t\t%u\t\t<1%%\r\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter );

 						}

 						#endif

 					}

diff --git a/FreeRTOS/Source/timers.c b/FreeRTOS/Source/timers.c
index 080e4e8..73268aa 100644
--- a/FreeRTOS/Source/timers.c
+++ b/FreeRTOS/Source/timers.c
@@ -468,10 +468,10 @@
 

 				if( xTaskResumeAll() == pdFALSE )

 				{

-					/* Yield to wait for either a command to arrive, or the block time

-					to expire.  If a command arrived between the critical section being

-					exited and this yield then the yield will not cause the task

-					to block. */

+					/* Yield to wait for either a command to arrive, or the

+					block time to expire.  If a command arrived between the

+					critical section being exited and this yield then the yield

+					will not cause the task to block. */

 					portYIELD_WITHIN_API();

 				}

 				else

@@ -843,7 +843,7 @@
 		xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2;

 

 		xReturn = xQueueSendFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );

-		

+

 		tracePEND_FUNC_CALL_FROM_ISR( xFunctionToPend, pvParameter1, ulParameter2, xReturn );

 

 		return xReturn;

@@ -869,7 +869,7 @@
 		xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );

 

 		tracePEND_FUNC_CALL( xFunctionToPend, pvParameter1, ulParameter2, xReturn );

-		

+

 		return xReturn;

 	}