日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒ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 ? 來源:大橙子瘋嵌入式 ? 作者:大橙子瘋嵌入式 ? 2022-11-28 09:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

把一個(gè)或者多個(gè)功能通過函數(shù)的方式封裝起來,對外只提供一個(gè)簡單的函數(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í)很難使用到,這是通過函數(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;

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

什么場景使用

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

什么情況會(huì)存在需要下層程序需要調(diào)用上層程序的呢?
比如串口數(shù)據(jù)接收,雖然可以通過查詢的方式接收,但是遠(yuǎn)不及通過串口中斷的方式接收及時(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();
}
}
}

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

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

審核編輯:郭婷

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

    關(guān)注

    5210

    文章

    20680

    瀏覽量

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

    關(guān)注

    33

    文章

    9603

    瀏覽量

    157676

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Trae AI+AirUI:快速實(shí)現(xiàn)一個(gè)嵌入式UI界面

    傳統(tǒng)嵌入式UI開發(fā)流程繁瑣,需兼顧硬件適配與交互邏輯;AI在網(wǎng)頁、App界面生成方面已較為成熟,但在嵌入式硬件場景的實(shí)用性,仍需實(shí)際測試驗(yàn)證。 AirUI框架封裝了常用組件、事件管理等功能,提供
    的頭像 發(fā)表于 04-16 13:10 ?248次閱讀
    Trae AI+AirUI:快速<b class='flag-5'>實(shí)現(xiàn)</b>一個(gè)<b class='flag-5'>嵌入式</b>UI界面

    嵌入式開發(fā)常用函數(shù)速查表

    嵌入式開發(fā),掌握常用函數(shù)的用法可以大大提高開發(fā)效率。無論是單片機(jī)初學(xué)者還是有一定經(jīng)驗(yàn)的工程師,熟悉函數(shù)庫和調(diào)用方式都是必備技能。今天,我們?yōu)榇蠹艺硪环?/div>
    的頭像 發(fā)表于 01-19 09:06 ?486次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā)常用<b class='flag-5'>函數(shù)</b>速查表

    什么是嵌入式應(yīng)用開發(fā)?

    、實(shí)現(xiàn)和部署,還包括硬件選擇、軟件設(shè)計(jì)、測試、集成和維護(hù)等流程?。 定義和背景 嵌入式應(yīng)用開發(fā)是指將軟件部署到嵌入式系統(tǒng),這些系統(tǒng)廣泛應(yīng)用于消費(fèi)電子和工業(yè)自動(dòng)化
    發(fā)表于 01-12 16:13

    C語言單元測試在嵌入式軟件開發(fā)的作用及專業(yè)工具的應(yīng)用

    一、C語言在嵌入式開發(fā)的現(xiàn)狀與重要性 C語言在嵌入式開發(fā)領(lǐng)域仍然占據(jù)主導(dǎo)地位,根據(jù)Barr集團(tuán)的研究,目前95%的嵌入式系統(tǒng)代碼采用C或C++編寫。ARM Cortex-M系列芯片的
    發(fā)表于 12-18 11:46

    系統(tǒng)嵌入式的學(xué)習(xí)路線

    的知識(shí)太多,太雜,太廣,很多嵌入式初學(xué)者陷入嵌入式知識(shí)的海洋,東學(xué)一點(diǎn),西學(xué)一點(diǎn),找不到學(xué)習(xí)的方向。 我從事嵌入式開發(fā)工作有10年,嵌入式
    發(fā)表于 12-16 07:49

    什么是嵌入式操作系統(tǒng)?

    用 FreeRTOS/UCOS?,核心差異在資源適配和實(shí)時(shí)性: 舉個(gè)嵌入式開發(fā)的實(shí)際例子: 用 STM32F4 做一個(gè)智能小車,需要同時(shí)做 3 件事:① 讀取超聲波傳感器數(shù)據(jù)(避障)、② 接收藍(lán)牙
    發(fā)表于 12-09 10:33

    ProfiNet嵌入式板卡,主流替代可實(shí)現(xiàn)ProfiNet工業(yè)以太網(wǎng)的應(yīng)用實(shí)例

    ProfiNet嵌入式板卡,主流替代可實(shí)現(xiàn)ProfiNet工業(yè)以太網(wǎng)的應(yīng)用實(shí)例
    的頭像 發(fā)表于 12-01 17:11 ?1293次閱讀
    ProfiNet<b class='flag-5'>嵌入式</b>板卡,主流替代可<b class='flag-5'>實(shí)現(xiàn)</b>ProfiNet工業(yè)以太網(wǎng)的應(yīng)用實(shí)例

    C語言在嵌入式開發(fā)的應(yīng)用

    C 語言在汽車電子控制系統(tǒng)開發(fā)的主導(dǎo)地位。 2、設(shè)備驅(qū)動(dòng)程序 設(shè)備驅(qū)動(dòng)程序是嵌入式系統(tǒng)連接硬件和軟件的橋梁,它負(fù)責(zé)實(shí)現(xiàn)嵌入式系統(tǒng)與
    發(fā)表于 11-21 08:09

    嵌入式與FPGA的區(qū)別

    應(yīng)用。 FPGA的開發(fā)是邏輯實(shí)現(xiàn)+約束+綜合+仿真,嵌入式的開發(fā)是編碼+編譯+調(diào)試,如果是對數(shù)字電路設(shè)計(jì)感興趣,可以考慮FPGA。 ?在了解下就業(yè)機(jī)會(huì)哪個(gè)多? ?1、嵌入式的就業(yè)機(jī)會(huì)很多,優(yōu)點(diǎn)就是就業(yè)容易,因?yàn)?/div>
    發(fā)表于 11-20 07:12

    嵌入式和FPGA的區(qū)別

    嵌入式系統(tǒng)與FPGA的核心差異:軟件定義功能VS硬件可重構(gòu)。嵌入式適合通用計(jì)算,開發(fā)門檻低;FPGA憑借并行處理實(shí)現(xiàn)納秒級響應(yīng),但成本高、開發(fā)難。二者融合的SoC器件正成為未來趨勢,平衡性能與靈活性
    發(fā)表于 11-19 06:55

    嵌入式電力儀表在配電系統(tǒng)的應(yīng)用與選型

    在現(xiàn)代配電系統(tǒng),對電力參數(shù)的精確測量、電能計(jì)量以及設(shè)備運(yùn)行狀態(tài)的可靠監(jiān)控,是保障供電安全、實(shí)現(xiàn)能效管理的基礎(chǔ)。各類嵌入式電力儀表作為關(guān)鍵測量元件,廣泛應(yīng)用于進(jìn)線柜、出線柜等場景,為系統(tǒng)運(yùn)行提供數(shù)據(jù)
    的頭像 發(fā)表于 09-26 09:37 ?765次閱讀
    <b class='flag-5'>嵌入式</b>電力儀表在配電系統(tǒng)<b class='flag-5'>中</b>的應(yīng)用與選型

    嵌入式達(dá)到什么水平才能就業(yè)?

    工具定位問題具備嵌入式軟件模塊化設(shè)計(jì)能力:能按功能劃分代碼模塊,編寫規(guī)范的頭文件與源文件,實(shí)現(xiàn)模塊間低耦合調(diào)用會(huì)使用Git 進(jìn)行版本管理:能提交代碼、解決沖突、回滾版本,熟悉敏捷開發(fā)流程需求拆解與任務(wù)分配邏輯
    發(fā)表于 09-15 10:20

    嵌入式工程師為什么要學(xué)QT?

    Qt對嵌入式工程師來說,真的很重要嗎? Qt是一個(gè)跨平臺(tái)的C++應(yīng)用程序開發(fā)框架,非常適合嵌入式系統(tǒng)的開發(fā),Qt在嵌入式開發(fā)具有很重要的作用。 在項(xiàng)目實(shí)踐
    發(fā)表于 08-14 15:15

    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 ?1077次閱讀
    運(yùn)行在<b class='flag-5'>嵌入式</b>系統(tǒng)上的emApps
    房山区| 阜宁县| 驻马店市| 丰县| 饶河县| 陆河县| 彭州市| 桂平市| 宁海县| 田东县| 彰武县| 五常市| 凌海市| 贡山| 禹州市| 基隆市| 三都| 郯城县| 闻喜县| 尚志市| 湖口县| 安顺市| 吉木萨尔县| 柘城县| 鄂伦春自治旗| 文化| 双峰县| 榆社县| 泸溪县| 长顺县| 光泽县| 和平县| 康平县| 宜丰县| 荃湾区| 涿州市| 丹阳市| 东山县| 睢宁县| 广汉市| 溆浦县|