forked from epagris/FreeRTOS-Kernel
		
	Carry on working on SAMA5D3 demo:
- Add full interrupt nesting tests. - Add additional critical section/context switching tests. - Set interrupt priorities so everything can run at once without any software watchdog errors. - Re-enable interrupts in each IRQ handler. - Add in run-time stats.
This commit is contained in:
		
							parent
							
								
									146b46df87
								
							
						
					
					
						commit
						e9b5deb34a
					
				@ -77,11 +77,11 @@ extern WEAK void LowLevelInit( void )
 | 
			
		||||
    if ((uint32_t)LowLevelInit < DDR_CS_ADDR) /* Code not in external mem */ {
 | 
			
		||||
        PMC_SelectExt12M_Osc();
 | 
			
		||||
        PMC_SwitchMck2Main();
 | 
			
		||||
        PMC_SetPllA( CKGR_PLLAR_STUCKTO1 | 
 | 
			
		||||
        PMC_SetPllA( CKGR_PLLAR_STUCKTO1 |
 | 
			
		||||
                     CKGR_PLLAR_PLLACOUNT(0x3F) |
 | 
			
		||||
                     CKGR_PLLAR_OUTA(0x0) |
 | 
			
		||||
                     CKGR_PLLAR_MULA(65) | 
 | 
			
		||||
                     CKGR_PLLAR_DIVA(1), 
 | 
			
		||||
                     CKGR_PLLAR_MULA(65) |
 | 
			
		||||
                     CKGR_PLLAR_DIVA(1),
 | 
			
		||||
                     0x3u << 8);
 | 
			
		||||
        PMC_SetMckPllaDiv(PMC_MCKR_PLLADIV2_DIV2);
 | 
			
		||||
        PMC_SetMckPrescaler(PMC_MCKR_PRES_CLOCK);
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
/* ----------------------------------------------------------------------------
 | 
			
		||||
 *         SAM Software Package License 
 | 
			
		||||
 *         SAM Software Package License
 | 
			
		||||
 * ----------------------------------------------------------------------------
 | 
			
		||||
 * Copyright (c) 2013, Atmel Corporation
 | 
			
		||||
 *
 | 
			
		||||
@ -26,10 +26,10 @@
 | 
			
		||||
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ----------------------------------------------------------------------------
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/** \file */
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
/**
 | 
			
		||||
 * \addtogroup mmu MMU Initialization
 | 
			
		||||
 *
 | 
			
		||||
 * \section Usage
 | 
			
		||||
@ -38,7 +38,7 @@
 | 
			
		||||
 * translation table entries. TLBs avoid the requirement for every memory access to perform a translation table
 | 
			
		||||
 * lookup. The ARM architecture does not specify the exact form of the TLB structures for any design. In a
 | 
			
		||||
 * similar way to the requirements for caches, the architecture only defines certain principles for TLBs:
 | 
			
		||||
 * 
 | 
			
		||||
 *
 | 
			
		||||
 * The MMU supports memory accesses based on memory sections or pages:
 | 
			
		||||
 * Supersections Consist of 16MB blocks of memory. Support for Supersections is optional.
 | 
			
		||||
 * -# Sections Consist of 1MB blocks of memory.
 | 
			
		||||
@ -54,7 +54,7 @@
 | 
			
		||||
 * \ref mmu.c\n
 | 
			
		||||
 * \ref mmu.h \n
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/*------------------------------------------------------------------------------ */
 | 
			
		||||
/*         Headers                                                               */
 | 
			
		||||
/*------------------------------------------------------------------------------ */
 | 
			
		||||
@ -240,4 +240,4 @@ void MMU_Initialize(uint32_t *pTB)
 | 
			
		||||
    CP15_WriteTTB((unsigned int)pTB);
 | 
			
		||||
    /* Program the domain access register */
 | 
			
		||||
    CP15_WriteDomainAccessControl(0xC0000000); // only domain 15: access are not checked
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -477,8 +477,9 @@ void USBDCallbacks_Initialized( void )
 | 
			
		||||
{
 | 
			
		||||
	/* CDC specific re-implementation of weak callback function.  Invoked after
 | 
			
		||||
	the USB driver has been initialised. By default, configures the UDP/UDPHS
 | 
			
		||||
	interrupt. */
 | 
			
		||||
	IRQ_ConfigureIT( ID_UDPHS, 0, USBD_IrqHandler );
 | 
			
		||||
	interrupt.  The interrupt priority is set to the highest to ensure the
 | 
			
		||||
	interrupt nesting tests interfer as little as possible with the USB. */
 | 
			
		||||
	IRQ_ConfigureIT( ID_UDPHS, 7, USBD_IrqHandler );
 | 
			
		||||
	IRQ_EnableIT( ID_UDPHS );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -87,7 +87,7 @@
 | 
			
		||||
#define configUSE_TICK_HOOK						1
 | 
			
		||||
#define configMAX_PRIORITIES					( 5 )
 | 
			
		||||
#define configMINIMAL_STACK_SIZE				( ( unsigned short ) 160 )
 | 
			
		||||
#define configTOTAL_HEAP_SIZE					( ( size_t ) ( 38912 ) )
 | 
			
		||||
#define configTOTAL_HEAP_SIZE					( ( size_t ) ( 45 * 1024 ) )
 | 
			
		||||
#define configMAX_TASK_NAME_LEN					( 10 )
 | 
			
		||||
#define configUSE_TRACE_FACILITY				1
 | 
			
		||||
#define configUSE_16_BIT_TICKS					0
 | 
			
		||||
@ -96,32 +96,32 @@
 | 
			
		||||
#define configQUEUE_REGISTRY_SIZE				8
 | 
			
		||||
#define configCHECK_FOR_STACK_OVERFLOW			2
 | 
			
		||||
#define configUSE_RECURSIVE_MUTEXES				1
 | 
			
		||||
#define configUSE_MALLOC_FAILED_HOOK			0
 | 
			
		||||
#define configUSE_MALLOC_FAILED_HOOK			1
 | 
			
		||||
#define configUSE_APPLICATION_TASK_TAG			0
 | 
			
		||||
#define configUSE_COUNTING_SEMAPHORES			1
 | 
			
		||||
 | 
			
		||||
/* Co-routine definitions. */
 | 
			
		||||
#define configUSE_CO_ROUTINES 			0
 | 
			
		||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
 | 
			
		||||
#define configUSE_CO_ROUTINES 					0
 | 
			
		||||
#define configMAX_CO_ROUTINE_PRIORITIES 		( 2 )
 | 
			
		||||
 | 
			
		||||
/* Software timer definitions. */
 | 
			
		||||
#define configUSE_TIMERS				1
 | 
			
		||||
#define configTIMER_TASK_PRIORITY		( configMAX_PRIORITIES - 1 )
 | 
			
		||||
#define configTIMER_QUEUE_LENGTH		5
 | 
			
		||||
#define configTIMER_TASK_STACK_DEPTH	( configMINIMAL_STACK_SIZE * 2 )
 | 
			
		||||
#define configUSE_TIMERS						1
 | 
			
		||||
#define configTIMER_TASK_PRIORITY				( configMAX_PRIORITIES - 1 )
 | 
			
		||||
#define configTIMER_QUEUE_LENGTH				5
 | 
			
		||||
#define configTIMER_TASK_STACK_DEPTH			( configMINIMAL_STACK_SIZE * 2 )
 | 
			
		||||
 | 
			
		||||
/* Set the following definitions to 1 to include the API function, or zero
 | 
			
		||||
to exclude the API function. */
 | 
			
		||||
#define INCLUDE_vTaskPrioritySet			1
 | 
			
		||||
#define INCLUDE_uxTaskPriorityGet			1
 | 
			
		||||
#define INCLUDE_vTaskDelete					1
 | 
			
		||||
#define INCLUDE_vTaskCleanUpResources		1
 | 
			
		||||
#define INCLUDE_vTaskSuspend				1
 | 
			
		||||
#define INCLUDE_vTaskDelayUntil				1
 | 
			
		||||
#define INCLUDE_vTaskDelay					1
 | 
			
		||||
#define INCLUDE_eTaskGetState				1
 | 
			
		||||
#define INCLUDE_xEventGroupSetBitFromISR	1
 | 
			
		||||
#define INCLUDE_xTimerPendFunctionCall		1
 | 
			
		||||
#define INCLUDE_vTaskPrioritySet				1
 | 
			
		||||
#define INCLUDE_uxTaskPriorityGet				1
 | 
			
		||||
#define INCLUDE_vTaskDelete						1
 | 
			
		||||
#define INCLUDE_vTaskCleanUpResources			1
 | 
			
		||||
#define INCLUDE_vTaskSuspend					1
 | 
			
		||||
#define INCLUDE_vTaskDelayUntil					1
 | 
			
		||||
#define INCLUDE_vTaskDelay						1
 | 
			
		||||
#define INCLUDE_eTaskGetState					1
 | 
			
		||||
#define INCLUDE_xEventGroupSetBitFromISR		1
 | 
			
		||||
#define INCLUDE_xTimerPendFunctionCall			1
 | 
			
		||||
 | 
			
		||||
/* This demo makes use of one or more example stats formatting functions.  These
 | 
			
		||||
format the raw data provided by the uxTaskGetSystemState() function in to human
 | 
			
		||||
@ -140,13 +140,16 @@ FreeRTOS/Source/tasks.c for limitations. */
 | 
			
		||||
/* Prevent C code being included in assembly files when the IAR compiler is
 | 
			
		||||
used. */
 | 
			
		||||
#ifndef __IASMARM__
 | 
			
		||||
	/* Run time stats gathering definitions. */
 | 
			
		||||
	unsigned long ulGetRunTimeCounterValue( void );
 | 
			
		||||
	void vInitialiseRunTimeStats( void );
 | 
			
		||||
 | 
			
		||||
	#define configGENERATE_RUN_TIME_STATS	0
 | 
			
		||||
//_RB_	#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vInitialiseRunTimeStats()
 | 
			
		||||
//_RB_	#define portGET_RUN_TIME_COUNTER_VALUE() ulGetRunTimeCounterValue()
 | 
			
		||||
	/* The interrupt nesting test creates a 20KHz timer.  For convenience the
 | 
			
		||||
	20KHz timer is also used to generate the run time stats time base, removing
 | 
			
		||||
	the need to use a separate timer for that purpose.  The 20KHz timer
 | 
			
		||||
	increments ulHighFrequencyTimerCounts, which is used as the time base.
 | 
			
		||||
	Therefore the following macro is not implemented. */
 | 
			
		||||
	#define configGENERATE_RUN_TIME_STATS	1
 | 
			
		||||
	extern volatile uint32_t ulHighFrequencyTimerCounts;
 | 
			
		||||
	#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
 | 
			
		||||
	#define portGET_RUN_TIME_COUNTER_VALUE() ulHighFrequencyTimerCounts
 | 
			
		||||
 | 
			
		||||
	/* The size of the global output buffer that is available for use when there
 | 
			
		||||
	are multiple command interpreters running at once (for example, one on a UART
 | 
			
		||||
 | 
			
		||||
@ -88,6 +88,8 @@ static void System_Handler( void );
 | 
			
		||||
 | 
			
		||||
static void System_Handler( void )
 | 
			
		||||
{
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
 | 
			
		||||
	/* See the comments above the function prototype in this file. */
 | 
			
		||||
	FreeRTOS_Tick_Handler();
 | 
			
		||||
}
 | 
			
		||||
@ -113,7 +115,7 @@ void vConfigureTickInterrupt( void )
 | 
			
		||||
	/* Configure interrupt on PIT.  Note this is on the system interrupt, which
 | 
			
		||||
	is shared with other system peripherals, so System_Handler() must be
 | 
			
		||||
	installed in place of FreeRTOS_Tick_Handler() if other system handlers are
 | 
			
		||||
	required. */
 | 
			
		||||
	required.  The tick must be given the lowest priority (0 in the SAMA5 AIC) */
 | 
			
		||||
	IRQ_ConfigureIT( ID_PIT, 0, FreeRTOS_Tick_Handler );
 | 
			
		||||
	/* See commend directly above IRQ_ConfigureIT( ID_PIT, 0, System_Handler ); */
 | 
			
		||||
	IRQ_EnableIT( ID_PIT );
 | 
			
		||||
@ -129,5 +131,3 @@ void vConfigureTickInterrupt( void )
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -66,16 +66,17 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This file initialises three timers as follows:
 | 
			
		||||
 *
 | 
			
		||||
 * Timer 0 and Timer 1 provide the interrupts that are used with the IntQ
 | 
			
		||||
 * TC0 channels 0 and 1 provide the interrupts that are used with the IntQ
 | 
			
		||||
 * standard demo tasks, which test interrupt nesting and using queues from
 | 
			
		||||
 * interrupts.  Both these interrupts operate below the maximum syscall
 | 
			
		||||
 * interrupt priority.
 | 
			
		||||
 * interrupts.  As the interrupt is shared the nesting achieved is not as deep
 | 
			
		||||
 * as normal when this test is executed, but still worth while.
 | 
			
		||||
 *
 | 
			
		||||
 * Timer 2 is a much higher frequency timer that tests the nesting of interrupts
 | 
			
		||||
 * that execute above the maximum syscall interrupt priority.
 | 
			
		||||
 * TC2 channel 0 provides a much higher frequency timer that tests the nesting of
 | 
			
		||||
 * interrupts that execute above the maximum syscall interrupt priority.
 | 
			
		||||
 *
 | 
			
		||||
 * All the timers can nest with the tick interrupt - creating a maximum
 | 
			
		||||
 * interrupt nesting depth of 4.
 | 
			
		||||
 * interrupt nesting depth of 3 (normally 4, if the first two timers used
 | 
			
		||||
 * separate interrupts).
 | 
			
		||||
 *
 | 
			
		||||
 * For convenience, the high frequency timer is also used to provide the time
 | 
			
		||||
 * base for the run time stats.
 | 
			
		||||
@ -88,24 +89,35 @@
 | 
			
		||||
#include "IntQueueTimer.h"
 | 
			
		||||
#include "IntQueue.h"
 | 
			
		||||
 | 
			
		||||
/* Library includes. */
 | 
			
		||||
#include "board.h"
 | 
			
		||||
 | 
			
		||||
/* The frequencies at which the first two timers expire are slightly offset to
 | 
			
		||||
ensure they don't remain synchronised.  The frequency of the interrupt that
 | 
			
		||||
operates above the max syscall interrupt priority is 10 times faster so really
 | 
			
		||||
hammers the interrupt entry and exit code. */
 | 
			
		||||
ensure they don't remain synchronised.  The frequency of the highest priority
 | 
			
		||||
interrupt is 20 times faster so really hammers the interrupt entry and exit
 | 
			
		||||
code. */
 | 
			
		||||
#define tmrTIMERS_USED	3
 | 
			
		||||
#define tmrTIMER_0_FREQUENCY	( 2000UL )
 | 
			
		||||
#define tmrTIMER_1_FREQUENCY	( 2001UL )
 | 
			
		||||
#define tmrTIMER_1_FREQUENCY	( 2003UL )
 | 
			
		||||
#define tmrTIMER_2_FREQUENCY	( 20000UL )
 | 
			
		||||
 | 
			
		||||
/* The channels used in TC0 for generating the three interrupts. */
 | 
			
		||||
#define tmrTC0_CHANNEL_0		0 /* At tmrTIMER_0_FREQUENCY */
 | 
			
		||||
#define tmrTC0_CHANNEL_1		1 /* At tmrTIMER_1_FREQUENCY */
 | 
			
		||||
#define tmrTC1_CHANNEL_0		0 /* At tmrTIMER_2_FREQUENCY */
 | 
			
		||||
 | 
			
		||||
/* The bit within the RC_SR register that indicates an RC compare. */
 | 
			
		||||
#define tmrRC_COMPARE			( 1UL << 4UL )
 | 
			
		||||
 | 
			
		||||
/* The high frequency interrupt given the highest priority or all.  The priority
 | 
			
		||||
of the lower frequency timers must still be above the tick interrupt priority. */
 | 
			
		||||
#define tmrLOWER_PRIORITY		1
 | 
			
		||||
#define tmrHIGHER_PRIORITY		5
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The single interrupt service routines that is used to service all three
 | 
			
		||||
 * timers.
 | 
			
		||||
 */
 | 
			
		||||
static void prvTimerHandler( void *CallBackRef );
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
/* Handlers for the three timer channels. */
 | 
			
		||||
static void prvTC0_Handler( void );
 | 
			
		||||
static void prvTC1_Handler( void );
 | 
			
		||||
 | 
			
		||||
/* Used to provide a means of ensuring the intended interrupt nesting depth is
 | 
			
		||||
actually being reached. */
 | 
			
		||||
@ -120,11 +132,76 @@ volatile uint32_t ulHighFrequencyTimerCounts = 0;
 | 
			
		||||
 | 
			
		||||
void vInitialiseTimerForIntQueueTest( void )
 | 
			
		||||
{
 | 
			
		||||
const uint32_t ulDivider = 128UL, ulTCCLKS = 3UL;
 | 
			
		||||
 | 
			
		||||
	/* Enable the TC clocks. */
 | 
			
		||||
	PMC->PMC_PCER0 = 1 << ID_TC0;
 | 
			
		||||
	PMC->PMC_PCER0 = 1 << ID_TC1;
 | 
			
		||||
 | 
			
		||||
	/* Configure TC0 channel 0 for a tmrTIMER_0_FREQUENCY frequency and trigger
 | 
			
		||||
	on RC compare. */
 | 
			
		||||
	TC_Configure( TC0, tmrTC0_CHANNEL_0, ulTCCLKS | TC_CMR_CPCTRG );
 | 
			
		||||
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_RC = BOARD_MCK / ( tmrTIMER_0_FREQUENCY * ulDivider );
 | 
			
		||||
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_IER = TC_IER_CPCS;
 | 
			
		||||
 | 
			
		||||
	/* Configure TC0 channel 1 for a tmrTIMER_1_FREQUENCY frequency and trigger
 | 
			
		||||
	on RC compare. */
 | 
			
		||||
	TC_Configure( TC0, tmrTC0_CHANNEL_1, ulTCCLKS | TC_CMR_CPCTRG );
 | 
			
		||||
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_RC = BOARD_MCK / ( tmrTIMER_1_FREQUENCY * ulDivider );
 | 
			
		||||
	TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_IER = TC_IER_CPCS;
 | 
			
		||||
 | 
			
		||||
	/* Configure TC1 channel 0 tmrTIMER_2_FREQUENCY frequency and trigger on
 | 
			
		||||
	RC compare. */
 | 
			
		||||
	TC_Configure( TC1, tmrTC1_CHANNEL_0, ulTCCLKS | TC_CMR_CPCTRG );
 | 
			
		||||
	TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_RC = BOARD_MCK / ( tmrTIMER_2_FREQUENCY * ulDivider );
 | 
			
		||||
	TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_IER = TC_IER_CPCS;
 | 
			
		||||
 | 
			
		||||
	/* Enable interrupts and start the timers. */
 | 
			
		||||
	IRQ_ConfigureIT( ID_TC0, tmrLOWER_PRIORITY, prvTC0_Handler );
 | 
			
		||||
	IRQ_ConfigureIT( ID_TC1, tmrHIGHER_PRIORITY, prvTC1_Handler );
 | 
			
		||||
	IRQ_EnableIT( ID_TC0 );
 | 
			
		||||
	IRQ_EnableIT( ID_TC1 );
 | 
			
		||||
	TC_Start( TC0, tmrTC0_CHANNEL_0 );
 | 
			
		||||
	TC_Start( TC0, tmrTC0_CHANNEL_1 );
 | 
			
		||||
	TC_Start( TC1, tmrTC1_CHANNEL_0 );
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvTimerHandler( void *pvCallBackRef )
 | 
			
		||||
static void prvTC0_Handler( void )
 | 
			
		||||
{
 | 
			
		||||
	( void ) pvCallBackRef;
 | 
			
		||||
#warning Why can interrupts only be enabled inside the C function?
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
 | 
			
		||||
    /* Read will clear the status bit. */
 | 
			
		||||
	if( ( TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_SR & tmrRC_COMPARE ) != 0 )
 | 
			
		||||
	{
 | 
			
		||||
		portYIELD_FROM_ISR( xFirstTimerHandler() );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if( ( TC0->TC_CHANNEL[ tmrTC0_CHANNEL_1 ].TC_SR & tmrRC_COMPARE ) != 0 )
 | 
			
		||||
	{
 | 
			
		||||
		portYIELD_FROM_ISR( xSecondTimerHandler() );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
static void prvTC1_Handler( void )
 | 
			
		||||
{
 | 
			
		||||
volatile uint32_t ulDummy;
 | 
			
		||||
 | 
			
		||||
	__enable_interrupt();
 | 
			
		||||
 | 
			
		||||
    /* Dummy read to clear status bit. */
 | 
			
		||||
    ulDummy = TC1->TC_CHANNEL[ tmrTC1_CHANNEL_0 ].TC_SR;
 | 
			
		||||
 | 
			
		||||
	/* Latch the maximum nesting count. */
 | 
			
		||||
	if( ulPortInterruptNesting > ulMaxRecordedNesting )
 | 
			
		||||
	{
 | 
			
		||||
		ulMaxRecordedNesting = ulPortInterruptNesting;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Keep a count of the number of interrupts to use as a time base for the
 | 
			
		||||
	run-time stats. */
 | 
			
		||||
	ulHighFrequencyTimerCounts++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -233,7 +233,7 @@ void main_full( void )
 | 
			
		||||
	/* Start all the other standard demo/test tasks.  They have not particular
 | 
			
		||||
	functionality, but do demonstrate how to use the FreeRTOS API and test the
 | 
			
		||||
	kernel port. */
 | 
			
		||||
//_RB_	vStartInterruptQueueTasks();
 | 
			
		||||
	vStartInterruptQueueTasks();
 | 
			
		||||
	vStartDynamicPriorityTasks();
 | 
			
		||||
	vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
 | 
			
		||||
	vCreateBlockTimeTasks();
 | 
			
		||||
@ -251,7 +251,7 @@ void main_full( void )
 | 
			
		||||
	vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );
 | 
			
		||||
 | 
			
		||||
	/* Register the standard CLI commands. */
 | 
			
		||||
//	vRegisterSampleCLICommands();
 | 
			
		||||
	vRegisterSampleCLICommands();
 | 
			
		||||
 | 
			
		||||
	/* Create the register check tasks, as described at the top of this	file */
 | 
			
		||||
	xTaskCreate( prvRegTestTaskEntry1, "Reg1", configMINIMAL_STACK_SIZE, mainREG_TEST_TASK_1_PARAMETER, tskIDLE_PRIORITY, NULL );
 | 
			
		||||
@ -313,7 +313,7 @@ unsigned long ulErrorFound = pdFALSE;
 | 
			
		||||
		that they are all still running, and that none have detected an error. */
 | 
			
		||||
		if( xAreIntQueueTasksStillRunning() != pdTRUE )
 | 
			
		||||
		{
 | 
			
		||||
//_RB_			ulErrorFound = pdTRUE;
 | 
			
		||||
			ulErrorFound = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if( xAreMathsTaskStillRunning() != pdTRUE )
 | 
			
		||||
@ -455,9 +455,41 @@ static void prvRegTestTaskEntry2( void *pvParameters )
 | 
			
		||||
 | 
			
		||||
static void prvPseudoRandomiser( void *pvParameters )
 | 
			
		||||
{
 | 
			
		||||
const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL, ulMinDelay = ( 35 / portTICK_PERIOD_MS );
 | 
			
		||||
const uint32_t ulMultiplier = 0x015a4e35UL, ulIncrement = 1UL, ulMinDelay = ( 35 / portTICK_PERIOD_MS ), ulIBit = ( 1UL << 7UL );
 | 
			
		||||
volatile uint32_t ulNextRand = ( uint32_t ) &pvParameters, ulValue;
 | 
			
		||||
 | 
			
		||||
	/* A few minor port tests before entering the randomiser loop.
 | 
			
		||||
 | 
			
		||||
	At this point interrupts should be enabled. */
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == 0 );
 | 
			
		||||
 | 
			
		||||
	/* The CPU does not have an interrupt mask register, so critical sections
 | 
			
		||||
	have to globally disable interrupts.  Therefore entering a critical section
 | 
			
		||||
	should leave the I bit set. */
 | 
			
		||||
	taskENTER_CRITICAL();
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );
 | 
			
		||||
 | 
			
		||||
	/* Nest the critical sections. */
 | 
			
		||||
	taskENTER_CRITICAL();
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );
 | 
			
		||||
 | 
			
		||||
	/* After yielding the I bit should still be set.  Note yielding is possible
 | 
			
		||||
	in a critical section as each task maintains its own critical section
 | 
			
		||||
	nesting count so some tasks are in critical sections and others are not -
 | 
			
		||||
	however this is *not* something task code should do! */
 | 
			
		||||
	taskYIELD();
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );
 | 
			
		||||
 | 
			
		||||
	/* The I bit should not be cleared again until both critical sections have
 | 
			
		||||
	been exited. */
 | 
			
		||||
	taskEXIT_CRITICAL();
 | 
			
		||||
	taskYIELD();
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == ulIBit );
 | 
			
		||||
	taskEXIT_CRITICAL();
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == 0 );
 | 
			
		||||
	taskYIELD();
 | 
			
		||||
	configASSERT( ( __get_CPSR() & ulIBit ) == 0 );
 | 
			
		||||
 | 
			
		||||
	/* This task does nothing other than ensure there is a little bit of
 | 
			
		||||
	disruption in the scheduling pattern of the other tasks.  Normally this is
 | 
			
		||||
	done by generating interrupts at pseudo random times. */
 | 
			
		||||
 | 
			
		||||
@ -174,7 +174,7 @@
 | 
			
		||||
          <name>CCDefines</name>
 | 
			
		||||
          <state>sama5d3x</state>
 | 
			
		||||
          <state>sram</state>
 | 
			
		||||
          <state>TRACE_LEVEL=4</state>
 | 
			
		||||
          <state>TRACE_LEVEL=0</state>
 | 
			
		||||
        </option>
 | 
			
		||||
        <option>
 | 
			
		||||
          <name>CCPreprocFile</name>
 | 
			
		||||
@ -1169,6 +1169,9 @@
 | 
			
		||||
        <name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>
 | 
			
		||||
      </file>
 | 
			
		||||
    </group>
 | 
			
		||||
    <file>
 | 
			
		||||
      <name>$PROJ_DIR$\CDCCommandConsole.c</name>
 | 
			
		||||
    </file>
 | 
			
		||||
    <file>
 | 
			
		||||
      <name>$PROJ_DIR$\Full_Demo\IntQueueTimer.c</name>
 | 
			
		||||
    </file>
 | 
			
		||||
@ -1178,13 +1181,13 @@
 | 
			
		||||
    <file>
 | 
			
		||||
      <name>$PROJ_DIR$\Full_Demo\reg_test.S</name>
 | 
			
		||||
    </file>
 | 
			
		||||
    <file>
 | 
			
		||||
      <name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Demo\Common\FreeRTOS_Plus_CLI_Demos\Sample-CLI-commands.c</name>
 | 
			
		||||
    </file>
 | 
			
		||||
  </group>
 | 
			
		||||
  <file>
 | 
			
		||||
    <name>$PROJ_DIR$\atmel_main.c</name>
 | 
			
		||||
  </file>
 | 
			
		||||
  <file>
 | 
			
		||||
    <name>$PROJ_DIR$\CDCCommandConsole.c</name>
 | 
			
		||||
  </file>
 | 
			
		||||
  <file>
 | 
			
		||||
    <name>$PROJ_DIR$\cstartup_with_FreeRTOS_vectors.s</name>
 | 
			
		||||
  </file>
 | 
			
		||||
 | 
			
		||||
@ -140,10 +140,14 @@ label:
 | 
			
		||||
        MSR     cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT      ; Change the mode
 | 
			
		||||
        LDR     sp, =SFE(IRQ_STACK)
 | 
			
		||||
 | 
			
		||||
        /* Set up the SYS stack pointer. */
 | 
			
		||||
        MSR     cpsr_c, #ARM_MODE_SYS | F_BIT              ; Change the mode
 | 
			
		||||
        /* Set up the SVC stack pointer.  This allows the stack used by main()
 | 
			
		||||
		to get reused by interrupts (which switch from IRQ mode to SVC mode). */
 | 
			
		||||
        MSR     cpsr_c, #ARM_MODE_SVC | F_BIT              ; Change the mode
 | 
			
		||||
        LDR     sp, =SFE(CSTACK)
 | 
			
		||||
 | 
			
		||||
		/* No need to set up stacks for any other mode as that stack used by
 | 
			
		||||
		tasks is allocated by FreeRTOS. */
 | 
			
		||||
 | 
			
		||||
        /* Branch to main() */
 | 
			
		||||
        LDR     r0, =?main
 | 
			
		||||
        BLX     r0
 | 
			
		||||
 | 
			
		||||
@ -126,8 +126,7 @@ void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );
 | 
			
		||||
void vApplicationTickHook( void );
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#warning Try re-using the main stack.
 | 
			
		||||
#warning check stack sizes in linker script.
 | 
			
		||||
int main( void )
 | 
			
		||||
{
 | 
			
		||||
	/* Configure the hardware ready to run the demo. */
 | 
			
		||||
 | 
			
		||||
@ -8,11 +8,11 @@
 | 
			
		||||
        
 | 
			
		||||
      <ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>
 | 
			
		||||
      <Build>
 | 
			
		||||
        <ColumnWidth0>20</ColumnWidth0>
 | 
			
		||||
        <ColumnWidth1>1216</ColumnWidth1>
 | 
			
		||||
        <ColumnWidth2>324</ColumnWidth2>
 | 
			
		||||
        <ColumnWidth3>81</ColumnWidth3>
 | 
			
		||||
      </Build>
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
      <ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1216</ColumnWidth1><ColumnWidth2>324</ColumnWidth2><ColumnWidth3>81</ColumnWidth3></Build>
 | 
			
		||||
      <Workspace>
 | 
			
		||||
        <ColumnWidths>
 | 
			
		||||
          
 | 
			
		||||
@ -30,11 +30,11 @@
 | 
			
		||||
          
 | 
			
		||||
          
 | 
			
		||||
        <item>500</item><item>20</item></col-widths>
 | 
			
		||||
        <DisasmHistory><item>0x00302750</item></DisasmHistory>
 | 
			
		||||
        <DisasmHistory><item>0x0030211C</item><item>0x00302750</item></DisasmHistory>
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
      <PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><ShowCodeCoverage>1</ShowCodeCoverage><ShowInstrProfiling>1</ShowInstrProfiling></Disassembly>
 | 
			
		||||
    <Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><expressions><item></item></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>207</item><item>150</item><item>100</item><item>294</item></col-widths><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></WATCH_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints><Find-in-Files><ColumnWidth0>497</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>746</ColumnWidth2><ColumnWidth3>331</ColumnWidth3></Find-in-Files></Static>
 | 
			
		||||
    <Register><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></Register><WATCH_1><expressions><item></item></expressions><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>207</item><item>150</item><item>100</item><item>294</item></col-widths><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows></WATCH_1><CallStack><PreferedWindows><Position>1</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Frame</item><item>_I0</item></col-names><col-widths><item>400</item><item>20</item></col-widths></CallStack><Breakpoints><PreferedWindows><Position>3</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Breakpoint</item><item>_I0</item></col-names><col-widths><item>500</item><item>35</item></col-widths></Breakpoints><Find-in-Files><ColumnWidth0>497</ColumnWidth0><ColumnWidth1>82</ColumnWidth1><ColumnWidth2>746</ColumnWidth2><ColumnWidth3>331</ColumnWidth3></Find-in-Files><QuickWatch><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><col-names><item>Expression</item><item>Location</item><item>Type</item><item>Value</item></col-names><col-widths><item>100</item><item>150</item><item>100</item><item>100</item></col-widths><QWatchHistory><item>TC0</item><item>TC0->TC_CHANNEL[ tmrTC0_CHANNEL_0 ].TC_RC</item></QWatchHistory></QuickWatch></Static>
 | 
			
		||||
    <Windows>
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
@ -63,7 +63,7 @@
 | 
			
		||||
            <Factory>Workspace</Factory>
 | 
			
		||||
            <Session>
 | 
			
		||||
              
 | 
			
		||||
            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable</ExpandedNode></NodeDict></Session>
 | 
			
		||||
            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/Full Demo</ExpandedNode></NodeDict></Session>
 | 
			
		||||
          </Tab>
 | 
			
		||||
        </Tabs>
 | 
			
		||||
        
 | 
			
		||||
@ -73,14 +73,14 @@
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\CDCCommandConsole.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>397</YPos2><SelStart2>14920</SelStart2><SelEnd2>14920</SelEnd2></Tab><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>110</YPos2><SelStart2>6002</SelStart2><SelEnd2>6002</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\port.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>288</YPos2><SelStart2>12369</SelStart2><SelEnd2>12369</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$\Full_Demo\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>370</YPos2><SelStart2>15067</SelStart2><SelEnd2>15067</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\usb\common\core\USBDescriptors.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>165</YPos2><SelStart2>6026</SelStart2><SelEnd2>6026</SelEnd2></Tab><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>109</YPos2><SelStart2>6007</SelStart2><SelEnd2>6007</SelEnd2></Tab><ActiveTab>2</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\CDCCommandConsole.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>309</YPos2><SelStart2>11984</SelStart2><SelEnd2>11984</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\Full_Demo\IntQueueTimer.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>162</YPos2><SelStart2>8098</SelStart2><SelEnd2>8116</SelEnd2></Tab><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>1561</YPos2><SelStart2>55424</SelStart2><SelEnd2>55424</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portmacro.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>107</YPos2><SelStart2>5219</SelStart2><SelEnd2>5219</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-00C8A108><key>iaridepm.enu1</key></Toolbar-00C8A108></Sizes></Row0><Row1><Sizes><Toolbar-14AD33B8><key>debuggergui.enu1</key></Toolbar-14AD33B8></Sizes></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>718</Bottom><Right>332</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>198810</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd2></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>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
 | 
			
		||||
    <Top><Row0><Sizes><Toolbar-0104A108><key>iaridepm.enu1</key></Toolbar-0104A108></Sizes></Row0><Row1><Sizes><Toolbar-16133258><key>debuggergui.enu1</key></Toolbar-16133258></Sizes></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>718</Bottom><Right>332</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>119048</sizeHorzCX><sizeHorzCY>203252</sizeHorzCY><sizeVertCX>198810</sizeVertCX><sizeVertCY>731707</sizeVertCY></Rect></Wnd2></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>203252</sizeHorzCY><sizeVertCX>119048</sizeVertCX><sizeVertCY>203252</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
 | 
			
		||||
  </Desktop>
 | 
			
		||||
</Project>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ Watch0=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
 | 
			
		||||
Watch1=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
 | 
			
		||||
CStepIntDis=_ 0
 | 
			
		||||
[DebugChecksum]
 | 
			
		||||
Checksum=1771823120
 | 
			
		||||
Checksum=1546321988
 | 
			
		||||
[Exceptions]
 | 
			
		||||
StopOnUncaught=_ 0
 | 
			
		||||
StopOnThrow=_ 0
 | 
			
		||||
@ -23,7 +23,7 @@ ShowArgs=0
 | 
			
		||||
[Disassembly]
 | 
			
		||||
MixedMode=1
 | 
			
		||||
[watch_formats]
 | 
			
		||||
Fmt0={W}1:xTickCount	4	0
 | 
			
		||||
Fmt0={W}1:xTickCount	3	0
 | 
			
		||||
[Log file]
 | 
			
		||||
LoggingEnabled=_ 0
 | 
			
		||||
LogFile=_ ""
 | 
			
		||||
@ -42,7 +42,8 @@ Exclusions=
 | 
			
		||||
[Disassemble mode]
 | 
			
		||||
mode=0
 | 
			
		||||
[Breakpoints2]
 | 
			
		||||
Count=0
 | 
			
		||||
Bp0=_ 1 "EMUL_CODE" "{$PROJ_DIR$\main.c}.214.2" 0 0 1 "" 0 "" 0
 | 
			
		||||
Count=1
 | 
			
		||||
[Aliases]
 | 
			
		||||
Count=0
 | 
			
		||||
SuppressDialog=0
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,7 @@
 | 
			
		||||
            <Factory>Workspace</Factory>
 | 
			
		||||
            <Session>
 | 
			
		||||
              
 | 
			
		||||
            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/event_groups.c</ExpandedNode></NodeDict></Session>
 | 
			
		||||
            <NodeDict><ExpandedNode>RTOSDemo</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source</ExpandedNode><ExpandedNode>RTOSDemo/FreeRTOS Source/portable</ExpandedNode><ExpandedNode>RTOSDemo/Full Demo</ExpandedNode></NodeDict></Session>
 | 
			
		||||
          </Tab>
 | 
			
		||||
        </Tabs>
 | 
			
		||||
        
 | 
			
		||||
@ -64,14 +64,14 @@
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
    <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\CDCCommandConsole.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>397</YPos2><SelStart2>14920</SelStart2><SelEnd2>14920</SelEnd2></Tab><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>110</YPos2><SelStart2>6002</SelStart2><SelEnd2>6002</SelEnd2></Tab><ActiveTab>1</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\port.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>288</YPos2><SelStart2>12369</SelStart2><SelEnd2>12369</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$\Full_Demo\main_full.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>370</YPos2><SelStart2>15067</SelStart2><SelEnd2>15067</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\AtmelFiles\usb\common\core\USBDescriptors.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>165</YPos2><SelStart2>6026</SelStart2><SelEnd2>6026</SelEnd2></Tab><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>109</YPos2><SelStart2>6007</SelStart2><SelEnd2>6007</SelEnd2></Tab><ActiveTab>2</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\CDCCommandConsole.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>309</YPos2><SelStart2>11984</SelStart2><SelEnd2>11984</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\Full_Demo\IntQueueTimer.c</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>162</YPos2><SelStart2>8098</SelStart2><SelEnd2>8116</SelEnd2></Tab><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>1561</YPos2><SelStart2>55424</SelStart2><SelEnd2>55424</SelEnd2></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\..\..\Source\portable\IAR\ARM_CA5_No_GIC\portmacro.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>0</SelStart><SelEnd>0</SelEnd><XPos2>0</XPos2><YPos2>107</YPos2><SelStart2>5219</SelStart2><SelEnd2>5219</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-00C8A108><key>iaridepm.enu1</key></Toolbar-00C8A108></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>698</Bottom><Right>352</Right><x>-2</x><y>-2</y><xscreen>190</xscreen><yscreen>170</yscreen><sizeHorzCX>113095</sizeHorzCX><sizeHorzCY>172764</sizeHorzCY><sizeVertCX>210714</sizeVertCX><sizeVertCY>711382</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>242</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>244</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>247967</sizeHorzCY><sizeVertCX>113095</sizeVertCX><sizeVertCY>172764</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
 | 
			
		||||
    <Top><Row0><Sizes><Toolbar-0104A108><key>iaridepm.enu1</key></Toolbar-0104A108></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>668</Bottom><Right>352</Right><x>-2</x><y>-2</y><xscreen>190</xscreen><yscreen>170</yscreen><sizeHorzCX>113095</sizeHorzCX><sizeHorzCY>172764</sizeHorzCY><sizeVertCX>210714</sizeVertCX><sizeVertCY>680894</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>272</Bottom><Right>1682</Right><x>-2</x><y>-2</y><xscreen>1684</xscreen><yscreen>274</yscreen><sizeHorzCX>1002381</sizeHorzCX><sizeHorzCY>278455</sizeHorzCY><sizeVertCX>113095</sizeVertCX><sizeVertCY>172764</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
 | 
			
		||||
  </Desktop>
 | 
			
		||||
</Workspace>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,2 +1,2 @@
 | 
			
		||||
[MainWindow]
 | 
			
		||||
WindowPlacement=_ 67 68 1327 817 3
 | 
			
		||||
WindowPlacement=_ 68 69 855 818 3
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user