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

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

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

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

三种必需掌握的嵌入式开发程序架构!

在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必需仔细考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个适宜的软件架构不仅构造清晰,并且便于开发?

信盈达嵌入式

嵌入式C语言的高级使用(全网最详细)

PlayCodes

嵌入式开发中的一些代码规范和格调

奔腾的心发表于嵌入式那些...

stm32项目模板示例

奔腾的心

第2节:我眼中进修单片机的四个阶段

教你单片机入门根底第2讲:

第一阶段:学会C语言的常用语法,熟悉51单片机开发平台软件keil的操作,了解单片机的大略原理特性,能读懂按键,数码管,跑马灯,串口的简略程序,能熟悉几个常用的外围芯片驱动。网上这方面优秀的教程很多,我正在写的这个连载《从业十年,教你单片机入门根底》也是属于这类入门教程之一。

第二阶段:我认为这个阶段是四个阶段中最重要的阶段。很多初学者完成了第一阶段的进修,真正去面对一个小项目标时候,还是没从下手。他们不知道按键,显示,通讯,应用程序之间是如何关联起来的,他们一旦遇到多任务项目标时候不知道如何并行处理,他们最缺少的是程序的框架思维。网上有很多热心牛人分享的程序框架思想,都值得大家进修和借鉴。我平时做项目是用状态机的思维,就是用switch语句实现多任务的切换,再外加一个定时中断产生不同的时长计时,有兴趣的朋友能够看看我去年在本论坛写的连载贴子《从业将近十年,手把手教你单片机程序框架》。

第三阶段:大家在做项目时,除了写单片机的软件,还不可避免的要跟整个电路的硬件打交道,掌握一些常用的硬件电路知识就显得尤其重要。电阻,电容,电感,二极管,三极管,光藕的应用,电压差和参照地的关系,两系统通信时需不须要共地的理由,隔离与非隔离的本质,常见的变压整流电路,常见的外围驱动电路等等。这方面优秀的电子根底教程很多,大家应该主动找这方面的资料来进修进修,我过一两年后也打算写写这方面的连载贴子《从业十年,单片机常用硬件知识讲解》。

第四阶段:有了前面三个阶段的主动进修和积攒,就能够去做项目了,在项目中进修。依据工作的须要来选择进修哪个厂家的单片机,假如PIC,AVR,stm32等单片机厂家;依据工作的须要来决定是否须要进修汇编语言,有一些台湾厂家的单片机并不能用C语言开发,只能用汇编;依据工作的须要来深层钻研相关行业所需的硬件电路知识;依据工作的须要来进修相关的外围芯片驱动程序。

延展:

PCB电路设计之PADS_LOGIC原理图设计

STM32中用到了一些重要的C语言知识点,汇总!

前言一位初学单片机的小搭档让我举荐C语言书籍,由于C语言根底比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法。其实C语言是可?

嵌入式大杂烩

半个月进修单片机的知识总结

一、前期的最根底的准备1.一块单片机开发板 2.一台电脑 3.相应的软件 4.具有一定的C语言根底。在目前的进修中还未遇到C语言指针的应用,所以这一点对C语言的要求其实不?

HouEn

十天学会单片机可能吗?单片机入门须要多久?

几年前,我是通过郭教师的十天学会单片机教程和配套开发板入门单片机的。最近被学员问到比较多的问题就是,单片机的进修周期大略要多久。今天在这里统一答复下。这个主要是要看学到什么?

猜你喜欢

转载自blog.csdn.net/l16756062003/article/details/125162736
今日推荐