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;
}





审核编辑:汤梓红

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

    关注

    4963

    文章

    18161

    浏览量

    286557
  • 指针
    +关注

    关注

    1

    文章

    468

    浏览量

    70355
  • 函数指针
    +关注

    关注

    2

    文章

    53

    浏览量

    3721
收藏 人收藏

    评论

    相关推荐

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

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

    找人合作开发产品

    我是一个汽车行业人士,少懂点单片机技术,想开发一款汽车用品,想找人合作开发,我负责产品营销和策划,找人负责产品的开发,我有产品的开发理念但是缺少技术,可以加我QQ***
    发表于 10-19 12:21

    诚邀项目合作开发

    本人手中有一个项目,客户的需求和开发周期已经明确。项目团队正在组建中,诚邀有能力的朋友加入此项目合作开发,基本要求如下:1、需要有stm32系列单片机的开发经验2、熟悉freeRTOS3、最好以前
    发表于 12-14 01:00

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

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

    嵌入式开发学习路线图

    等,对指针的掌握是不可或缺的。而且要掌握多级指针函数指针等等。涉及到指针,那么就会讲到内存分配。在大学
    发表于 12-31 09:47

    嵌入式ARM开发环境下为什么要设置堆栈指针和清理BSS段?

    嵌入式ARM开发环境下,设置堆栈指针和清理BSS段的意义
    发表于 04-02 06:39

    嵌入式开发的优缺点是什么?

    一.嵌入式开发概述:嵌入式:在已有硬件上移植操作系统,解决软硬件耦合度高导致的问题。(打个比方:软件的实现是为了调用open()函数,那么嵌入式开发就是在操作系统
    发表于 11-08 07:42

    究竟什么是嵌入式开发

    什么是嵌入式开发嵌入式开发,一般是指针对某个特定嵌入式系统的开发嵌入式系统广义上可以认为是功
    发表于 11-08 06:13

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

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

    嵌入式C语言的字符串和字符指针的相关资料分享

    C语言的字符串和字符指针  今天在写嵌入式代码时,遇到了个易错的,关于嵌入式CCC语言字符串和字符指针的问题。!!!!  在嵌入式CCC语言
    发表于 12-15 08:05

    嵌入式开发为什么选择C语言?

    1、嵌入式开发为什么选择C语言?(面试题!!!)嵌入式开发操作系统是核心,需要移植,并在上层和底层做开发,而操作系统的核心是内核,所有内核的开发
    发表于 12-15 07:45

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

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

    使用后嵌入式指针的方法

    通过嵌入式指针,进行改进,提高效率#include#includeusing namespace std;namespace myf{//嵌入式指针class B{private: i
    发表于 12-20 06:06

    如何利用Linux嵌入式ARM去开发一种指针

    网址:Linux嵌入式ARM开发教程第一阶段指针指针概述指针+修饰符const、voliatile、typedef
    发表于 12-23 06:40

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

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