電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 47|回復(fù): 0
收起左側(cè)

嵌入式 C 語言設(shè)計模式 --- 外觀模式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2023-2-20 17:50:00 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師
關(guān)注我,一起變得更加優(yōu)秀!
1 - 什么是外觀模式?
外觀模式(Facade Pattern),是一種比較簡單的結(jié)構(gòu)型模式,它存在的目的,也是為了簡單。
外觀模式隱藏了一系列接口的復(fù)雜性,旨在為外部客戶端提供一個更高層次且統(tǒng)一簡單的接口,簡化了客戶端調(diào)用某些模塊的一系列操作。
外觀模式應(yīng)該是軟件工程師們經(jīng)常使用到的一種設(shè)計模式,在很多情況下,我們會習(xí)慣性地把一系列復(fù)雜的操作,封裝成一個簡單的接口,供外界調(diào)用。
外觀模式的優(yōu)點很明顯,它可以減少應(yīng)用客戶端程序與系統(tǒng)之間相互的依賴,因為對外接口簡單,所以提高了靈活性和安全性。
但也有缺點,外觀模式違反了開閉原則,如果要改函數(shù)里面的東西,也會比較麻煩。


2 - 什么情況下要用外觀模式?
在嵌入式C語言軟件設(shè)計的時候,通常我們會遇到很多復(fù)雜的芯片外設(shè)操作,比如,要使用LCD顯示圖片之前,需要先對LCD進行一系列初始化。
初始化芯片的LCD控制器,LCD背光接口,DMA2D外設(shè),等等,而外部在調(diào)用的時候,雖然可以分別調(diào)用這些外設(shè)初始化函數(shù),但整個過程略顯復(fù)雜。
比較簡單方便的方法就是,提供一個統(tǒng)一的函數(shù)接口,比如display_module_init(),在這個函數(shù)里面包含LCD相關(guān)的外設(shè)初始化,外部只需要調(diào)用這個統(tǒng)一的函數(shù)接口就可以了。
不僅是LCD顯示,在很多情況下,都可以使用外觀模式,比如,網(wǎng)絡(luò)數(shù)據(jù)發(fā)送,串口配置,存儲芯片初始化,內(nèi)存控制器初始化,等等。
外觀模式的最終目的,就是要隱藏一系列復(fù)雜的函數(shù)調(diào)用,給外部一個簡單方便統(tǒng)一的接口。



3 - 如何使用外觀模式?
以顯示模塊(display_module)為例,講述一下如何使用嵌入式C語言實現(xiàn)外觀模式。
通常情況下,顯示模塊里面的LCD相關(guān)初始化,會涉及到LCD控制器的初始化,LCD背光初始化,DMA2D的初始化。
1、把LCD相關(guān)初始化操作,都放在display_module.c文件里面統(tǒng)一進行管理,比如lcd_gpio初始化,背光控制初始化,DMA2D初始化,這些都是跟顯示模塊相關(guān)的一系列復(fù)雜操作,代碼如下圖所示。


2、關(guān)于顯示模塊初始化,對外提供一個統(tǒng)一簡單的接口,如display_module_init()函數(shù),在這個函數(shù)里面,包含了以上幾個LCD初始化相關(guān)的函數(shù),代碼實現(xiàn)如下圖所示。


3、在客戶端main函數(shù)里面,初始化顯示模塊,以往經(jīng)常使用的方式是分別調(diào)用LCD相關(guān)的初始化函數(shù),但使用了外觀模式后,只需要調(diào)用一個統(tǒng)一的函數(shù)接口,就可以完成LCD相關(guān)的初始化了,具體實現(xiàn)代碼如下圖所示。


4 - 怎樣驗證外觀模式?
本例程的代碼是使用標準C語言進行編寫,可以在PC端進行驗證,使用標準的GCC編譯器進行編譯。
也可以在嵌入式開發(fā)板里面驗證本例程的代碼,需要根據(jù)開發(fā)板官方提供的指引,自行搭建好開發(fā)環(huán)境,并且把編譯器更換為開發(fā)板對應(yīng)的交叉編譯器即可。


編譯出來的程序,執(zhí)行結(jié)果如下圖所示。


本文代碼下載鏈接:
回復(fù)

使用道具

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表