* Process all the simulated interrupts - each represented by a bit in \r
* ulPendingInterrupts variable.\r
*/\r
-static void prvProcessPseudoInterrupts( void );\r
+static void prvProcessSimulatedInterrupts( void );\r
\r
/*\r
* Interrupt handlers used by the kernel itself. These are executed from the\r
- * pseudo interrupt handler thread.\r
+ * simulated interrupt handler thread.\r
*/\r
static unsigned long prvProcessDeleteThreadInterrupt( void );\r
static unsigned long prvProcessYieldInterrupt( void );\r
\r
} xThreadState;\r
\r
-/* Pseudo interrupts waiting to be processed. This is a bit mask where each\r
+/* Simulated interrupts waiting to be processed. This is a bit mask where each\r
bit represents one interrupt, so a maximum of 32 interrupts can be simulated. */\r
static volatile unsigned long ulPendingInterrupts = 0UL;\r
\r
-/* An event used to inform the pseudo interrupt processing thread (a high \r
+/* An event used to inform the simulated interrupt processing thread (a high \r
priority thread that simulated interrupt processing) that an interrupt is\r
pending. */\r
static void *pvInterruptEvent = NULL;\r
\r
-/* Mutex used to protect all the pseudo interrupt variables that are accessed \r
+/* Mutex used to protect all the simulated interrupt variables that are accessed \r
by multiple threads. */\r
static void *pvInterruptEventMutex = NULL;\r
\r
the initialisation phase. As each task has its own critical nesting value \r
ulCriticalNesting will get set to zero when the first task runs. This \r
initialisation is probably not critical in this simulated environment as the\r
-pseudo interrupt handlers do not get created until the FreeRTOS scheduler is \r
+simulated interrupt handlers do not get created until the FreeRTOS scheduler is \r
started anyway. */\r
static unsigned long ulCriticalNesting = 9999UL;\r
\r
\r
for(;;)\r
{\r
- /* Wait until the timer expires and we can access the pseudo interrupt \r
+ /* Wait until the timer expires and we can access the simulated interrupt \r
variables. *NOTE* this is not a 'real time' way of generating tick \r
events as the next wake time should be relative to the previous wake \r
time, not the time that Sleep() is called. It is done this way to \r
handler thread. */\r
SetEvent( pvInterruptEvent );\r
\r
- /* Give back the mutex so the pseudo interrupt handler unblocks \r
+ /* Give back the mutex so the simulated interrupt handler unblocks \r
and can access the interrupt handler variables. */\r
ReleaseMutex( pvInterruptEventMutex );\r
}\r
\r
/* Set the priority of this thread such that it is above the priority of \r
the threads that run tasks. This higher priority is required to ensure\r
- pseudo interrupts take priority over tasks. */\r
+ simulated interrupts take priority over tasks. */\r
pvHandle = GetCurrentThread();\r
if( pvHandle == NULL )\r
{\r
if( lSuccess == pdPASS )\r
{\r
/* Start the thread that simulates the timer peripheral to generate\r
- tick interrupts. The priority is set below that of the pseudo \r
+ tick interrupts. The priority is set below that of the simulated \r
interrupt handler so the interrupt event mutex is used for the\r
handshake / overrun protection. */\r
pvHandle = CreateThread( NULL, 0, prvSimulatedPeripheralTimer, NULL, 0, NULL );\r
behave as an embedded engineer might expect. */\r
ResumeThread( pxThreadState->pvThread );\r
\r
- /* Handle all pseudo interrupts - including yield requests and \r
+ /* Handle all simulated interrupts - including yield requests and \r
simulated ticks. */\r
- prvProcessPseudoInterrupts();\r
+ prvProcessSimulatedInterrupts();\r
} \r
\r
- /* Would not expect to return from prvProcessPseudoInterrupts(), so should \r
+ /* Would not expect to return from prvProcessSimulatedInterrupts(), so should \r
not get here. */\r
return 0;\r
}\r
}\r
/*-----------------------------------------------------------*/\r
\r
-static void prvProcessPseudoInterrupts( void )\r
+static void prvProcessSimulatedInterrupts( void )\r
{\r
unsigned long ulSwitchRequired, i;\r
xThreadState *pxThreadState;\r
void *pvObjectList[ 2 ];\r
\r
- /* Going to block on the mutex that ensured exclusive access to the pseudo \r
- interrupt objects, and the event that signals that a pseudo interrupt\r
+ /* Going to block on the mutex that ensured exclusive access to the simulated \r
+ interrupt objects, and the event that signals that a simulated interrupt\r
should be processed. */\r
pvObjectList[ 0 ] = pvInterruptEventMutex;\r
pvObjectList[ 1 ] = pvInterruptEvent;\r
{\r
WaitForMultipleObjects( sizeof( pvObjectList ) / sizeof( void * ), pvObjectList, TRUE, INFINITE );\r
\r
- /* Used to indicate whether the pseudo interrupt processing has\r
+ /* Used to indicate whether the simulated interrupt processing has\r
necessitated a context switch to another task/thread. */\r
ulSwitchRequired = pdFALSE;\r
\r
represented by a bit in the 32bit ulPendingInterrupts variable. */\r
for( i = 0; i < portMAX_INTERRUPTS; i++ )\r
{\r
- /* Is the pseudo interrupt pending? */\r
+ /* Is the simulated interrupt pending? */\r
if( ulPendingInterrupts & ( 1UL << i ) )\r
{\r
/* Is a handler installed? */\r
{\r
/* The task is deleting itself, and so the thread that is running now\r
is also to be deleted. This has to be deferred until this thread is\r
- no longer running, so its done in the pseudo interrupt handler thread. */\r
- vPortGeneratePseudoInterrupt( portINTERRUPT_DELETE_THREAD );\r
+ no longer running, so its done in the simulated interrupt handler thread. */\r
+ vPortGenerateSimulatedInterrupt( portINTERRUPT_DELETE_THREAD );\r
}\r
else\r
{\r
}\r
/*-----------------------------------------------------------*/\r
\r
-void vPortGeneratePseudoInterrupt( unsigned long ulInterruptNumber )\r
+void vPortGenerateSimulatedInterrupt( unsigned long ulInterruptNumber )\r
{\r
xThreadState *pxThreadState;\r
\r
WaitForSingleObject( pvInterruptEventMutex, INFINITE );\r
ulPendingInterrupts |= ( 1 << ulInterruptNumber );\r
\r
- /* The pseudo interrupt is now held pending, but don't actually process it\r
+ /* The simulated interrupt is now held pending, but don't actually process it\r
yet if this call is within a critical section. It is possible for this to\r
be in a critical section as calls to wait for mutexes are accumulative. */\r
if( ulCriticalNesting == 0 )\r
if( xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED )\r
{\r
/* The interrupt event mutex is held for the entire critical section,\r
- effectively disabling (pseudo) interrupts. */\r
+ effectively disabling (simulated) interrupts. */\r
WaitForSingleObject( pvInterruptEventMutex, INFINITE );\r
ulCriticalNesting++;\r
}\r
ulCriticalNesting--;\r
\r
/* Were any interrupts set to pending while interrupts were \r
- (pseudo) disabled? */\r
+ (simulated) disabled? */\r
if( ulPendingInterrupts != 0UL )\r
{\r
SetEvent( pvInterruptEvent );\r