日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

如何設(shè)計(jì)一個(gè)好的軟件架構(gòu),如何提高軟件的擴(kuò)展性,移植性,復(fù)用性和可讀性?

很多做嵌入式開發(fā)的朋友經(jīng)常會(huì)遇到這種情況:一個(gè)項(xiàng)目軟件設(shè)計(jì)完成了,客戶提出了一些新的功能需求。這時(shí)侯如果客戶新需求不多,軟件增加一些新功能即可,但是增加新功能后程序容易出現(xiàn)各種異常問題;這時(shí)侯如果客戶新需求很多,導(dǎo)致軟件全局很多地方需要修改,甚至有可能導(dǎo)致軟件重寫。造成這種結(jié)果的原因是,軟件設(shè)計(jì)沒有遵循軟件設(shè)計(jì)原則,沒有使用正確的設(shè)計(jì)模式和正確的軟件架構(gòu)。

軟件設(shè)計(jì)五大原則:?jiǎn)我辉瓌t ,開閉原則,里氏代換原則,接口隔離原則,依賴倒置原則。

27種設(shè)計(jì)模式:適配器模式,裝飾模式,觀察者模式,迭代器模式,拜訪者模式等等(不一一列舉)。

軟件架構(gòu):分層架構(gòu),過濾器架構(gòu),插件架構(gòu),MVC架構(gòu)等等。

規(guī)則和方法繁多,往往難以融會(huì)貫通地使用到實(shí)際項(xiàng)目中,接下來我用一個(gè)項(xiàng)目來介紹如何遵循軟件設(shè)計(jì)原則,如何使用良好的設(shè)計(jì)模式和架構(gòu),這個(gè)項(xiàng)目是一個(gè)用于智能家具系統(tǒng)的網(wǎng)關(guān)軟件設(shè)計(jì)項(xiàng)目。

我們先來了解一下智能家居系統(tǒng),它是由網(wǎng)關(guān),智能觸控屏,控制模塊,檢測(cè)模塊等組成,實(shí)現(xiàn)對(duì)家居設(shè)備智能控制。該系統(tǒng)可以控制燈,空調(diào),窗簾,藍(lán)牙音樂,地暖等家居設(shè)備。用戶可以通過語音指令,智能觸控屏,手機(jī)App,電腦云端等方式監(jiān)控家居設(shè)備狀態(tài)。該系統(tǒng)應(yīng)用場(chǎng)景如圖:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

網(wǎng)關(guān)功能描述

智能家居系統(tǒng)的控制樞紐是網(wǎng)關(guān),網(wǎng)關(guān)的主要任務(wù)是實(shí)現(xiàn)對(duì)觸控模塊,控制模塊,檢測(cè)模塊的狀態(tài)監(jiān)測(cè)和控制。網(wǎng)關(guān)的功能如下:

1、使用嵌入式以太網(wǎng)控制器硬件實(shí)現(xiàn)TCP訪問局域網(wǎng)內(nèi)的本地服務(wù)器和外網(wǎng)的云端服務(wù)器。本地服務(wù)器可以配置網(wǎng)關(guān)參數(shù),可以通過網(wǎng)口對(duì)網(wǎng)關(guān)固件進(jìn)行升級(jí),用戶通過手機(jī)APP使用云端服務(wù)器下發(fā)數(shù)據(jù)給網(wǎng)關(guān)。

2、使用485總線接收面板的和環(huán)境傳感器的上報(bào)數(shù)據(jù),分析數(shù)據(jù)并下發(fā)485指令操作開關(guān)控制器實(shí)現(xiàn)對(duì)執(zhí)行單元的控制。

3、用戶可以通過擴(kuò)展的輸入輸出IO口,實(shí)現(xiàn)簡(jiǎn)單的開關(guān)輸入和控制。

網(wǎng)關(guān)硬件描述

網(wǎng)關(guān)的硬件使用華大的HC32F460單片機(jī)為核心,外圍設(shè)備有485電路,RTC電路,LCD電路,以太網(wǎng)控制器電路,IO控制電路。網(wǎng)關(guān)的硬件框圖如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

軟件框架

網(wǎng)關(guān)軟件使用FreeRTOS操作系統(tǒng),采用了模塊化設(shè)計(jì)方法,每個(gè)功能獨(dú)立成一個(gè)模塊,每個(gè)單獨(dú)的模塊采用了分層設(shè)計(jì)。軟件框架圖如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

軟件使用了模塊化設(shè)計(jì)的方法,模塊化設(shè)計(jì)核心思想就是“分而治之”, 就是把一個(gè)復(fù)雜的問題分解為若干個(gè)簡(jiǎn)單的問題,然后逐個(gè)解決。在嵌入式軟件設(shè)計(jì)中通常以硬件外設(shè)劃分模塊如:485模塊,RTC模塊,LCD模塊,溫濕度模塊,ADC數(shù)據(jù)采集模塊,GPIO控制模塊等。模塊化設(shè)計(jì)提高了軟件系統(tǒng)的擴(kuò)展性,模塊可以根據(jù)需求布署和刪除,模塊化設(shè)計(jì)遵循了單一原則。軟件工程源碼中模塊的劃分如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

單獨(dú)的功能模塊采用了的分層設(shè)計(jì),分層設(shè)計(jì)的核心思想也是“分而治之”,分層設(shè)計(jì)將軟件功能水平分割成合理的多個(gè)子系統(tǒng),軟件中緊密關(guān)聯(lián)的部分被集中放在一個(gè)層內(nèi)。分層設(shè)計(jì)的框圖如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

分層架構(gòu)有以下優(yōu)點(diǎn):

1、每一層都把一個(gè)具體功能抽象化。

2、可以降低代碼的相互依賴程度,更改代碼時(shí)影響的層很少。

3、層可以被復(fù)用。

軟件工程源碼中GPIO任務(wù)的BSP層代碼如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

每個(gè)層都有一個(gè)xxxx_interface()函數(shù),上層文件通過這個(gè)函數(shù)使用下層提供的服務(wù),這種設(shè)計(jì)原則為接口隔離原則。3層模型的調(diào)用關(guān)系圖如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

每個(gè)功能模塊采用了3層的分層設(shè)計(jì),第1層處理MCU寄存器相關(guān)操作,第2層處理驅(qū)動(dòng)控制和邏輯控制,第2層用來處理與其他業(yè)務(wù)模塊的數(shù)據(jù)交互.分層設(shè)計(jì)提高了軟件系統(tǒng)的移植性,如果項(xiàng)目更換了MCU那么只用修改第1層,如果更換改了外設(shè)那么只用修改第2層,如果更改了業(yè)務(wù)邏輯那么只用修改第3層。

任務(wù)之間通信

網(wǎng)關(guān)軟件中的普通任務(wù)相互隔離,所有普通任務(wù)只與消息推送任務(wù)進(jìn)行數(shù)據(jù)交互,消息推送任務(wù)將消息推送給相應(yīng)任務(wù)。各個(gè)任務(wù)之間的信息交互模式如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

這種設(shè)計(jì)模式為中間者模式。在中間者模式,對(duì)象之間不能直接通信,而是間接地通過中間者進(jìn)行通信。中間者收到信息后,再將信息轉(zhuǎn)發(fā)給相關(guān)對(duì)象,這樣減少了對(duì)象之間的相互依賴。中間者模式有以下優(yōu)點(diǎn):

1、對(duì)象之間是松耦合

2、將多對(duì)多的關(guān)系通過中間者轉(zhuǎn)換成一對(duì)一的關(guān)系

3、修改一個(gè)對(duì)象,不需要考慮其它對(duì)象通信適應(yīng)問題。

消息推送任務(wù)采用訂閱與發(fā)布機(jī)制。普通任務(wù)狀態(tài)改變向消息推送任務(wù)發(fā)布消息,推送任務(wù)獲取發(fā)布任務(wù)的發(fā)布信息名稱,并一層檢查其他任務(wù)的訂閱信息名稱,是否包含發(fā)布信息名稱,然后將信息推送給相關(guān)任務(wù)。這樣減少了任務(wù)之間的耦合,提高了軟件的擴(kuò)展性。消息推送任務(wù)代碼如下:

 

嵌入式軟件架構(gòu)設(shè)計(jì)

 

業(yè)務(wù)控制

網(wǎng)關(guān)軟件使用模塊化設(shè)計(jì),普通任務(wù)不參入軟件的整體業(yè)務(wù)控制,每個(gè)普通任務(wù)只負(fù)責(zé)完成模塊內(nèi)部的控制邏輯,如RTC任務(wù)時(shí)負(fù)責(zé)設(shè)置時(shí)間和讀取時(shí)間,GPIO只負(fù)責(zé)讀取IO口和控制IO口。軟件設(shè)計(jì)了一個(gè)特殊的邏輯控制任務(wù),這個(gè)任務(wù)負(fù)責(zé)記錄軟件整體狀態(tài),并通過發(fā)布消息改變其他的任務(wù)的狀態(tài)。這種也是使用的中間者模式。邏輯框圖如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

邏輯控制任務(wù)是通過發(fā)布特定的消息來實(shí)現(xiàn)對(duì)子任務(wù)的控制,子任務(wù)狀態(tài)改變后也是通過發(fā)布消息通知邏輯控制任務(wù)。

邏輯控制任務(wù)分析

網(wǎng)關(guān)軟件中邏輯控制任務(wù)控制整個(gè)程序運(yùn)行狀態(tài),因此邏輯控制任務(wù)設(shè)計(jì)非常關(guān)鍵,邏輯控制任務(wù)設(shè)計(jì)軟件設(shè)計(jì)框架如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

子任務(wù)將信息發(fā)布給邏輯控制任務(wù),由于不同的子任務(wù)發(fā)布的消息格式不同,數(shù)據(jù)長(zhǎng)度不同,因此邏輯控制任務(wù)先用指令歸一化接口,將不同模塊的不同格式的數(shù)據(jù)轉(zhuǎn)換成邏輯任務(wù)中統(tǒng)一的數(shù)據(jù)格式如:指令類型+指令數(shù)據(jù)。代碼如下:

嵌入式軟件架構(gòu)設(shè)計(jì)

 

指令歸一化處理后將指令放入隊(duì)列緩存器中,然后指令過濾器讀取隊(duì)列緩存器中的指令進(jìn)行處理,這種設(shè)計(jì)模式為命令模式,這種設(shè)計(jì)模式可以把一個(gè)命令的形成和執(zhí)行在時(shí)間上去耦,命令的生成和執(zhí)行可以在不用時(shí)間完成。

指令過濾器從指令隊(duì)列中讀取指令,并一層一層處理指令得到有效的執(zhí)行指令,這種設(shè)計(jì)構(gòu)架為過濾器構(gòu)架,代碼如下:

 

嵌入式軟件架構(gòu)設(shè)計(jì)

 

經(jīng)過邏輯處理后產(chǎn)生一些控制指令,并將控制指令放入隊(duì)列緩存,指令分發(fā)處理模塊讀取控制指令,根據(jù)控制指令類型發(fā)布消息給相應(yīng)的任務(wù)。

總結(jié)

網(wǎng)關(guān)的軟件框架基本描述完了,希望獲取源碼的朋友們可以在評(píng)論區(qū)里留言,我將提供學(xué)習(xí)源碼(刪減部分與商業(yè)相關(guān)代碼)。

總結(jié)一下關(guān)鍵詞:

模塊化設(shè)計(jì),分層設(shè)計(jì),單一原則,接口隔離原則,中間者模式,訂閱發(fā)布,歸一化,命令模式,過濾器架構(gòu)

嵌入式軟件架構(gòu)設(shè)計(jì)

 

分享到:
標(biāo)簽:架構(gòu) 設(shè)計(jì)
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定