欢迎光临散文网 会员登陆 & 注册

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

2022-06-07 12:01 作者:大方老师单片机课堂  | 我要投稿

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

\\\插播一条:文章末尾有惊喜~///

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

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_bA写的壳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语句实现多任务的切换,再外加一个定时中断产生不同的时长计时,有兴趣的朋友能够看看我去年在本论坛写的连载贴子《从业将近十年,手把手教你单片机程序框架》。

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

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

延展:

PCB电路设计PADS_LOGIC原理图设计

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

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

嵌入式大杂烩

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

一、前期的最根底的准1.一块单片机开发板(价格60元左右 2.一台电 3.相应的软 4.具有一定C语言根底在目前的进修中还未遇C语言指针的应用,所以这一点C语言的要求其实?

HouEn

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

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

没际单片机

单片机编程入门根底知(新手必)

单片机不是一门技术,而是一个工具对于工具,我们的目标是会熟练地使用它假如你看懂这句话,会少走很多弯路下面我来讲一下使用这个工具时,会波及到的一些知识点。

彩蛋:最近有同学跟我要单片机的资料,我特意花几个月时间,总结了我10年产品研发经验,资料包几乎覆盖C语言、单片机、模电数电、原理图PCB设计、单片机高级编程等等,非常适合初学者入门和进阶。除此以外,再含泪分享我压箱底22个热门开源项目,包含源+原理+PCB+说明文档,不是市面上打包卖的那种课程,我认为教程多未必是好事10年前我自学快,除了自身执行力以外,还有就是教程少。不要害羞做伸手党,等你一个小红点。后期我也会组建一些纯技术交流的小圈子,让大家能认识更多的大佬,有个好的圈子,你对行业的认知一定是最前沿的。


嵌入式中的合作开发--函数指针的评论 (共 条)

分享到微博请遵守国家法律