精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

嵌入式軟件架構設計之函數調用

巧醬人 ? 來源:大橙子瘋嵌入式 ? 作者:大橙子瘋 ? 2023-02-15 14:48 ? 次閱讀

1、前言

函數調用很好理解,即使剛學沒多久的朋友也知道函數調用是怎么實現的,即調用一個已經封裝好的函數,實現某個特定的功能。

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

2、函數調用方式

函數調用難道還能怎么調用?不就封裝好直接調用嗎???

函數調用方式分為兩種:直接調用和間接調用

直接調用

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

int SumFun(int a, int b)
{
    return a + b;
}

int main()
{
    // 直接調用定義好的函數
    int sum = SumFun(5, 6);
    printf("sum=%d", sum);
    return 0;
}

間接調用

間接調用在初學時很難使用到,這是通過函數指針的方式實現的。

函數指針本質是一個指針變量,是一個指向函數的指針(函數本身也是有地址的,指向的是函數入口);

指針函數本質是一個函數,其返回值為指針。

函數指針的用法如下:

typedef int (*FunctionCB)(int, int);

int SumFun(int a, int b)
{
    return a + b;
}

int main()
{
    // 將定義好的函數賦值給函數指針
    FunctionCB pfnSum = SumFun;

    // 通過函數指針間接調用
    int sum = pfnSum(5, 6);
    printf("sum=%d", sum);
    return 0;
}

3、什么場景使用

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

什么情況會存在需要下層程序需要調用上層程序的呢?

比如串口數據接收,雖然可以通過查詢的方式接收,但是遠不及通過串口中斷的方式接收及時,當接收完成時,需要立即通知上層讀取數據進行處理,而不是等待上層程序查詢讀取。

如何實現呢?

比如硬件抽象層/驅動層中的串口模塊實現函數

/************* UART.c 文件 ****************/
static UartRecvCB sg_pfnUartRecv;

// 設置數據幀接收處理回調函數
void UART_SetRecvCallback(UartRecvCB pfnUartRecv)
{
    sg_pfnUartRecv = pfnUartRecv;
}

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

/************* UART.h 文件 ****************/
typedef void (*UartRecvCB)(const char *, int);

extern void UART_SetRecvCallback(UartRecvCB pfnUartRecv);
extern void UART_Task(void);

應用層代碼中實現回調函數,并調用下層函數。

// 回調函數:串口數據處理
void OnUartRecvProcess(const char *pBuf, int length)
{
    // 處理串口數據
    printf("Recv: %s", pBuf);
}

int main()
{
    UART_SetRecvCallback(OnUartRecvProcess);

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

上述示例中通過函數指針的方式間接調用了應用層的函數,而且并不違背分層設計原則。

如果看代碼不能立即理解的話,可以嘗試通過下圖理解:

圖片


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

    關注

    33

    文章

    8497

    瀏覽量

    150834
  • 封裝
    +關注

    關注

    126

    文章

    7780

    瀏覽量

    142722
  • 函數調用
    +關注

    關注

    0

    文章

    19

    瀏覽量

    2584
收藏 人收藏

    評論

    相關推薦

    嵌入式系統的軟件架構設計!

    軟件架構設計!2. 嵌入式環境下軟件設計的特點要談嵌入式軟件
    發表于 08-10 07:46

    為何要進行嵌入式軟件架構設計?如何設計?

    為何要進行嵌入式軟件架構設計?如何進行嵌入式軟件架構設計?
    發表于 11-01 06:31

    嵌入式軟件架構設計的目的及思路

    【1】架構設計的目的1.應用的代碼邏輯清晰,且避免重復造輪子。2.方便軟件的移植。3.最大限度地復用。4.高內聚低耦合。 【2】嵌入式架構思路1.功能模塊化設計獲得需求------->
    發表于 11-08 06:41

    嵌入式UI架構設計相關資料下載

    嵌入式UI架構設計漫談
    發表于 11-08 07:49

    嵌入式系統中的架構設計的理解

    【閱讀這篇文章,你能了解到什么】1. 從事嵌入式開發12年的我,對架構設計的理解;2. 對嵌入式系統中的架構設計要刻意訓練;3. 嵌入式系統
    發表于 11-08 08:23

    決定嵌入式系統軟件架構的因素和架構的影響

    嵌入式系統軟件架構設計目錄1.前言42.決定架構的因素和架構的影響42.1.常見的誤解52.1.1.小型的系統不需要
    發表于 11-08 06:54

    嵌入式軟件架構設計的資料大合集

    一、感慨近公司新招了一個做嵌入式軟件開發開發的童鞋,該童鞋是從上海的某一個上市公司出來的,因為我們這邊人手不夠,因此把他安排了去負責一個新產品的研發,前期讓他負責加速度計、NB-IOT、舵機、外置
    發表于 11-09 07:50

    嵌入式軟件架構設計資料分享

    作為程序員,我覺得如果要走的更遠必須要成為工程師,畢竟年齡和資歷都擺在那里了。所以就讓我這個老程序員淺談一下嵌入式軟件架構設計。我參考的也是一篇博文。原圖如下![在這里插入圖片描述](?x-oss-process=image/w
    發表于 12-24 07:09

    嵌入式軟件架構設

    嵌入式軟件架構的設計,幫助我們建立合理,有效的軟件架構
    發表于 11-09 17:34 ?19次下載

    探究嵌入式開發是否需要架構設計?

    閱讀這篇文章,你能了解到什么 1. 從事嵌入式開發12年的我,對架構設計的理解; 2. 對嵌入式系統中的架構設計要刻意訓練; 3. 嵌入式
    的頭像 發表于 04-05 09:49 ?3502次閱讀
    探究<b class='flag-5'>嵌入式</b>開發是否需要<b class='flag-5'>架構設</b>計?

    嵌入式軟件架構設

    【1】架構設計的目的1.應用的代碼邏輯清晰,且避免重復造輪子。2.方便軟件的移植。3.最大限度地復用。4.高內聚低耦合。?【2】嵌入式架構思路1.功能模塊化設計? 獲得需求------
    發表于 11-03 16:36 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>架構設</b>計

    嵌入式UI架構設計漫談

    嵌入式UI架構設計漫談
    發表于 11-03 17:36 ?15次下載
    <b class='flag-5'>嵌入式</b>UI<b class='flag-5'>架構設</b>計漫談

    嵌入式開發需要架構設計嗎?

    【閱讀這篇文章,你能了解到什么】1. 從事嵌入式開發12年的我,對架構設計的理解;2. 對嵌入式系統中的架構設計要刻意訓練;3. 嵌入式系統
    發表于 11-03 18:06 ?15次下載
    <b class='flag-5'>嵌入式</b>開發需要<b class='flag-5'>架構設</b>計嗎?

    嵌入式系統軟件架構設

    嵌入式系統軟件架構設計目錄1.前言42.決定架構的因素和架構的影響42.1.常見的誤解52.1.1.小型的系統不需要
    發表于 11-03 18:21 ?30次下載
    <b class='flag-5'>嵌入式</b>系統<b class='flag-5'>軟件</b><b class='flag-5'>架構設</b>計

    嵌入式軟件架構設消息交互

    在熟悉任務調度、程序分層和模塊化編程關于軟件架構、分層和模塊設計后,除了函數調用設計中出現的情況外,還會遇到同層模塊之前如何進行消息交互,通常是應用層之間。
    的頭像 發表于 02-15 15:44 ?800次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>架構設</b>計<b class='flag-5'>之</b>消息交互