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