99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

函數(shù)調(diào)在嵌入式應(yīng)用設(shè)計(jì)中如何實(shí)現(xiàn)

strongerHuang ? 來(lái)源:大橙子瘋嵌入式 ? 作者:大橙子瘋嵌入式 ? 2022-11-28 09:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

函數(shù)調(diào)用很好理解,即使剛學(xué)沒(méi)多久的朋友也知道函數(shù)調(diào)用是怎么實(shí)現(xiàn)的,即調(diào)用一個(gè)已經(jīng)封裝好的函數(shù),實(shí)現(xiàn)某個(gè)特定的功能。

把一個(gè)或者多個(gè)功能通過(guò)函數(shù)的方式封裝起來(lái),對(duì)外只提供一個(gè)簡(jiǎn)單的函數(shù)接口,然后在其他地方調(diào)用即可

函數(shù)調(diào)用方式函數(shù)調(diào)用難道還能怎么調(diào)用?不就封裝好直接調(diào)用嗎???

函數(shù)調(diào)用方式分為兩種:直接調(diào)用和間接調(diào)用

直接調(diào)用

直接調(diào)用就是我們平常使用的方式,下面的方式就屬于直接調(diào)用了。

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

intmain()
{
//直接調(diào)用定義好的函數(shù)
intsum=SumFun(5,6);
printf("sum=%d",sum);
return0;
}

間接調(diào)用
間接調(diào)用在初學(xué)時(shí)很難使用到,這是通過(guò)函數(shù)指針的方式實(shí)現(xiàn)的。

函數(shù)指針本質(zhì)是一個(gè)指針變量,是一個(gè)指向函數(shù)的指針(函數(shù)本身也是有地址的,指向的是函數(shù)入口);
指針函數(shù)本質(zhì)是一個(gè)函數(shù),其返回值為指針。

函數(shù)指針的用法如下:

typedefint(*FunctionCB)(int,int);

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

intmain()
{
//將定義好的函數(shù)賦值給函數(shù)指針
FunctionCBpfnSum=SumFun;

//通過(guò)函數(shù)指針間接調(diào)用
intsum=pfnSum(5,6);
printf("sum=%d",sum);
return0;
}

什么場(chǎng)景使用

函數(shù)指針在軟件架構(gòu)分層設(shè)計(jì)中十分重要,因?yàn)榉謱釉O(shè)計(jì)中有一個(gè)設(shè)計(jì)原則,那就是下層函數(shù)不能直接調(diào)用上層函數(shù),那么可以通過(guò)函數(shù)指針的方式實(shí)現(xiàn);一般稱上層通過(guò)函數(shù)指針賦值給下層的函數(shù)為回調(diào)函數(shù)。

什么情況會(huì)存在需要下層程序需要調(diào)用上層程序的呢?
比如串口數(shù)據(jù)接收,雖然可以通過(guò)查詢的方式接收,但是遠(yuǎn)不及通過(guò)串口中斷的方式接收及時(shí),當(dāng)接收完成時(shí),需要立即通知上層讀取數(shù)據(jù)進(jìn)行處理,而不是等待上層程序查詢讀取。

如何實(shí)現(xiàn)呢?
比如硬件抽象層/驅(qū)動(dòng)層中的串口模塊實(shí)現(xiàn)函數(shù)

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

//設(shè)置數(shù)據(jù)幀接收處理回調(diào)函數(shù)
voidUART_SetRecvCallback(UartRecvCBpfnUartRecv)
{
sg_pfnUartRecv=pfnUartRecv;
}

voidUART_Task(void)
{
if(RecvEnd)
{
//數(shù)據(jù)一幀接收完成立即調(diào)用
if(sg_pfnUartRecv!=NULL)
{
sg_pfnUartRecv(UartRecvBuf,UartRecvLength);
}
}
}

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

externvoidUART_SetRecvCallback(UartRecvCBpfnUartRecv);
externvoidUART_Task(void);

應(yīng)用層代碼中實(shí)現(xiàn)回調(diào)函數(shù),并調(diào)用下層函數(shù)。

//回調(diào)函數(shù):串口數(shù)據(jù)處理
voidOnUartRecvProcess(constchar*pBuf,intlength)
{
//處理串口數(shù)據(jù)
printf("Recv:%s",pBuf);
}

intmain()
{
UART_SetRecvCallback(OnUartRecvProcess);

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

上述示例中通過(guò)函數(shù)指針的方式間接調(diào)用了應(yīng)用層的函數(shù),而且并不違背分層設(shè)計(jì)原則。
如果看代碼不能立即理解的話,可以嘗試通過(guò)下圖理解:

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

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5152

    文章

    19675

    瀏覽量

    317636
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153766

原文標(biāo)題:函數(shù)調(diào)用在嵌入式架構(gòu)設(shè)計(jì)中的應(yīng)用

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    Linux嵌入式與單片機(jī)嵌入式在多個(gè)方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運(yùn)行在嵌入式設(shè)備上的一種配置。
    發(fā)表于 06-20 09:46

    運(yùn)行在嵌入式系統(tǒng)上的emApps

    在當(dāng)今快節(jié)奏的嵌入式系統(tǒng)世界,靈活性和適應(yīng)性是嵌入式系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。SEGGER推出了其最新創(chuàng)新:Embedded apps(emApps)應(yīng)用,類似于手機(jī)上的應(yīng)用程序,可以運(yùn)行在
    的頭像 發(fā)表于 06-18 09:53 ?303次閱讀
    運(yùn)行在<b class='flag-5'>嵌入式</b>系統(tǒng)上的emApps

    Python在嵌入式系統(tǒng)的應(yīng)用場(chǎng)景

    你想把你的職業(yè)生涯提升到一個(gè)新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開(kāi)發(fā)更多地依賴于C和C++語(yǔ)言,Python的優(yōu)勢(shì)在于其簡(jiǎn)潔的語(yǔ)法、豐富的庫(kù)和快速的開(kāi)發(fā)周期,這使得它在某些嵌入式場(chǎng)景
    的頭像 發(fā)表于 03-19 14:10 ?717次閱讀

    嵌入式系統(tǒng)的代碼優(yōu)化與壓縮技術(shù)

    32位指令轉(zhuǎn)換為16位Thumb指令,實(shí)現(xiàn)代碼的初步壓縮。 數(shù)據(jù)壓縮:對(duì)嵌入式系統(tǒng)的常量數(shù)據(jù)、字符串等進(jìn)行壓縮。例如,采用哈夫曼編碼對(duì)經(jīng)常出現(xiàn)的字符串進(jìn)行編碼,用較短的編碼表示頻繁出現(xiàn)的字符或
    發(fā)表于 02-26 15:00

    嵌入式主板的概述與發(fā)展

    隨著科技的迅猛發(fā)展,嵌入式系統(tǒng)在現(xiàn)代電子產(chǎn)品扮演著越來(lái)越重要的角色。嵌入式主板作為嵌入式系統(tǒng)的核心組件之一,承擔(dān)著控制、處理和通訊等多種功能。本文將對(duì)
    的頭像 發(fā)表于 01-13 16:30 ?783次閱讀
    <b class='flag-5'>嵌入式</b>主板的概述與發(fā)展

    新手怎么學(xué)嵌入式?

    基本的概念。嵌入式系統(tǒng)是一種將計(jì)算機(jī)技術(shù)嵌入到特定設(shè)備的系統(tǒng),它通常具有特定的功能和有限的資源。你需要學(xué)習(xí)一些計(jì)算機(jī)基礎(chǔ)知識(shí),如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、計(jì)算機(jī)組成原理等。這些知識(shí)將幫助你理解嵌入
    發(fā)表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指將人工智能技術(shù)應(yīng)用于嵌入式系統(tǒng)的一種技術(shù)。嵌入式系統(tǒng)是嵌入到其他設(shè)備或系統(tǒng)
    的頭像 發(fā)表于 12-11 09:23 ?1006次閱讀
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系統(tǒng)開(kāi)發(fā)的測(cè)試方法 嵌入式系統(tǒng)開(kāi)發(fā)與AI結(jié)合應(yīng)用

    嵌入式系統(tǒng)開(kāi)發(fā)的測(cè)試方法 嵌入式系統(tǒng)開(kāi)發(fā)是一個(gè)復(fù)雜的過(guò)程,涉及到硬件和軟件的緊密結(jié)合。測(cè)試是確保系統(tǒng)可靠性和性能的關(guān)鍵步驟。以下是一些常用的測(cè)試方法: 單元測(cè)試 : 單元測(cè)試是針對(duì)軟件中最小的可
    的頭像 發(fā)表于 12-09 10:22 ?1361次閱讀

    mmc卡在嵌入式系統(tǒng)的使用

    隨著科技的發(fā)展,嵌入式系統(tǒng)在我們的日常生活扮演著越來(lái)越重要的角色。從智能手機(jī)到家用電器,再到工業(yè)控制系統(tǒng),嵌入式系統(tǒng)無(wú)處不在。存儲(chǔ)設(shè)備作為嵌入式系統(tǒng)
    的頭像 發(fā)表于 11-25 09:58 ?1182次閱讀

    嵌入式系統(tǒng)與物聯(lián)網(wǎng)的結(jié)合

    隨著科技的飛速發(fā)展,嵌入式系統(tǒng)和物聯(lián)網(wǎng)(IoT)已經(jīng)成為現(xiàn)代技術(shù)領(lǐng)域的重要組成部分。嵌入式系統(tǒng)是指嵌入到設(shè)備或系統(tǒng)的專用計(jì)算機(jī)系統(tǒng),而物聯(lián)網(wǎng)則是指通過(guò)互聯(lián)網(wǎng)將各種設(shè)備連接起來(lái),
    的頭像 發(fā)表于 11-06 10:23 ?1112次閱讀

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

    在現(xiàn)代科技浪潮,嵌入式技術(shù)已成為支撐各種智能設(shè)備和系統(tǒng)運(yùn)行的核心力量。那么,究竟什么是嵌入式?嵌入式系統(tǒng),顧名思義,是將計(jì)算機(jī)的硬件和軟件嵌入
    的頭像 發(fā)表于 10-16 10:14 ?2615次閱讀

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

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計(jì)算機(jī)硬件,其設(shè)計(jì)旨在嵌入特定設(shè)備執(zhí)行專門任務(wù)。嵌入式主板如同是設(shè)備
    的頭像 發(fā)表于 09-30 10:05 ?1625次閱讀

    嵌入式linux開(kāi)發(fā)板芯片的工作原理

    了處理器、存儲(chǔ)器、輸入/輸出接口等硬件資源的嵌入式系統(tǒng)開(kāi)發(fā)平臺(tái)。它通常采用Linux操作系統(tǒng)作為底層軟件平臺(tái),提供了豐富的開(kāi)發(fā)工具和庫(kù)函數(shù),方便開(kāi)發(fā)者進(jìn)行嵌入式系統(tǒng)開(kāi)發(fā)。 1.1 嵌入式
    的頭像 發(fā)表于 09-02 09:07 ?821次閱讀

    嵌入式機(jī)電一體化系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》讀后感

    先給大家看看封面哦 再看居然還有簽名呢 還貼心的送了書簽哦,愛(ài)了愛(ài)了 在閱讀了曾慶祥教授所著的《嵌入式機(jī)電一體化系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》一書后,我深感收獲頗豐,對(duì)嵌入式系統(tǒng)與機(jī)電一體化系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
    發(fā)表于 08-21 08:45

    嵌入式系統(tǒng)的實(shí)時(shí)操作系統(tǒng)

    嵌入式RTOS是嵌入式應(yīng)用程序運(yùn)行、相互交互和與外界通信的底層軟件機(jī)制。在本節(jié),您將了解嵌入式軟件開(kāi)發(fā)人員使用哪些流行RTOS以及它們運(yùn)行的嵌入式
    的頭像 發(fā)表于 08-20 11:28 ?890次閱讀