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

审核编辑:郭婷

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

    关注

    5186

    文章

    20149

    浏览量

    328857
  • 接口
    +关注

    关注

    33

    文章

    9446

    浏览量

    156143

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言在嵌入式开发的应用

    C 语言在汽车电子控制系统开发的主导地位。 2、设备驱动程序 设备驱动程序是嵌入式系统连接硬件和软件的桥梁,它负责实现嵌入式系统与
    发表于 11-21 08:09

    嵌入式和FPGA的区别

    嵌入式系统与FPGA的核心差异:软件定义功能VS硬件可重构。嵌入式适合通用计算,开发门槛低;FPGA凭借并行处理实现纳秒级响应,但成本高、开发难。二者融合的SoC器件正成为未来趋势,平衡性能与灵活性
    发表于 11-19 06:55

    嵌入式达到什么水平才能就业?

    工具定位问题具备嵌入式软件模块化设计能力:能按功能划分代码模块,编写规范的头文件与源文件,实现模块间低耦合调用会使用Git 进行版本管理:能提交代码、解决冲突、回滚版本,熟悉敏捷开发流程需求拆解与任务分配逻辑
    发表于 09-15 10:20

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将Linux操作系统运行在嵌入式设备上的一种配置。
    发表于 06-20 09:46

    运行在嵌入式系统上的emApps

    在当今快节奏的嵌入式系统世界,灵活性和适应性是嵌入式系统实现的关键。SEGGER推出了其最新创新:Embedded apps(emApps)应用,类似于手机上的应用程序,可以运行在
    的头像 发表于 06-18 09:53 620次阅读
    运行在<b class='flag-5'>嵌入式</b>系统上的emApps

    Python在嵌入式系统的应用场景

    你想把你的职业生涯提升到一个新的水平?Python在嵌入式系统中正在成为一股不可缺少的新力量。尽管传统上嵌入式开发更多地依赖于C和C++语言,Python的优势在于其简洁的语法、丰富的库和快速的开发周期,这使得它在某些嵌入式场景
    的头像 发表于 03-19 14:10 1191次阅读

    嵌入式教育科普|GPIO接口全面解析

    在现代科技领域,嵌入式系统接口作为信息交互的核心载体,发挥着至关重要的作用,各类接口通过预定义的通信协议与标准化规范,可以实现设备间的精准数据传输与智能控制。 作为嵌入式开发的技术基础,接口
    的头像 发表于 03-05 11:11 2740次阅读
    <b class='flag-5'>嵌入式</b>教育科普|GPIO接口全面解析

    嵌入式系统的代码优化与压缩技术

    32位指令转换为16位Thumb指令,实现代码的初步压缩。 数据压缩:对嵌入式系统的常量数据、字符串等进行压缩。例如,采用哈夫曼编码对经常出现的字符串进行编码,用较短的编码表示频繁出现的字符或
    发表于 02-26 15:00

    嵌入式主板的概述与发展

    随着科技的迅猛发展,嵌入式系统在现代电子产品扮演着越来越重要的角色。嵌入式主板作为嵌入式系统的核心组件之一,承担着控制、处理和通讯等多种功能。本文将对
    的头像 发表于 01-13 16:30 1185次阅读
    <b class='flag-5'>嵌入式</b>主板的概述与发展

    MPU在嵌入式系统的应用

    一、MPU的基本功能 微处理器单元(MPU)是嵌入式系统的大脑,负责执行程序指令、处理数据和控制其他硬件设备。MPU的基本功能包括: 指令执行:MPU能够从存储器读取指令,解码这些指令,并执行
    的头像 发表于 01-08 09:26 1501次阅读

    ARM架构嵌入式主板特点

    嵌入式主板可以理解为嵌入在设备中用于控制和数据处理的CPU板,也就是设备的“大脑”。当主板嵌入到设备,当然对主板的体积和功耗会有更严格的要求(嵌入
    的头像 发表于 12-31 16:03 1839次阅读
    ARM架构<b class='flag-5'>嵌入式</b>主板特点

    新手怎么学嵌入式?

    基本的概念。嵌入式系统是一种将计算机技术嵌入到特定设备的系统,它通常具有特定的功能和有限的资源。你需要学习一些计算机基础知识,如数据结构、操作系统、计算机组成原理等。这些知识将帮助你理解嵌入
    发表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统的一种技术。嵌入式系统是嵌入到其他设备或系统
    的头像 发表于 12-11 09:23 1519次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系统开发的测试方法 嵌入式系统开发与AI结合应用

    嵌入式系统开发的测试方法 嵌入式系统开发是一个复杂的过程,涉及到硬件和软件的紧密结合。测试是确保系统可靠性和性能的关键步骤。以下是一些常用的测试方法: 单元测试 : 单元测试是针对软件中最小的可
    的头像 发表于 12-09 10:22 2039次阅读

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备。这些系统的关键特点是它们与硬件的紧密集成,这意味着软件必须为特定的硬件平台量身定制。
    的头像 发表于 12-09 09:38 1468次阅读