Add vQueueDelete() to the MPU port.

Added volatile key word to the queue xRxLock and xTxLock members.
Ensure the portPRIVILEGED_BIT bit is set when the timer task is being created by the kernel - as it was for the idle task.  Necessary for MPU port.
pull/4/head
Richard Barry 13 years ago
parent e1a83402d6
commit 2967657a85

@ -82,7 +82,7 @@
/* The number of LEDs available to the user on the evaluation kit. */ /* The number of LEDs available to the user on the evaluation kit. */
#define partestNUM_LEDS ( 3UL ) #define partestNUM_LEDS ( 3UL )
/* Definitions not included in sam3s_ek.h. */ /* Definitions not included in sam4s_ek.h. */
#define LED2_GPIO ( PIO_PC20_IDX ) #define LED2_GPIO ( PIO_PC20_IDX )
/* One of the LEDs is wired in the inverse to the others as it is also used as /* One of the LEDs is wired in the inverse to the others as it is also used as
@ -121,20 +121,20 @@ void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
if( xValue != pdFALSE ) if( xValue != pdFALSE )
{ {
/* Turn the LED on. */ /* Turn the LED on. */
portENTER_CRITICAL(); taskENTER_CRITICAL();
{ {
gpio_set_pin_low( ulLED[ uxLED ]); gpio_set_pin_low( ulLED[ uxLED ]);
} }
portEXIT_CRITICAL(); taskEXIT_CRITICAL();
} }
else else
{ {
/* Turn the LED off. */ /* Turn the LED off. */
portENTER_CRITICAL(); taskENTER_CRITICAL();
{ {
gpio_set_pin_high( ulLED[ uxLED ]); gpio_set_pin_high( ulLED[ uxLED ]);
} }
portEXIT_CRITICAL(); taskEXIT_CRITICAL();
} }
} }
} }
@ -143,9 +143,13 @@ void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
void vParTestToggleLED( unsigned portBASE_TYPE uxLED ) void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
{ {
if( uxLED < partestNUM_LEDS ) if( uxLED < partestNUM_LEDS )
{
taskENTER_CRITICAL();
{ {
gpio_toggle_pin( ulLED[ uxLED ] ); gpio_toggle_pin( ulLED[ uxLED ] );
} }
taskEXIT_CRITICAL();
}
} }

@ -110,6 +110,7 @@ static xQueueHandle xCharsForTx;
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/* /*
* See the serial.h header file. * See the serial.h header file.
*/ */
@ -239,6 +240,14 @@ void vSerialClose( xComPortHandle xPort )
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
/*
* It should be noted that the com test tasks (which use make use of this file)
* are included to demonstrate queues being used to communicate between tasks
* and interrupts, and to demonstrate a context switch being performed from
* inside an interrupt service routine. The serial driver used here is *not*
* intended to represent an efficient implementation. Real applications should
* make use of the USARTS peripheral DMA channel (PDC).
*/
void USART1_Handler( void ) void USART1_Handler( void )
{ {
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

Binary file not shown.

@ -210,6 +210,7 @@ portBASE_TYPE MPU_xQueueGiveMutexRecursive( xQueueHandle xMutex );
signed portBASE_TYPE MPU_xQueueAltGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition ); signed portBASE_TYPE MPU_xQueueAltGenericSend( xQueueHandle pxQueue, const void * const pvItemToQueue, portTickType xTicksToWait, portBASE_TYPE xCopyPosition );
signed portBASE_TYPE MPU_xQueueAltGenericReceive( xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking ); signed portBASE_TYPE MPU_xQueueAltGenericReceive( xQueueHandle pxQueue, void * const pvBuffer, portTickType xTicksToWait, portBASE_TYPE xJustPeeking );
void MPU_vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName ); void MPU_vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName );
void MPU_vQueueDelete( xQueueHandle xQueue );
void *MPU_pvPortMalloc( size_t xSize ); void *MPU_pvPortMalloc( size_t xSize );
void MPU_vPortFree( void *pv ); void MPU_vPortFree( void *pv );
void MPU_vPortInitialiseBlocks( void ); void MPU_vPortInitialiseBlocks( void );
@ -1071,6 +1072,16 @@ signed portBASE_TYPE xReturn;
#endif #endif
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
void MPU_vQueueDelete( xQueueHandle xQueue )
{
portBASE_TYPE xRunningPrivileged = prvRaisePrivilege();
vQueueDelete( xQueue );
portRESET_PRIVILEGE( xRunningPrivileged );
}
/*-----------------------------------------------------------*/
void *MPU_pvPortMalloc( size_t xSize ) void *MPU_pvPortMalloc( size_t xSize )
{ {
void *pvReturn; void *pvReturn;

@ -85,7 +85,7 @@ task.h is included from an application file. */
* PUBLIC LIST API documented in list.h * PUBLIC LIST API documented in list.h
*----------------------------------------------------------*/ *----------------------------------------------------------*/
/* Constants used with the cRxLock and cTxLock structure members. */ /* Constants used with the cRxLock and xTxLock structure members. */
#define queueUNLOCKED ( ( signed portBASE_TYPE ) -1 ) #define queueUNLOCKED ( ( signed portBASE_TYPE ) -1 )
#define queueLOCKED_UNMODIFIED ( ( signed portBASE_TYPE ) 0 ) #define queueLOCKED_UNMODIFIED ( ( signed portBASE_TYPE ) 0 )
@ -133,8 +133,8 @@ typedef struct QueueDefinition
unsigned portBASE_TYPE uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */ unsigned portBASE_TYPE uxLength; /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */
unsigned portBASE_TYPE uxItemSize; /*< The size of each items that the queue will hold. */ unsigned portBASE_TYPE uxItemSize; /*< The size of each items that the queue will hold. */
signed portBASE_TYPE xRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ volatile signed portBASE_TYPE xRxLock; /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */
signed portBASE_TYPE xTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */ volatile signed portBASE_TYPE xTxLock; /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked. Set to queueUNLOCKED when the queue is not locked. */
#if ( configUSE_TRACE_FACILITY == 1 ) #if ( configUSE_TRACE_FACILITY == 1 )
unsigned char ucQueueNumber; unsigned char ucQueueNumber;

@ -200,12 +200,12 @@ portBASE_TYPE xReturn = pdFAIL;
{ {
/* Create the timer task, storing its handle in xTimerTaskHandle so /* Create the timer task, storing its handle in xTimerTaskHandle so
it can be returned by the xTimerGetTimerDaemonTaskHandle() function. */ it can be returned by the xTimerGetTimerDaemonTaskHandle() function. */
xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, &xTimerTaskHandle ); xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, &xTimerTaskHandle );
} }
#else #else
{ {
/* Create the timer task without storing its handle. */ /* Create the timer task without storing its handle. */
xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY, NULL); xReturn = xTaskCreate( prvTimerTask, ( const signed char * ) "Tmr Svc", ( unsigned short ) configTIMER_TASK_STACK_DEPTH, NULL, ( ( unsigned portBASE_TYPE ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT, NULL);
} }
#endif #endif
} }
@ -442,7 +442,7 @@ portTickType xNextExpireTime;
static portTickType prvSampleTimeNow( portBASE_TYPE *pxTimerListsWereSwitched ) static portTickType prvSampleTimeNow( portBASE_TYPE *pxTimerListsWereSwitched )
{ {
portTickType xTimeNow; portTickType xTimeNow;
static portTickType xLastTime = ( portTickType ) 0U; PRIVILEGED_DATA static portTickType xLastTime = ( portTickType ) 0U;
xTimeNow = xTaskGetTickCount(); xTimeNow = xTaskGetTickCount();

Loading…
Cancel
Save