C语言回调函数注册和调用


在 timer.h 头文件中定义回调函数类型:

// 定义回调函数类型
typedef void (*TIM3_CALLBACK)(int);
 
void register_tim3_callback(TIM3_CALLBACK callback);
 在 timer.c 文件中调用回调函数,实现注册函数:

// TIM3 回调函数指针
TIM3_CALLBACK tim3_callback_ptr = NULL;
 
// 定时器中断服务函数
void TIM3_IRQHandler(void)
{
    // 判断 TINM3 中的中断更新事件是否被触发
    if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) {
        printf("TIM3 中断\r\n");
        if(tim3_callback_ptr != NULL)
        {
            tim3_callback_ptr(3);
        }
 
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除掉 TIMx 的更新中断标志
    }
}
 
// 注册回调函数
void register_tim3_callback(TIM3_CALLBACK callback)
{
    tim3_callback_ptr = callback;
}
 在 main.c 文件中注册和使用回调函数:

// 加作者VX: jiyuyun18, 交流电子技术
// TIM3 回调函数
void tim3_callback(int value)
{
    printf("Callback function called with value: %d\r\n", value);
}
 
/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);    
    printf("SystemClk:%d\r\n",SystemCoreClock);
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
    printf("This is printf example\r\n");
 
    register_tim3_callback(tim3_callback);
    tim3_irq_init(4999, 9599);
 
    while(1)
    {
 
    }
}

C语言回调函数可以实现底层调用高层的函数。回调函数是一种函数指针,它可以作为参数传递给另一个函数,并在该函数中被调用回调函数通常用于异步调用,以便在某个事件发生时被调用。 在底层函数中,我们可以定义一个函数指针参数,这个函数指针参数可以指向高层函数。在底层函数中,我们可以根据需要调用这个函数指针,从而实现底层调用高层的函数。 例如,我们可以在底层函数中定义一个函数指针参数,如下所示: ``` void low_level_function(int x, int y, void (*callback_function)(int)); ``` 这个函数指针参数callback_function可以指向高层函数,它的参数为int类型,返回值为void类型。在底层函数中,我们可以根据需要调用这个函数指针,如下所示: ``` void low_level_function(int x, int y, void (*callback_function)(int)) { // 底层逻辑处理 int result = x + y; // 调用回调函数 callback_function(result); } ``` 在高层函数中,我们可以定义一个回调函数,如下所示: ``` void high_level_function(int result) { // 高层逻辑处理 printf("The result is: %d\n", result); } ``` 然后在高层函数中调用底层函数,并传递回调函数作为参数,如下所示: ``` int main() { // 调用底层函数,并传递回调函数 low_level_function(10, 20, high_level_function); return 0; } ``` 这样,在底层函数中调用回调函数时,就会调用高层函数high_level_function,从而实现底层调用高层的函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值