Знову ці вказівники на вказівники і вказівниками поганяють.
Є така функція з бібліотеки про таймери:
Прототип:
/**
 * @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)???