FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [May 2016 Threads] xTimerCreate & vTimerCallbackPosted by yuguangworld on 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?
TimerHandlet xTimerCreate( const char * const pcTimerName,
* TickTypet xTimerPeriodInTicks,
* UBaseTypet uxAutoReload,
* void * pvTimerID,
* TimerCallbackFunctiont pxCallbackFunction );
xTimerCreate & vTimerCallbackPosted by rtel on 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.
xTimerCreate & vTimerCallbackPosted by yuguangworld on 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 vTimerCallbacktr(TimerHandlet pxTimer)
{
pointer * ptr=(pointer * )pxTimer;
}
xTimerCreate & vTimerCallbackPosted by rtel on May 27, 2016 See the following example:
~~~
void main( void )
{
const TickTypet xTimerPeriod = pdMSTO_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( TimerHandlet xTimer )
{
MyStructt *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 );
}
~~~
xTimerCreate & vTimerCallbackPosted by yuguangworld on May 27, 2016 That works well! Thanks so much!
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|