zoukankan      html  css  js  c++  java
  • 函数指针的应用

    其实在一般的单片机软件开发过程中,函数指针应该不是特别常用的知识点。但是如果掌握了函数指针,一定程度上可以简化代码,使代码更加整洁。比如单片机要通过两路I2C访问两个器件(用了两路I2C,两路I2C的SCL引脚和SDA引脚已经固定),用到两个函数:

    int16_t Get_Device1_Info(uint8_t slaveAddr, uint8_t Comcode);
    int16_t Get_Device2_Info(uint8_t slaveAddr, uint8_t Comcode);
    

     这两个函数可以获取到两个设备的信息,得到相关的数据后需要进行相关的处理,而且数据的处理过程刚好是相同的,按照一般的思路就是:

    void Get_Infomation(uint8_t Device,uint8_t slaveAddr, uint8_t Comcode)
    {
    int16_t temp; if(Device == 1) { temp = Get_Device1_Info(slaveAddr, Comcode); ....../*相关的数据处理,假设有1000行代码*/ } else if(Device == 2) { temp = Get_Device1_Info(slaveAddr, Comcode); ....../*相关的数据处理,假设有1000行代码*/ } }

     那么,如果相关的数据处理函数非常复杂,而且设备不止两个而是好几个,那么这整个函数就会显得特别的冗杂,这个时候使用函数指针就可以极大的简化代码了:

    void Get_Infomation(uint8_t Device,uint8_t slaveAddr, uint8_t Comcode)
    {
          int16_t (*Func)(uint8_t ,uint8_t );   //定义一个函数指针
          if(Device == 1)
          {
                  Func =  Get_Device1_Info;
          } 
          else if(Device == 2)
          {
                  Func =  Get_Device2_Info;
          }
          temp = Func(slaveAddr, Comcode);  
          ....../*相关的数据处理,假设有1000行代码*/ 
    }
    

      最直观的表现就是原来的代码可能有2000+行,有了函数指针之后可以缩减到1000+行,当然它的好处不仅仅这么多,如果大家有什么想法,可以畅所欲言!

     

     

  • 相关阅读:
    winform 利用属性在父、子窗体间传值
    .netweb页面间传值的整理
    微软原版sqlhelper
    oracle 实现 split 函数
    sql server通过exec sp_executesql @pagecountsql,N'@RecodeNum int output',@RecodeNum output 传参执行自定义@sql
    .net 对XML实例
    三级联动DropDownList
    Quickly and partly build&debug OOo on ubuntu
    反思
    完整的学习C++的读书路线图
  • 原文地址:https://www.cnblogs.com/young-dalong/p/13920602.html
Copyright © 2011-2022 走看看