首页 > 解决方案 > 未使用的参数“状态”的用途是什么?

问题描述

我不明白status函数中参数的用途是什么

void TC0_CH0_TimerInterruptHandler( TC_TIMER_STATUS status , uintptr_t context );

有人可以向我解释为什么编写代码的人包含这个明显无用的参数吗?

#include "definitions.h"

static bool volatile bToggleLED = false;

void TC0_CH0_TimerInterruptHandler(TC_TIMER_STATUS status , uintptr_t context)
{
    bToggleLED = true;
}

int main ( void )
{   
    SYS_Initialize(NULL);
    TC0_TimerCallbackRegister( TC0_CH0_TimerInterruptHandler, (uintptr_t)NULL);

    TC0_TimerStart();

    while ( true )
    {
        if ( bToggleLED )
        {
            bToggleLED = false;
            LED_Toggle();
        }
    }

    return EXIT_FAILURE;
}

标签: cfunctionparameters

解决方案


的第一个参数TC0_TimerCallbackRegister是一个接受两个参数的函数:TC_TIMER_STATUS statusuintptr_t context。是您提供的context值,即(uintptr_t)NULL. 调用您的回调的代码将为status;提供一个值。TC_TIMER_STATUS是在这里enum定义的。

typedef enum
{
    TC_TIMER_STATUS_NONE = 0, 
    /*  overflow */
    TC_TIMER_STATUS_OVERFLOW = TC_INTFLAG_OVF_Msk,

    /* match compare 1 */
    TC_TIMER_STATUS_MATCH1 = TC_INTFLAG_MC1_Msk,
    
    TC_TIMER_STATUS_MSK = TC_TIMER_STATUS_OVERFLOW | TC_TIMER_STATUS_MATCH1, 

    /* Force the compiler to reserve 32-bit memory for enum */
    TC_TIMER_STATUS_INVALID = 0xFFFFFFFF
} TC_TIMER_STATUS;

这个想法 - 我相信,因为我找不到文档 - 你可以检查计时器标志以查看计时器是否溢出,或与计数器匹配,或者两者都没有发生。


函数原型必须与预期相匹配,因此TC0_CH0_TimerInterruptHandler需要两个参数,即使两者都没有使用。


推荐阅读