mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-23 15:01:56 -04:00
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
|
@ -477,8 +477,9 @@ void USBDCallbacks_Initialized( void )
|
||||||
{
|
{
|
||||||
/* CDC specific re-implementation of weak callback function. Invoked after
|
/* CDC specific re-implementation of weak callback function. Invoked after
|
||||||
the USB driver has been initialised. By default, configures the UDP/UDPHS
|
the USB driver has been initialised. By default, configures the UDP/UDPHS
|
||||||
interrupt. */
|
interrupt. The interrupt priority is set to the highest to ensure the
|
||||||
IRQ_ConfigureIT( ID_UDPHS, 0, USBD_IrqHandler );
|
interrupt nesting tests interfer as little as possible with the USB. */
|
||||||
|
IRQ_ConfigureIT( ID_UDPHS, 7, USBD_IrqHandler );
|
||||||
IRQ_EnableIT( ID_UDPHS );
|
IRQ_EnableIT( ID_UDPHS );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
#define configUSE_TICK_HOOK 1
|
#define configUSE_TICK_HOOK 1
|
||||||
#define configMAX_PRIORITIES ( 5 )
|
#define configMAX_PRIORITIES ( 5 )
|
||||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 160 )
|
#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 configMAX_TASK_NAME_LEN ( 10 )
|
||||||
#define configUSE_TRACE_FACILITY 1
|
#define configUSE_TRACE_FACILITY 1
|
||||||
#define configUSE_16_BIT_TICKS 0
|
#define configUSE_16_BIT_TICKS 0
|
||||||
|
@ -96,32 +96,32 @@
|
||||||
#define configQUEUE_REGISTRY_SIZE 8
|
#define configQUEUE_REGISTRY_SIZE 8
|
||||||
#define configCHECK_FOR_STACK_OVERFLOW 2
|
#define configCHECK_FOR_STACK_OVERFLOW 2
|
||||||
#define configUSE_RECURSIVE_MUTEXES 1
|
#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_APPLICATION_TASK_TAG 0
|
||||||
#define configUSE_COUNTING_SEMAPHORES 1
|
#define configUSE_COUNTING_SEMAPHORES 1
|
||||||
|
|
||||||
/* Co-routine definitions. */
|
/* Co-routine definitions. */
|
||||||
#define configUSE_CO_ROUTINES 0
|
#define configUSE_CO_ROUTINES 0
|
||||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||||
|
|
||||||
/* Software timer definitions. */
|
/* Software timer definitions. */
|
||||||
#define configUSE_TIMERS 1
|
#define configUSE_TIMERS 1
|
||||||
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
|
||||||
#define configTIMER_QUEUE_LENGTH 5
|
#define configTIMER_QUEUE_LENGTH 5
|
||||||
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
|
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 )
|
||||||
|
|
||||||
/* Set the following definitions to 1 to include the API function, or zero
|
/* Set the following definitions to 1 to include the API function, or zero
|
||||||
to exclude the API function. */
|
to exclude the API function. */
|
||||||
#define INCLUDE_vTaskPrioritySet 1
|
#define INCLUDE_vTaskPrioritySet 1
|
||||||
#define INCLUDE_uxTaskPriorityGet 1
|
#define INCLUDE_uxTaskPriorityGet 1
|
||||||
#define INCLUDE_vTaskDelete 1
|
#define INCLUDE_vTaskDelete 1
|
||||||
#define INCLUDE_vTaskCleanUpResources 1
|
#define INCLUDE_vTaskCleanUpResources 1
|
||||||
#define INCLUDE_vTaskSuspend 1
|
#define INCLUDE_vTaskSuspend 1
|
||||||
#define INCLUDE_vTaskDelayUntil 1
|
#define INCLUDE_vTaskDelayUntil 1
|
||||||
#define INCLUDE_vTaskDelay 1
|
#define INCLUDE_vTaskDelay 1
|
||||||
#define INCLUDE_eTaskGetState 1
|
#define INCLUDE_eTaskGetState 1
|
||||||
#define INCLUDE_xEventGroupSetBitFromISR 1
|
#define INCLUDE_xEventGroupSetBitFromISR 1
|
||||||
#define INCLUDE_xTimerPendFunctionCall 1
|
#define INCLUDE_xTimerPendFunctionCall 1
|
||||||
|
|
||||||
/* This demo makes use of one or more example stats formatting functions. These
|
/* 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
|
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
|
/* Prevent C code being included in assembly files when the IAR compiler is
|
||||||
used. */
|
used. */
|
||||||
#ifndef __IASMARM__
|
#ifndef __IASMARM__
|
||||||
/* Run time stats gathering definitions. */
|
|
||||||
unsigned long ulGetRunTimeCounterValue( void );
|
|
||||||
void vInitialiseRunTimeStats( void );
|
|
||||||
|
|
||||||
#define configGENERATE_RUN_TIME_STATS 0
|
/* The interrupt nesting test creates a 20KHz timer. For convenience the
|
||||||
//_RB_ #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() vInitialiseRunTimeStats()
|
20KHz timer is also used to generate the run time stats time base, removing
|
||||||
//_RB_ #define portGET_RUN_TIME_COUNTER_VALUE() ulGetRunTimeCounterValue()
|
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
|
/* 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
|
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 )
|
static void System_Handler( void )
|
||||||
{
|
{
|
||||||
|
__enable_interrupt();
|
||||||
|
|
||||||
/* See the comments above the function prototype in this file. */
|
/* See the comments above the function prototype in this file. */
|
||||||
FreeRTOS_Tick_Handler();
|
FreeRTOS_Tick_Handler();
|
||||||
}
|
}
|
||||||
|
@ -113,7 +115,7 @@ void vConfigureTickInterrupt( void )
|
||||||
/* Configure interrupt on PIT. Note this is on the system interrupt, which
|
/* Configure interrupt on PIT. Note this is on the system interrupt, which
|
||||||
is shared with other system peripherals, so System_Handler() must be
|
is shared with other system peripherals, so System_Handler() must be
|
||||||
installed in place of FreeRTOS_Tick_Handler() if other system handlers are
|
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 );
|
IRQ_ConfigureIT( ID_PIT, 0, FreeRTOS_Tick_Handler );
|
||||||
/* See commend directly above IRQ_ConfigureIT( ID_PIT, 0, System_Handler ); */
|
/* See commend directly above IRQ_ConfigureIT( ID_PIT, 0, System_Handler ); */
|
||||||
IRQ_EnableIT( ID_PIT );
|
IRQ_EnableIT( ID_PIT );
|
||||||
|
@ -129,5 +131,3 @@ void vConfigureTickInterrupt( void )
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -66,16 +66,17 @@
|
||||||
/*
|
/*
|
||||||
* This file initialises three timers as follows:
|
* 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
|
* standard demo tasks, which test interrupt nesting and using queues from
|
||||||
* interrupts. Both these interrupts operate below the maximum syscall
|
* interrupts. As the interrupt is shared the nesting achieved is not as deep
|
||||||
* interrupt priority.
|
* 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
|
* TC2 channel 0 provides a much higher frequency timer that tests the nesting of
|
||||||
* that execute above the maximum syscall interrupt priority.
|
* interrupts that execute above the maximum syscall interrupt priority.
|
||||||
*
|
*
|
||||||
* All the timers can nest with the tick interrupt - creating a maximum
|
* 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
|
* For convenience, the high frequency timer is also used to provide the time
|
||||||
* base for the run time stats.
|
* base for the run time stats.
|
||||||
|
@ -88,24 +89,35 @@
|
||||||
#include "IntQueueTimer.h"
|
#include "IntQueueTimer.h"
|
||||||
#include "IntQueue.h"
|
#include "IntQueue.h"
|
||||||
|
|
||||||
|
/* Library includes. */
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
/* The frequencies at which the first two timers expire are slightly offset to
|
/* 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
|
ensure they don't remain synchronised. The frequency of the highest priority
|
||||||
operates above the max syscall interrupt priority is 10 times faster so really
|
interrupt is 20 times faster so really hammers the interrupt entry and exit
|
||||||
hammers the interrupt entry and exit code. */
|
code. */
|
||||||
#define tmrTIMERS_USED 3
|
#define tmrTIMERS_USED 3
|
||||||
#define tmrTIMER_0_FREQUENCY ( 2000UL )
|
#define tmrTIMER_0_FREQUENCY ( 2000UL )
|
||||||
#define tmrTIMER_1_FREQUENCY ( 2001UL )
|
#define tmrTIMER_1_FREQUENCY ( 2003UL )
|
||||||
#define tmrTIMER_2_FREQUENCY ( 20000UL )
|
#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
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/* Handlers for the three timer channels. */
|
||||||
* The single interrupt service routines that is used to service all three
|
static void prvTC0_Handler( void );
|
||||||
* timers.
|
static void prvTC1_Handler( void );
|
||||||
*/
|
|
||||||
static void prvTimerHandler( void *CallBackRef );
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* Used to provide a means of ensuring the intended interrupt nesting depth is
|
/* Used to provide a means of ensuring the intended interrupt nesting depth is
|
||||||
actually being reached. */
|
actually being reached. */
|
||||||
|
@ -120,11 +132,76 @@ volatile uint32_t ulHighFrequencyTimerCounts = 0;
|
||||||
|
|
||||||
void vInitialiseTimerForIntQueueTest( void )
|
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
|
/* 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
|
functionality, but do demonstrate how to use the FreeRTOS API and test the
|
||||||
kernel port. */
|
kernel port. */
|
||||||
//_RB_ vStartInterruptQueueTasks();
|
vStartInterruptQueueTasks();
|
||||||
vStartDynamicPriorityTasks();
|
vStartDynamicPriorityTasks();
|
||||||
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
||||||
vCreateBlockTimeTasks();
|
vCreateBlockTimeTasks();
|
||||||
|
@ -251,7 +251,7 @@ void main_full( void )
|
||||||
vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );
|
vUARTCommandConsoleStart( mainUART_COMMAND_CONSOLE_STACK_SIZE, mainUART_COMMAND_CONSOLE_TASK_PRIORITY );
|
||||||
|
|
||||||
/* Register the standard CLI commands. */
|
/* Register the standard CLI commands. */
|
||||||
// vRegisterSampleCLICommands();
|
vRegisterSampleCLICommands();
|
||||||
|
|
||||||
/* Create the register check tasks, as described at the top of this file */
|
/* 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 );
|
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. */
|
that they are all still running, and that none have detected an error. */
|
||||||
if( xAreIntQueueTasksStillRunning() != pdTRUE )
|
if( xAreIntQueueTasksStillRunning() != pdTRUE )
|
||||||
{
|
{
|
||||||
//_RB_ ulErrorFound = pdTRUE;
|
ulErrorFound = pdTRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( xAreMathsTaskStillRunning() != pdTRUE )
|
if( xAreMathsTaskStillRunning() != pdTRUE )
|
||||||
|
@ -455,9 +455,41 @@ static void prvRegTestTaskEntry2( void *pvParameters )
|
||||||
|
|
||||||
static void prvPseudoRandomiser( 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;
|
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
|
/* 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
|
disruption in the scheduling pattern of the other tasks. Normally this is
|
||||||
done by generating interrupts at pseudo random times. */
|
done by generating interrupts at pseudo random times. */
|
||||||
|
|
|
@ -174,7 +174,7 @@
|
||||||
<name>CCDefines</name>
|
<name>CCDefines</name>
|
||||||
<state>sama5d3x</state>
|
<state>sama5d3x</state>
|
||||||
<state>sram</state>
|
<state>sram</state>
|
||||||
<state>TRACE_LEVEL=4</state>
|
<state>TRACE_LEVEL=0</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCPreprocFile</name>
|
<name>CCPreprocFile</name>
|
||||||
|
@ -1169,6 +1169,9 @@
|
||||||
<name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>
|
<name>$PROJ_DIR$\..\Common\Minimal\TimerDemo.c</name>
|
||||||
</file>
|
</file>
|
||||||
</group>
|
</group>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\CDCCommandConsole.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\Full_Demo\IntQueueTimer.c</name>
|
<name>$PROJ_DIR$\Full_Demo\IntQueueTimer.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
@ -1178,13 +1181,13 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\Full_Demo\reg_test.S</name>
|
<name>$PROJ_DIR$\Full_Demo\reg_test.S</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\..\..\FreeRTOS-Plus\Demo\Common\FreeRTOS_Plus_CLI_Demos\Sample-CLI-commands.c</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\atmel_main.c</name>
|
<name>$PROJ_DIR$\atmel_main.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\CDCCommandConsole.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\cstartup_with_FreeRTOS_vectors.s</name>
|
<name>$PROJ_DIR$\cstartup_with_FreeRTOS_vectors.s</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
|
@ -140,10 +140,14 @@ label:
|
||||||
MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode
|
MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode
|
||||||
LDR sp, =SFE(IRQ_STACK)
|
LDR sp, =SFE(IRQ_STACK)
|
||||||
|
|
||||||
/* Set up the SYS stack pointer. */
|
/* Set up the SVC stack pointer. This allows the stack used by main()
|
||||||
MSR cpsr_c, #ARM_MODE_SYS | F_BIT ; Change the mode
|
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)
|
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() */
|
/* Branch to main() */
|
||||||
LDR r0, =?main
|
LDR r0, =?main
|
||||||
BLX r0
|
BLX r0
|
||||||
|
|
|
@ -126,8 +126,7 @@ void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName );
|
||||||
void vApplicationTickHook( void );
|
void vApplicationTickHook( void );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
#warning check stack sizes in linker script.
|
||||||
#warning Try re-using the main stack.
|
|
||||||
int main( void )
|
int main( void )
|
||||||
{
|
{
|
||||||
/* Configure the hardware ready to run the demo. */
|
/* Configure the hardware ready to run the demo. */
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
|
|
||||||
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>
|
<ColumnWidth0>20</ColumnWidth0><ColumnWidth1>1622</ColumnWidth1></Debug-Log>
|
||||||
<Build>
|
<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>
|
<Workspace>
|
||||||
<ColumnWidths>
|
<ColumnWidths>
|
||||||
|
|
||||||
|
@ -30,11 +30,11 @@
|
||||||
|
|
||||||
|
|
||||||
<item>500</item><item>20</item></col-widths>
|
<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>
|
<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>
|
<Windows>
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<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>
|
</Tab>
|
||||||
</Tabs>
|
</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>
|
<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>
|
</Desktop>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ Watch0=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
|
||||||
Watch1=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
|
Watch1=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
|
||||||
CStepIntDis=_ 0
|
CStepIntDis=_ 0
|
||||||
[DebugChecksum]
|
[DebugChecksum]
|
||||||
Checksum=1771823120
|
Checksum=1546321988
|
||||||
[Exceptions]
|
[Exceptions]
|
||||||
StopOnUncaught=_ 0
|
StopOnUncaught=_ 0
|
||||||
StopOnThrow=_ 0
|
StopOnThrow=_ 0
|
||||||
|
@ -23,7 +23,7 @@ ShowArgs=0
|
||||||
[Disassembly]
|
[Disassembly]
|
||||||
MixedMode=1
|
MixedMode=1
|
||||||
[watch_formats]
|
[watch_formats]
|
||||||
Fmt0={W}1:xTickCount 4 0
|
Fmt0={W}1:xTickCount 3 0
|
||||||
[Log file]
|
[Log file]
|
||||||
LoggingEnabled=_ 0
|
LoggingEnabled=_ 0
|
||||||
LogFile=_ ""
|
LogFile=_ ""
|
||||||
|
@ -42,7 +42,8 @@ Exclusions=
|
||||||
[Disassemble mode]
|
[Disassemble mode]
|
||||||
mode=0
|
mode=0
|
||||||
[Breakpoints2]
|
[Breakpoints2]
|
||||||
Count=0
|
Bp0=_ 1 "EMUL_CODE" "{$PROJ_DIR$\main.c}.214.2" 0 0 1 "" 0 "" 0
|
||||||
|
Count=1
|
||||||
[Aliases]
|
[Aliases]
|
||||||
Count=0
|
Count=0
|
||||||
SuppressDialog=0
|
SuppressDialog=0
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<Factory>Workspace</Factory>
|
<Factory>Workspace</Factory>
|
||||||
<Session>
|
<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>
|
</Tab>
|
||||||
</Tabs>
|
</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>
|
<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>
|
</Desktop>
|
||||||
</Workspace>
|
</Workspace>
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[MainWindow]
|
[MainWindow]
|
||||||
WindowPlacement=_ 67 68 1327 817 3
|
WindowPlacement=_ 68 69 855 818 3
|
||||||
|
|
Loading…
Reference in a new issue