0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式中的合作开发——函数指针

码农爱学习 来源:码农爱学习 作者:码农爱学习 2022-09-28 09:00 次阅读

嵌入式软件开发中,一个项目往往需要多人协作完成。

比如A需要完成项目的整体逻辑功能,而整个逻辑功能包含许多具体的小功能,但A又没有时间或能力来实现这些小功能,这时可以让B来协助实现函数内部的功能。

通常的思路是,B写好某个函数后,A直接通过B声明的函数调用即可。但这会有一些问题,例如B写好函数之后,A只能使用B声明的函数名来使用,假如B声明的函数名的命名规则很不符合A的口味,A用起来就很不爽,哈哈。那这样怎么办呢?聪明的A可以自己再声明一个自己喜欢的函数名,并通过函数指针传递的功能来获得B的功能。

下面来讲一下具体实现:

声明函数指针-A负责

比如A需要一个求和功能的函数,但他没时间写,他可以自己先声明一个函数指针:

//a中声明一个指针函数,其函数内部的功能需要另一个人b来完成 
int (*mysum)(int, int)=0;

这个看起来和普通的函数声明很像,都有函数名,返回值类型与参数类型,但该函数名前有一个星号,表示它是函数指针,另外其函数实体可以先初始化为0。

函数指针赋值-A负责

这一步相当于函数指针初始化,也相当于函数注册,就是将A声明的函数指针,通过指针赋值的方式,来获得B实现的函数功能,相当于是给B写的函数套上一层A的壳:

//初始化指针函数,传入 b写的函数的函数名,
//通过函数指针赋值,main中声明的函数,就可以使用b写的函数功能了 
int init_mysum_func(int(*func_handle)(int,int))
{
	mysum = func_handle;
	return 0;
}

函数的具体实现-B负责

B这个人只要按照A声明的函数指针的格式(返回值与参数类型一致,函数名可以随意)完成函数内部功能即可,这里以简单的求和为例,在b.h文件中,B实现的功能如下:

int sum_by_b(int a, int b)
{
	return a+b;
}

项目整理逻辑-A负责

项目逻辑很简单,就是求1+2的值,这时A在使用自己声明的mysum之前,初始化(注册)一下该函数(将B写的函数“sum_by_b”套上A写的壳“mysum”),然后就可以使用了,使用实例如下:

int main()
{
	int res = 0;
	
	init_mysum_func(sum_by_b);//初始化指针函数, 将 b完成的函数功能赋予a声明的函数 
	
	res = mysum(1,2);//使用a声明的求和函数进行求和,其内部实现其实的b完成的 
	
	printf("mysum(1,2) = %d",res);
	
	return 0;
}

测试结果:

mysum(1,2) = 3
--------------------------------
Process exited after 0.007424 seconds with return value 0
请按任意键继续. . .

附:整个测试代码

b.h

int sum_by_b(int a, int b)
{
	return a+b;
}

a.c

#include 
#include 
#include "b.h"

//a中声明一个指针函数,其函数内部的功能需要另一个人b来完成 
int (*mysum)(int, int)=0;

//初始化指针函数,传入 b写的函数的函数名,
//通过函数指针赋值,main中声明的函数,就可以使用b写的函数功能了 
int init_mysum_func(int(*func_handle)(int,int))
{
	mysum = func_handle;
	return 0;
}

int main()
{
	int res = 0;
	
	init_mysum_func(sum_by_b);//初始化指针函数, 将 b完成的函数功能赋予a声明的函数 
	
	res = mysum(1,2);//使用a声明的求和函数进行求和,其内部实现其实的b完成的 
	
	printf("mysum(1,2) = %d",res);
	
	return 0;
}





审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19008

    浏览量

    302937
  • 指针
    +关注

    关注

    1

    文章

    479

    浏览量

    70506
  • 函数指针
    +关注

    关注

    2

    文章

    56

    浏览量

    3775
收藏 人收藏

    评论

    相关推荐

    周立功手把手教你学嵌入式编程:函数指针指针函数的应用

    作者经常听嵌入式软件开发者说,“我几乎不用函数指针……”。言下之意,那些复杂的语法似乎毫无用处,而实际上很多人根本没有认识到其无穷的威力……本文将进入程序设计与数据结构》
    的头像 发表于 08-29 11:36 1.6w次阅读

    嵌入式系统驱动、应用等设计开发合作

    本人长期从事嵌入式系统产品软件规划、设计、开发及管理相关工作,熟悉vxworks\linux\android\qnx等常用嵌入式系统驱动、应用等开发,涉及到工控、军用、民用等多个行业,
    发表于 10-19 17:07

    单片机嵌入式sprintf()函数怎么使用

    前言在嵌入式开发中经常需要将一个变量实时通过串口等协议传输并显示到LCD等显示屏上。但我们得到的大多数的底层库里面只留有显示字符串的接口。因此需要将变量转化为字符串。sprintf()函数的用法函数
    发表于 12-13 06:01

    嵌入式指针的相关资料分享

    一:嵌入式指针(embedded pointer) (1.1)嵌入式指针概念 一般应用在内存池相关的代码;成功使用
    发表于 12-20 07:11

    嵌入式开发

    嵌入式开发就是指在嵌入式操作系统下进行开发嵌入式Linux是以Linux为基础的嵌入式作业系统。这里提供了
    发表于 12-20 13:21
    <b class='flag-5'>嵌入式开发</b>

    瑞萨与台积电将合作开发28nm纳米嵌入式闪存制程技术

    瑞萨电子与台积电共同宣布,双方合作开发28纳米嵌入式闪存(eFlash)制程技术,以生产支持新一代环保汽车与自动驾驶汽车的微控制器(MCU)。
    发表于 11-29 11:13 2287次阅读

    浅谈嵌入式软件开发函数指针的实现

    嵌入式软件开发,一个项目往往需要多人协作完成。
    的头像 发表于 04-15 11:07 1577次阅读

    嵌入式开发实用的宏打印函数

    宏打印函数在我们的嵌入式开发,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。 特别是对于异常情况的打印
    的头像 发表于 09-16 10:05 1616次阅读
    <b class='flag-5'>嵌入式开发</b><b class='flag-5'>中</b>实用的宏打印<b class='flag-5'>函数</b>

    视频教程-嵌入式Linux开发基础-嵌入式

    嵌入式Linux开发基础 嵌入式工程师、嵌入式讲师、10多年
    发表于 11-02 13:21 30次下载
    视频教程-<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>开发</b>基础-<b class='flag-5'>嵌入式</b>

    嵌入式软件的延时函数

    延时函数嵌入式软件开发必不可少的功能函数,在每个工程里都能找到它的踪影。虽然看起来不起眼,但在有些时序控制的场合,使用了一点点delay
    发表于 11-24 19:21 19次下载
    <b class='flag-5'>嵌入式</b>软件<b class='flag-5'>中</b>的延时<b class='flag-5'>函数</b>

    嵌入式开发软件回调函数的使用

    嵌入式开发软件回调函数是经常接触的一种软件设计方法,像我们的事件处理机制基本上都会使用到回调函数
    的头像 发表于 04-29 08:57 2227次阅读

    嵌入式系统函数如何调用

    嵌入式系统,一个函数调用时,它的内部机理是什么,执行了哪些步骤?如图1所示,先看 看 一个程序在运行时,它的内存分布状况。
    的头像 发表于 02-13 14:15 1043次阅读
    <b class='flag-5'>嵌入式</b>系统<b class='flag-5'>中</b><b class='flag-5'>函数</b>如何调用

    嵌入式C语言的结构特点

    ,不论是基于寄存器开发还是基于库开发,深入理解和掌握嵌入式C语言的函数指针、结构体是学习STM32的关键。
    的头像 发表于 11-24 16:16 637次阅读
    <b class='flag-5'>嵌入式</b>C语言的结构特点

    嵌入式open函数的使用

    嵌入式系统是指嵌入到其他设备或系统,用于控制和管理硬件资源的计算机系统。在嵌入式系统,通常需要与外部设备进行数据交互,例如读取传感器数据
    的头像 发表于 01-04 15:51 622次阅读

    面试常考+1:函数指针指针函数、数组指针指针数组

    嵌入式开发领域,函数指针指针函数、数组指针指针
    的头像 发表于 08-10 08:11 676次阅读
    面试常考+1:<b class='flag-5'>函数</b><b class='flag-5'>指针</b>与<b class='flag-5'>指针</b><b class='flag-5'>函数</b>、数组<b class='flag-5'>指针</b>与<b class='flag-5'>指针</b>数组