system
(system)
May 26, 2016, 5:26pm
1
yuguangworld wrote on Thursday, May 26, 2016 :
For xTimerCreate function, we can assign a unique TimerID for each timer (as shown follows). But, can we use pvTimerID pointer to point to a struct so that we can pass more parameters to timer callback function?
TimerHandle_t xTimerCreate( const char * const pcTimerName,
TickType_t xTimerPeriodInTicks,
UBaseType_t uxAutoReload,
void * pvTimerID,
TimerCallbackFunction_t pxCallbackFunction );
rtel
(Richard Barry)
May 26, 2016, 5:49pm
2
rtel wrote on Thursday, May 26, 2016 :
yes - it is a void pointer to allow you to use it for whatever you want.
Just set a pointer to point to the structure, then pass THE ADDRESS OF
THE POINTER as the ID parameter. Inside the callback function declare a
pointer to a structure, and receive the ID into that pointer.
system
(system)
May 27, 2016, 2:00am
3
yuguangworld wrote on Friday, May 27, 2016 :
Thanks so much for your reply!!
But I am still a little confused about how to “receive the ID into that pointer” inside callback function.
For example, is the following expression correct?
void vTimerCallback_tr(TimerHandle_t pxTimer)
{
pointer * ptr=(pointer * )pxTimer;
}
rtel
(Richard Barry)
May 27, 2016, 8:27am
4
rtel wrote on Friday, May 27, 2016 :
See the following example:
void main( void )
{
const TickType_t xTimerPeriod = pdMS_TO_TICKS( 100 );
/* Create the timer with the ID set to the address
of the struct. */
xTimer = xTimerCreate(
"Timer",
xTimerPeriod,
pdFALSE,
( void * ) &xStruct, /* <<<<<< */
prvCallback );
/* Start the timer. */
xTimerStart( xTimer, 0 );
vTaskStartScheduler();
for( ;; );
}
void prvCallback( TimerHandle_t xTimer )
{
MyStruct_t *pxStructAddress;
/* Obtain the address of the struct from the
timer's ID. */
pxStructAddress =
( MyStruct_t * ) pvTimerGetTimerID( xTimer );
/* Check the structure members are as expected. */
configASSERT( pxStructAddress->x == 1 );
configASSERT( pxStructAddress->y == 2 );
}
system
(system)
May 27, 2016, 7:56pm
5
yuguangworld wrote on Friday, May 27, 2016 :
That works well! Thanks so much!