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

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

3天内不再提示

函数调在嵌入式应用设计中如何实现

strongerHuang 来源:大橙子疯嵌入式 作者:大橙子疯嵌入式 2022-11-28 09:16 次阅读

函数调用很好理解,即使刚学没多久的朋友也知道函数调用是怎么实现的,即调用一个已经封装好的函数,实现某个特定的功能。

把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口,然后在其他地方调用即可

函数调用方式函数调用难道还能怎么调用?不就封装好直接调用吗???

函数调用方式分为两种:直接调用和间接调用

直接调用

直接调用就是我们平常使用的方式,下面的方式就属于直接调用了。

intSumFun(inta,intb)
{
returna+b;
}

intmain()
{
//直接调用定义好的函数
intsum=SumFun(5,6);
printf("sum=%d",sum);
return0;
}

间接调用
间接调用在初学时很难使用到,这是通过函数指针的方式实现的。

函数指针本质是一个指针变量,是一个指向函数的指针(函数本身也是有地址的,指向的是函数入口);
指针函数本质是一个函数,其返回值为指针。

函数指针的用法如下:

typedefint(*FunctionCB)(int,int);

intSumFun(inta,intb)
{
returna+b;
}

intmain()
{
//将定义好的函数赋值给函数指针
FunctionCBpfnSum=SumFun;

//通过函数指针间接调用
intsum=pfnSum(5,6);
printf("sum=%d",sum);
return0;
}

什么场景使用

函数指针在软件架构分层设计中十分重要,因为分层设计中有一个设计原则,那就是下层函数不能直接调用上层函数,那么可以通过函数指针的方式实现;一般称上层通过函数指针赋值给下层的函数为回调函数

什么情况会存在需要下层程序需要调用上层程序的呢?
比如串口数据接收,虽然可以通过查询的方式接收,但是远不及通过串口中断的方式接收及时,当接收完成时,需要立即通知上层读取数据进行处理,而不是等待上层程序查询读取。

如何实现呢?
比如硬件抽象层/驱动层中的串口模块实现函数

/*************UART.c文件****************/
staticUartRecvCBsg_pfnUartRecv;

//设置数据帧接收处理回调函数
voidUART_SetRecvCallback(UartRecvCBpfnUartRecv)
{
sg_pfnUartRecv=pfnUartRecv;
}

voidUART_Task(void)
{
if(RecvEnd)
{
//数据一帧接收完成立即调用
if(sg_pfnUartRecv!=NULL)
{
sg_pfnUartRecv(UartRecvBuf,UartRecvLength);
}
}
}

/*************UART.h文件****************/
typedefvoid(*UartRecvCB)(constchar*,int);

externvoidUART_SetRecvCallback(UartRecvCBpfnUartRecv);
externvoidUART_Task(void);

应用层代码中实现回调函数,并调用下层函数。

//回调函数:串口数据处理
voidOnUartRecvProcess(constchar*pBuf,intlength)
{
//处理串口数据
printf("Recv:%s",pBuf);
}

intmain()
{
UART_SetRecvCallback(OnUartRecvProcess);

while(1)
{
if(TimeFlag)
{
UART_Task();
}
}
}

上述示例中通过函数指针的方式间接调用了应用层的函数,而且并不违背分层设计原则。
如果看代码不能立即理解的话,可以尝试通过下图理解:

000e24ca-6eb4-11ed-8abf-dac502259ad0.png

审核编辑:郭婷

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

    关注

    5068

    文章

    19013

    浏览量

    303119
  • 接口
    +关注

    关注

    33

    文章

    8494

    浏览量

    150815

原文标题:函数调用在嵌入式架构设计中的应用

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是嵌入式?一文读懂嵌入式主板

    在现代科技浪潮嵌入式技术已成为支撑各种智能设备和系统运行的核心力量。那么,究竟什么是嵌入式嵌入式系统,顾名思义,是将计算机的硬件和软件嵌入
    的头像 发表于 10-16 10:14 481次阅读

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被称为嵌入式系统的核心组件,是一种用于控制和数据处理的计算机硬件,其设计旨在嵌入特定设备执行专门任务。嵌入式主板如同是设备
    的头像 发表于 09-30 10:05 361次阅读

    嵌入式系统的实时操作系统

    嵌入式RTOS是嵌入式应用程序运行、相互交互和与外界通信的底层软件机制。在本节,您将了解嵌入式软件开发人员使用哪些流行RTOS以及它们运行的嵌入式
    的头像 发表于 08-20 11:28 440次阅读

    机器视觉在嵌入式的应用

    机器视觉在嵌入式系统的应用是一个广泛而深入的话题,涉及到许多不同的领域和技术。 机器视觉在嵌入式系统的应用 1. 引言 机器视觉是一种模拟人类视觉系统的功能,通过图像采集、处理和分
    的头像 发表于 07-16 10:30 445次阅读

    嵌入式热门领域有哪些?

    通过物联网连接各种物理设备和传感器,促使它们之间实现信息的交换和数据的共享。从智能家居到智能城市,物联网的应用不断扩展,为嵌入式系统工程师带来了广泛的就业机会和发展前景。 自动驾驶 自动驾驶技术作为
    发表于 07-16 09:23

    嵌入式fpga是什么意思

    嵌入式FPGA是指将FPGA技术集成到嵌入式系统的一种解决方案。嵌入式系统是一种为特定应用而设计的计算机系统,它通常包括处理器、内存、外设接口等组件,并且被
    的头像 发表于 03-15 14:29 1189次阅读

    fpga是嵌入式

    FPGA(现场可编程门阵列)不是嵌入式系统,但FPGA在嵌入式系统中有着重要的应用。
    的头像 发表于 03-14 17:19 2139次阅读

    ​​嵌入式回调函数实现方法

    回调函数的命名规范没有固定的标准,但是根据通用惯例和编码规范,回调函数的命名应该能够反映函数的作用和功能,让其他开发者能够快速理解并使用。
    发表于 03-04 14:49 647次阅读

    嵌入式系统发展前景?

    设备、健康监测等领域有着广泛的应用前景。随着人们对健康的重视程度不断提高,嵌入式系统将更为深入地应用于医疗设备和健康护理实现个人健康管理的智能化和实时化。 汽车电子和自动驾驶是嵌入式
    发表于 02-22 14:09

    嵌入式学习步骤

    硬件组件。 (4).开发固件:编写嵌入式系统的固件,这是嵌入式系统的软件部分。固件负责控制硬件并执行特定任务。 (5).调试和测试:在将嵌入式系统部署到实际环境之前,您需要对其进行调
    发表于 02-02 15:24

    啥是嵌入式嵌入式都有啥?薪资如何?前景如何

    嵌入式系统(Embedded Systems)是一种特殊类型的计算机系统,被嵌入到其他设备或系统,用于执行特定的任务或控制特定的功能。这些系统通常设计用于特定的应用领域,具有特定的硬件和软件要求
    的头像 发表于 01-17 16:39 834次阅读
    啥是<b class='flag-5'>嵌入式</b>?<b class='flag-5'>嵌入式</b>都有啥?薪资如何?前景如何

    嵌入式系统堆栈监控的作用

    在微控制器或微处理器,堆栈是内存的一个保留区域,用于存储临时数据和函数调用信息,管理函数的执行,跟踪返回地址、局部变量和函数参数。堆栈监控是嵌入式
    的头像 发表于 01-05 11:13 463次阅读

    嵌入式open函数的使用

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

    什么是嵌入式系统?嵌入式系统的具体应用

    嵌入式,一般是指嵌入式系统。用于控制、监视或者辅助操作机器和设备的装置。
    的头像 发表于 12-20 13:33 2396次阅读

    嵌入式C语言的结构特点

    嵌入式开发既有底层硬件的开发又涉及上层应用的开发,即涉及系统的硬件和软件,C语言既具有汇编语言操作底层的优势,又具有高级语言功能性强的特点,当之无愧地成为嵌入式开发的主流语言。在 STM32开发过程
    的头像 发表于 11-24 16:16 640次阅读
    <b class='flag-5'>嵌入式</b>C语言的结构特点