初级会员

- 积分
- 50
- 金钱
- 50
- 注册时间
- 2015-11-4
- 在线时间
- 7 小时
|
1金钱
static void (* pMotor1FBIrqHdl)(uint32_t) = 0;
static void (* pExhaustMotorFBIrqHdl)(uint32_t) = 0;
void registerMotorFBTimerIRQ(void(* pM1Hdl)(uint32_t), void(* pEMHdl)(uint32_t))
{
pMotor1FBIrqHdl = pM1Hdl;
pExhaustMotorFBIrqHdl = pEMHdl;
}
void MOTORFB_TIMER_INT_FUN (void)
{
uint32_t captureVal = 0;
if ( TIM_GetITStatus(MOTOR_FB_TIMER , TIM_IT_CC1) != RESET )
{
TIM_ClearITPendingBit(MOTOR_FB_TIMER , TIM_FLAG_CC1);
captureVal = MOTOR_FB_TIMER->CCR1;
if(pMotor1FBIrqHdl != 0)
{
pMotor1FBIrqHdl(captureVal);
}
}
else if ( TIM_GetITStatus(MOTOR_FB_TIMER , TIM_IT_CC4) != RESET )
{
TIM_ClearITPendingBit(MOTOR_FB_TIMER , TIM_FLAG_CC4);
captureVal = MOTOR_FB_TIMER->CCR4;
if(pExhaustMotorFBIrqHdl != 0)
{
pExhaustMotorFBIrqHdl(captureVal);
}
}
}
第一部分声明的是什么意思,都做了什么。
第二部分 void(* pM1Hdl)(uint32_t) 他是什么意思
pMotor1FBIrqHdl = pM1Hdl; 第一部分不懂所以这个地方也不懂
pExhaustMotorFBIrqHdl = pEMHdl;第一部分不懂所以这个地方也不懂
第三部分 pMotor1FBIrqHdl(captureVal); 做了什么 赋值给谁了最后?
|
最佳答案
查看完整内容[请看2#楼]
static void (* pMotor1FBIrqHdl)(uint32_t) = 0;
static void (* pExhaustMotorFBIrqHdl)(uint32_t) = 0;
这是函数指针的初始赋值, 相当于是void (* pMotor1FBIrqHdl)(uint32_t)=NULL; 的意思
第二部分是给它俩赋值, 就是给函数指针指向某个函数
第三部分就是通过函数指针调用函数
因为之前pMotor1FBIrqHdl = pM1Hdl;, pMotor1FBIrqHdl已经被赋值pM1Hdl
所以pMotor1FBIrqHdl(captureVal);实际上就等同于pM1Hdl(captureV ...
|