找回密码
 注册
关于网站域名变更的通知
查看: 40|回复: 0
打印 上一主题 下一主题

C语言函数指针数组在ARM中断中的重要应用

[复制链接]
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
     楼主| 发表于 2024-7-3 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    一、函数指针的声明与初始化
    ...
    ) B% p) `; e2 X. Z% u
    int max_fun(int a, int b);
    0 l7 J" ]; _# a2 N
    /*函数指针的声明,声明了两个形参都为int类型,返回值为int类型的函数指针*/
    int (*fp)(int, int);
      o  s3 x+ A; v
    /*指针初始化*/
    fp = max_fun;  //fp = &max_fun 也正确
    8 ?$ [0 S# d; u* @0 ?; L& T; E: H
    /*函数指针初始化后的调用*/
    fp(a,b);       //(*fp)(a,b);也正确

    5 f! X+ h) z3 `& ?
    ...
    二、函数指针的typedef
    typedef void (*irq_func)(int);
    & ]6 y3 L( g8 k2 G
    //定义一个数组,存放中断函数指针,其参数类型为irq_func

    5 A& e+ o8 @4 o& \" J, L
    irq_func irq_array[32];
    三、函数指针数组的使用
    /* 注册中断函数,将中断函数以指针形式存放在数组中 */
    void register_irq(int irq, irq_func fp)
    {
       irq_array[irq] = fp;
       INTMSK &= ~(1 << irq);   //关闭中断屏蔽
    }
    /* 此处将fp函数传入数组,由于函数名在表达式会蜕变为指针,
    * 所以调用register_irq()时第二个参数只需要传入函数名
    */
    register_irq(0, key_eint_irq);
    数组元素的使用:irq_array[bit](bit);  将irq_array[bit]替换为一个函数名更容易理解。
    * o3 x+ c/ q, p! h

    9 ?5 h( I# r  F: b0 v1 \1 F# ?* f; D' X' G/ [% B! P. f
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-18 21:27 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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