函数指针的应用

其实在一般的单片机软件开发过程中,函数指针应该不是特别常用的知识点。但是如果掌握了函数指针,一定程度上可以简化代码,使代码更加整洁。比如单片机要通过两路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+行,当然它的好处不仅仅这么多,如果大家有什么想法,可以畅所欲言!

 

 

 

posted @ 2020-11-03 15:38  沙河淘金  阅读(240)  评论(0编辑  收藏  举报