Знову ці вказівники на вказівники і вказівниками поганяють.
Є така функція з бібліотеки про таймери:
Прототип:
/**
* @brief Creates a new custom timer which has 1ms resolution
* @note It uses @ref malloc for memory allocation for timer structure
* @param ReloadValue: Number of milliseconds when timer reaches zero and callback function is called
* @param AutoReloadCmd: If set to 1, timer will start again when it reaches zero and callback is called
* @param StartTimer: If set to 1, timer will start immediately
* @param *TM_DELAY_CustomTimerCallback: Pointer to callback function which will be called when timer reaches zero
* @param *UserParameters: Pointer to void pointer to user parameters used as first parameter in callback function
* @retval Pointer to allocated timer structure
*/
TM_DELAY_Timer_t* TM_DELAY_TimerCreate(uint32_t ReloadValue, uint8_t AutoReloadCmd, uint8_t StartTimer, void (*TM_DELAY_CustomTimerCallback)(struct _TM_DELAY_Timer_t*, void *), void* UserParameters);
Сама функція:
TM_DELAY_Timer_t* TM_DELAY_TimerCreate(uint32_t ReloadValue, uint8_t AutoReloadCmd, uint8_t StartTimer, void (*TM_DELAY_CustomTimerCallback)(struct _TM_DELAY_Timer_t*, void *), void* UserParameters) {
TM_DELAY_Timer_t* tmp;
/* Check if available */
if (CustomTimers.Count >= DELAY_MAX_CUSTOM_TIMERS) {
return NULL;
}
/* Try to allocate memory for timer structure */
tmp = (TM_DELAY_Timer_t *) LIB_ALLOC_FUNC(sizeof(TM_DELAY_Timer_t));
/* Check if allocated */
if (tmp == NULL) {
return NULL;
}
/* Fill settings */
tmp->ARR = ReloadValue;
tmp->CNT = tmp->ARR;
tmp->Flags.F.AREN = AutoReloadCmd;
tmp->Flags.F.CNTEN = StartTimer;
tmp->Callback = TM_DELAY_CustomTimerCallback;
tmp->UserParameters = UserParameters;
/* Increase number of timers in memory */
CustomTimers.Timers[CustomTimers.Count++] = tmp;
/* Return pointer to user */
return tmp;
}
Структура:
typedef struct _TM_DELAY_Timer_t {
union {
struct {
uint8_t AREN:1; /*!< Auto-reload enabled */
uint8_t CNTEN:1; /*!< Count enabled */
} F;
uint8_t FlagsVal;
} Flags;
uint32_t ARR; /*!< Auto reload value */
uint32_t CNT; /*!< Counter value, counter counts down */
void (*Callback)(struct _TM_DELAY_Timer_t*, void *); /*!< Callback which will be called when timer reaches zero */
void* UserParameters; /*!< Pointer to user parameters used for callback function */
} TM_DELAY_Timer_t;
Що роблю я в коді:
Оголошую структуру таймеру:
Створюю функцію зворотнього виклику для таймеру:
void testTimer(void)
{
LED_RED_TOGGLE();
}
Тепер хочу створити сам таймер:
TM_DELAY_TimerCreate(250, 1, 1, ffff, pppp);
Де 250 - час таймер в мілісеках, 1 - повторювати, 1- негайно, ffff - якось вказати на зворотню функцію з структурою таймера, pppp - якийсь користувацький параметр не зрозумів що за хрінь).
Так ось підкажіть будь ласка як мені правильно записати ffff згідно з наведеною вище функцією (void (*TM_DELAY_CustomTimerCallback)(struct _TM_DELAY_Timer_t*, void *)), і що то за pppp (void* UserParameters)???