OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1582|回复: 3

咨询一些C比较基础的问题.

[复制链接]

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-11-4
在线时间
7 小时
发表于 2018-8-30 16:01:17 | 显示全部楼层 |阅读模式
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 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-30 16:01:18 | 显示全部楼层
static void (* pMotor1FBIrqHdl)(uint32_t) = 0;
static void (* pExhaustMotorFBIrqHdl)(uint32_t) = 0;
这是函数指针的初始赋值, 相当于是void (* pMotor1FBIrqHdl)(uint32_t)=NULL; 的意思
第二部分是给它俩赋值, 就是给函数指针指向某个函数
第三部分就是通过函数指针调用函数
因为之前pMotor1FBIrqHdl = pM1Hdl;, pMotor1FBIrqHdl已经被赋值pM1Hdl
所以pMotor1FBIrqHdl(captureVal);实际上就等同于pM1Hdl(captureVal);
回复

使用道具 举报

头像被屏蔽

0

主题

6

帖子

0

精华

禁止访问

积分
5
金钱
5
注册时间
2018-8-30
在线时间
0 小时
发表于 2018-8-30 16:29:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-11-4
在线时间
7 小时
 楼主| 发表于 2018-8-30 17:18:24 | 显示全部楼层
edmund1234 发表于 2018-8-30 16:23
static void (* pMotor1FBIrqHdl)(uint32_t) = 0;
static void (* pExhaustMotorFBIrqHdl)(uint32_t) = 0; ...

不胜感激 谢谢您
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 01:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表