常用于单片机的接口适配器模式C语言实现
一般實現(xiàn)
????在我們做項目的時候,一般的實現(xiàn),可能我們會這樣寫代碼
// FileName: test.c// 來源:公眾號【技術讓夢想更偉大】#include#include “ExternModule.h” int main(void){/*初始化*/ ?vAllInit(); ?while(1) ?{ ? ?/*項目邏輯*/ ? ?vLogicModule1(); ? ?vLogicModule2(); ?}}????在其外部文件中,調(diào)用相對應的初始化函數(shù)以及邏輯函數(shù),但是當我們項目很復雜的時候,邏輯關系也層層覆蓋、交替的時候,這樣的寫法就有些不是很好看了。
接口適配器
????首先我們還是要來定義數(shù)據(jù)結構,一般這樣的項目分為這樣幾個步驟:
初始化
輸入
處理
輸出
????我們把這四個步驟封裝起來,再定義數(shù)據(jù)結構如下:
// FileName: test1.c // 來源:公眾號【技術讓夢想更偉大】 /* 適配器類型定義 */ struct?_ADAPTER? {void?(*Init????)(?void?);??//初始化函數(shù)? ? ? ? ? ? ? ? ?void?(*Input???)(?void?);??//輸入轉換函數(shù)????void?(*Process?)(?void?);??//處理函數(shù)????void?(*Output??)(?void?);??//輸出轉換函數(shù) }; typedef struct _ADAPTER ADAPTER ;????那么初始化函數(shù),我們先來這樣定義
// FileName: test1.c // 來源:公眾號【技術讓夢想更偉大】 /* 模塊初始化 */ void?moduleInit(?ADAPTER?*module?) {if(?module->Init?!=?NULL?) ? ?{??????module->Init(); ? ?}? }????模塊的邏輯運行,我們可以這樣使用
// FileName: test1.c// 來源:公眾號【技術讓夢想更偉大】/* 模塊邏輯運行 */void moduleRun( ADAPTER *module ){ ? ?// 模塊輸入適配接口不為空,則執(zhí)行輸入適配操作 ? ?if( module->Input != NULL ) ? ?{ ? ? ? ?module->Input(); ? ?}// 模塊處理接口不為空,則執(zhí)行處理操作 ? ? ?// 模塊輸出適配接口不為空,則執(zhí)行輸出適配操作}????在定好了這些數(shù)據(jù)結構以及封裝之后,我們在每個子模塊中都只需要調(diào)用這個模式即可。例如有一個需求,需要點一個燈,我們建立獨立文件,在文件中申明
// FileName: led.c // 來源:公眾號【技術讓夢想更偉大】 /*led燈運行 */ ADAPTER?LedModule?=?{?vLedInit,?NULL,?vLedRunModule,?NULL?};????那么接下來只需要對初始化函數(shù),邏輯運行函數(shù)進行描述就可以了。同理,我們需要一個按鍵的功能,在另一個獨立文件申請
// FileName: key.c // 來源:公眾號【技術讓夢想更偉大】 /*按鍵運行 */ ADAPTER?KeyModule?=?{?vKeyInit,?NULL,?vKeyRunModule,?NULL?};????這樣的話就便于我們拆分需求,便于移植,同時程序也就模塊化了,最后我們在main文件中做的就是調(diào)用這些函數(shù)就行。我們需要這樣做。
// FileName: main.c// 來源:公眾號【技術讓夢想更偉大】/*主函數(shù) */void main( void ){moduleInit(?&LedModule?????????);????moduleInit(?&keyModule?????????); ? ?while( 1 ) ? ?{????????moduleRun(?&LedModule????????);????????moduleRun(?&keyModule????????); ? ?} }最后
??? main函數(shù)就是這么簡單了,整個架構也是很清晰,體現(xiàn)出編程之美。
聲明:
本文于網(wǎng)絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯(lián)系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的常用于单片机的接口适配器模式C语言实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回购和增持的区别?
- 下一篇: 知识贴!单片机C语言编程之.H文件与.C