91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

函數(shù)調在嵌入式應用設計中如何實現(xiàn)

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

掃碼添加小助手

加入工程師交流群

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

把一個或者多個功能通過函數(shù)的方式封裝起來,對外只提供一個簡單的函數(shù)接口,然后在其他地方調用即可

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

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

直接調用

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

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

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

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

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

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

typedefint(*FunctionCB)(int,int);

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

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

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

什么場景使用

函數(shù)指針在軟件架構分層設計中十分重要,因為分層設計中有一個設計原則,那就是下層函數(shù)不能直接調用上層函數(shù),那么可以通過函數(shù)指針的方式實現(xiàn);一般稱上層通過函數(shù)指針賦值給下層的函數(shù)為回調函數(shù)

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

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

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

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

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

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

externvoidUART_SetRecvCallback(UartRecvCBpfnUartRecv);
externvoidUART_Task(void);

應用層代碼中實現(xiàn)回調函數(shù),并調用下層函數(shù)。

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

intmain()
{
UART_SetRecvCallback(OnUartRecvProcess);

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

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

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

審核編輯:郭婷

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

    關注

    5198

    文章

    20442

    瀏覽量

    333983
  • 接口
    +關注

    關注

    33

    文章

    9519

    瀏覽量

    157019

原文標題:函數(shù)調用在嵌入式架構設計中的應用

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

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

    系統(tǒng)嵌入式的學習路線

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    飛凌嵌入式2025嵌入式及邊緣AI技術論壇圓滿結束

    飛凌嵌入式「2025嵌入式及邊緣AI技術論壇」在深圳深鐵皇冠假日酒店盛大舉行,此次活動邀請到了200余位嵌入式技術領域的技術專家、企業(yè)代表和工程師用戶,共享嵌入式及邊緣AI技術的盛宴!
    的頭像 發(fā)表于 04-28 13:57 ?4128次閱讀
    飛凌<b class='flag-5'>嵌入式</b>2025<b class='flag-5'>嵌入式</b>及邊緣AI技術論壇圓滿結束

    嵌入式適合自學嗎?

    構、時鐘系統(tǒng)、電源管理、存儲映射等。 嵌入式必學技術點↓↓↓ 1硬件與軟件的結合 2實時性要求與資源限制 3跨領域知識整合 4調試與測試困難 二)缺乏專業(yè)指導 1)容易走彎路:自學嵌入式的過程
    發(fā)表于 04-27 09:54

    飛凌嵌入式「2025嵌入式及邊緣AI技術論壇」議程公布

    4月22日,飛凌嵌入式“2025嵌入式及邊緣AI技術論壇”將在深圳舉行,論壇以“新生態(tài),智未來”為主題,旨在匯聚行業(yè)智慧,探討嵌入式技術與邊緣AI的深度融合與創(chuàng)新應用。
    的頭像 發(fā)表于 04-02 15:12 ?1346次閱讀
    飛凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及邊緣AI技術論壇」議程公布

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

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