Fix compiler warning in timers.c/h that are only seen when the file is compiled on 8 bit devices.

Update example source code in timers.h so the parameter names match those in timers.c.
Fix "known issue" bug in xTaskResumeFromISR() (which was missing a critical section).
pull/1/head
Richard Barry 13 years ago
parent 562eedc434
commit eb8f02358e

@ -92,7 +92,7 @@ typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer );
/** /**
* xTimerHandle xTimerCreate( const signed char *pcTimerName, * xTimerHandle xTimerCreate( const signed char *pcTimerName,
* portTickType xTimerPeriod, * portTickType xTimerPeriodInTicks,
* unsigned portBASE_TYPE uxAutoReload, * unsigned portBASE_TYPE uxAutoReload,
* void * pvTimerID, * void * pvTimerID,
* tmrTIMER_CALLBACK pxCallbackFunction ); * tmrTIMER_CALLBACK pxCallbackFunction );
@ -110,15 +110,15 @@ typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer );
* purely to assist debugging. The kernel itself only ever references a timer by * purely to assist debugging. The kernel itself only ever references a timer by
* its handle, and never by its name. * its handle, and never by its name.
* *
* @param xTimerPeriod The timer period. The time is defined in tick periods so * @param xTimerPeriodInTicks The timer period. The time is defined in tick periods so
* the constant portTICK_RATE_MS can be used to convert a time that has been * the constant portTICK_RATE_MS can be used to convert a time that has been
* specified in milliseconds. For example, if the timer must expire after 100 * specified in milliseconds. For example, if the timer must expire after 100
* ticks, then xTimerPeriod should be set to 100. Alternatively, if the timer * ticks, then xTimerPeriodInTicks should be set to 100. Alternatively, if the timer
* must expire after 500ms, then xPeriod can be set to ( 500 / portTICK_RATE_MS ) * must expire after 500ms, then xPeriod can be set to ( 500 / portTICK_RATE_MS )
* provided configTICK_RATE_HZ is less than or equal to 1000. * provided configTICK_RATE_HZ is less than or equal to 1000.
* *
* @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will * @param uxAutoReload If uxAutoReload is set to pdTRUE then the timer will
* expire repeatedly with a frequency set by the xTimerPeriod parameter. If * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter. If
* uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and * uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and
* enter the dormant state after it expires. * enter the dormant state after it expires.
* *
@ -138,7 +138,6 @@ typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer );
* *
* Example usage: * Example usage:
* *
*
* #define NUM_TIMERS 5 * #define NUM_TIMERS 5
* *
* // An array to hold handles to the created timers. * // An array to hold handles to the created timers.
@ -929,7 +928,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
* for use by the kernel only. * for use by the kernel only.
*/ */
portBASE_TYPE xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION; portBASE_TYPE xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION;
portBASE_TYPE xTimerGenericCommand( xTimerHandle xTimer, portBASE_TYPE xCommandID, portTickType xOptionalValue, portBASE_TYPE *pxHigherPriorityTaskWoken, portTickType xBlockTime ) PRIVILEGED_FUNCTION; portBASE_TYPE xTimerGenericCommand( xTimerHandle xTimer, portBASE_TYPE xCommandID, portTickType xOptionalValue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portTickType xBlockTime ) PRIVILEGED_FUNCTION;
#ifdef __cplusplus #ifdef __cplusplus
} }

@ -1048,29 +1048,34 @@ tskTCB * pxNewTCB;
{ {
portBASE_TYPE xYieldRequired = pdFALSE; portBASE_TYPE xYieldRequired = pdFALSE;
tskTCB *pxTCB; tskTCB *pxTCB;
unsigned portBASE_TYPE uxSavedInterruptStatus;
configASSERT( pxTaskToResume ); configASSERT( pxTaskToResume );
pxTCB = ( tskTCB * ) pxTaskToResume; pxTCB = ( tskTCB * ) pxTaskToResume;
if( xTaskIsTaskSuspended( pxTCB ) == pdTRUE ) uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
{ {
traceTASK_RESUME_FROM_ISR( pxTCB ); if( xTaskIsTaskSuspended( pxTCB ) == pdTRUE )
if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE )
{ {
xYieldRequired = ( pxTCB->uxPriority >= pxCurrentTCB->uxPriority ); traceTASK_RESUME_FROM_ISR( pxTCB );
vListRemove( &( pxTCB->xGenericListItem ) );
prvAddTaskToReadyQueue( pxTCB ); if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE )
} {
else xYieldRequired = ( pxTCB->uxPriority >= pxCurrentTCB->uxPriority );
{ vListRemove( &( pxTCB->xGenericListItem ) );
/* We cannot access the delayed or ready lists, so will hold this prvAddTaskToReadyQueue( pxTCB );
task pending until the scheduler is resumed, at which point a }
yield will be performed if necessary. */ else
vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxTCB->xEventListItem ) ); {
/* We cannot access the delayed or ready lists, so will hold this
task pending until the scheduler is resumed, at which point a
yield will be performed if necessary. */
vListInsertEnd( ( xList * ) &( xPendingReadyList ), &( pxTCB->xEventListItem ) );
}
} }
} }
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
return xYieldRequired; return xYieldRequired;
} }

@ -241,7 +241,7 @@ xTIMER *pxNewTimer;
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/
portBASE_TYPE xTimerGenericCommand( xTimerHandle xTimer, portBASE_TYPE xCommandID, portTickType xOptionalValue, portBASE_TYPE *pxHigherPriorityTaskWoken, portTickType xBlockTime ) portBASE_TYPE xTimerGenericCommand( xTimerHandle xTimer, portBASE_TYPE xCommandID, portTickType xOptionalValue, signed portBASE_TYPE *pxHigherPriorityTaskWoken, portTickType xBlockTime )
{ {
portBASE_TYPE xReturn = pdFAIL; portBASE_TYPE xReturn = pdFAIL;
xTIMER_MESSAGE xMessage; xTIMER_MESSAGE xMessage;

Loading…
Cancel
Save