单片机提升代码可读性神器:回调函数

回调函数

首先,什么是回调函数?回调函数在个人理解来看就是自己定义了一个函数,然后将自己定义的这个函数的入口地址(即函数名字)当做另外一个函数(中间函数)的参数传入进行对应的处理,那么中间函数在哪里被调用呢?中间函数会在应用层的函数里被调用。
上伪代码例子

//回调函数1(驱动层)
void Led_On(uint8_t Led_Num)
{
	if (Led_Num == 1) 
		//实现LED1灯的点亮
	else if (Led_Num == 2) 
		//实现LED2灯的点亮
	//....
}
//回调函数2
void Led_Off(uint8_t Led_Num)
{
	if (Led_Num == 1) 
		//实现LED1灯的熄灭
	else if (Led_Num == 2) 
		//实现LED2灯的熄灭
	//....
}

//中间函数(中间层)
void Led_Fun(uint8_t Led_Num, void (*CallBack)(uint8_t))
{
	(*CallBack)(Led_Num);
}

//应用层
int main(void)
{
//系统初始化
	while(1)
	{
		//点亮LED1
		Led_Fun(1, Led_On);
		delay_ms(500);
		//熄灭LED1
		Led_Fun(1, Led_Off);
		delay_ms(500);
	}
}

在上述伪代码中,Led_Fun函数被主循环调用了,Led_Fun函数中又会根据传入的函数指针变量去调用对应的函数。这样做的目的是提高了代码的可复用性,例如我可以用Led_Fun进行LED1的闪烁同时我也可以使用此函数对LED2进行闪烁,而不用重新写一个函数对LED2进行闪烁,减少了代码的冗余性提高了代码可阅读性。
在这里插入图片描述
其逻辑关系如上图,
应用层:是一些应用层的逻辑处理或者算法处理。
中间层:单纯只是一个函数调用,如此处理的原因是希望通过一个函数指针的方式辨别传入不同的函数入口地址执行不同的函数,从而节省单片机的RAM以及ROM的开支。
驱动层(回调函数):对接硬件,也可以叫做硬件接口层,在这里主要是对具体硬件的处理。

以上纯属个人见解,有误之处还望大家指正。
上述内容是观看B站UP主硬件家园的相关视频有感而做的记录,大家有兴趣可以去B站搜索硬件家园也有相关视频讲解。

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值