上一篇文章討論了設(shè)計(jì)嵌入式軟件架構(gòu)的五個(gè)步驟的第一步驟,我們探討了在嵌入式開發(fā)中將嵌入式軟件系統(tǒng)視為兩種架構(gòu)的好處:獨(dú)立于硬件的應(yīng)用業(yè)務(wù)架構(gòu)和依賴于硬件的實(shí)時(shí)架構(gòu)。
在今天的帖子中,我們將探索設(shè)計(jì)嵌入式軟件架構(gòu)的第二步:識(shí)別和跟蹤數(shù)據(jù)資產(chǎn)。
當(dāng)團(tuán)隊(duì)一起設(shè)計(jì)他們的嵌入式軟件時(shí),工程師有兩種傾向;首先,他們想從第一天就進(jìn)入硬件領(lǐng)域。工程師們表現(xiàn)得好像與硬件交互的底層代碼就是最終產(chǎn)品,一刻也不能浪費(fèi)。不幸的是,這是嵌入式軟件開發(fā)的過(guò)時(shí)觀點(diǎn)。在大多數(shù)系統(tǒng)中,真正的價(jià)值在于應(yīng)用程序代碼,即體系結(jié)構(gòu)中與硬件無(wú)關(guān)的部分。
第二,工程師們幾乎立即開始拋出圍繞中斷、消息傳遞、RTOS交互等設(shè)計(jì)模式的架構(gòu)思想。雖然集思廣益并讓想法得到評(píng)估是很好的,但是你如何知道什么架構(gòu)概念和設(shè)計(jì)模式在第一天就與設(shè)計(jì)問題相匹配呢?答案是你沒有!
一旦嵌入式開發(fā)團(tuán)隊(duì)完成了第一步,分離軟件架構(gòu),設(shè)計(jì)嵌入式軟件架構(gòu)的第二步就是識(shí)別和跟蹤系統(tǒng)中的數(shù)據(jù)資產(chǎn)。數(shù)據(jù)資產(chǎn)是系統(tǒng)用來(lái)幫助其執(zhí)行功能的任何數(shù)據(jù)。例如,嵌入式系統(tǒng)可能有如下數(shù)據(jù)資產(chǎn):
l 加密密鑰
l 唯一的標(biāo)識(shí)號(hào)
l 像素地圖
l 控制器狀態(tài)
更多的數(shù)據(jù)資產(chǎn)進(jìn)入一個(gè)系統(tǒng),當(dāng)我們將一切歸結(jié)為設(shè)計(jì)和構(gòu)建實(shí)時(shí)嵌入式系統(tǒng)時(shí),我們所做的核心工作是管理數(shù)據(jù)。
嵌入式軟件設(shè)計(jì)的首要原則
現(xiàn)代嵌入式軟件設(shè)計(jì)的首要原則是“數(shù)據(jù)決定設(shè)計(jì)”我們可以為完成給定的任務(wù)創(chuàng)建各種令人興奮和獨(dú)特的架構(gòu)。然而,最有效的架構(gòu)是圍繞系統(tǒng)數(shù)據(jù)資產(chǎn)設(shè)計(jì)的架構(gòu)。這是因?yàn)樗?/span>無(wú)關(guān)緊要的垃圾,因?yàn)樗亲钚潞妥顐ゴ蟮?,或者因?yàn)槲覀冋J(rèn)為它是優(yōu)雅的,所以經(jīng)常會(huì)被丟棄。
當(dāng)我們關(guān)注數(shù)據(jù)時(shí),體系結(jié)構(gòu)可能會(huì)過(guò)度關(guān)注它應(yīng)該如何處理數(shù)據(jù)。事實(shí)證明,只能對(duì)數(shù)據(jù)進(jìn)行一些操作。首先,系統(tǒng)可以輸入數(shù)據(jù)。例如,用戶可以按下按鈕或通過(guò)通信接口接收串行數(shù)據(jù)。第二,系統(tǒng)可以輸出數(shù)據(jù)。例如,向顯示器顯示像素圖或驅(qū)動(dòng)電機(jī)。第三,系統(tǒng)可以處理數(shù)據(jù)。例如,可能串行數(shù)據(jù)以分組格式進(jìn)入系統(tǒng),然后進(jìn)行解碼。進(jìn)行處理以驗(yàn)證數(shù)據(jù)包,然后解壓縮存儲(chǔ)的數(shù)據(jù)。最后,系統(tǒng)可以將數(shù)據(jù)存儲(chǔ)在易失性或非易失性存儲(chǔ)器中。
識(shí)別數(shù)據(jù)資產(chǎn)和可以在數(shù)據(jù)上執(zhí)行的操作可以極大地幫助嵌入式開發(fā)團(tuán)隊(duì)設(shè)計(jì)其嵌入式軟件架構(gòu)。數(shù)據(jù)資產(chǎn)就像向架構(gòu)師揮舞的紅旗,表明設(shè)計(jì)中的架構(gòu)需求。不幸的是,太多的團(tuán)隊(duì)忽略了數(shù)據(jù),而是在了解他們?cè)噲D用系統(tǒng)解決的數(shù)據(jù)問題之前追逐現(xiàn)代設(shè)計(jì)模式。
以數(shù)據(jù)為中心的架構(gòu)意味著什么?
許多嵌入式軟件開發(fā)人員會(huì)覺得“數(shù)據(jù)決定設(shè)計(jì)”這個(gè)想法有點(diǎn)奇怪。這很令人驚訝,因?yàn)樵诿嫦驅(qū)ο缶幊讨?,我們專注于?chuàng)建對(duì)象,這些對(duì)象是數(shù)據(jù)的集合,并對(duì)這些數(shù)據(jù)進(jìn)行操作。老實(shí)說(shuō),以數(shù)據(jù)為中心的架構(gòu)設(shè)計(jì)觀點(diǎn)并不新鮮。然而,從數(shù)據(jù)的角度來(lái)看架構(gòu)有很多優(yōu)點(diǎn)。
首先,以數(shù)據(jù)為中心的架構(gòu)方法非常適合那些系統(tǒng)存在安全問題的團(tuán)隊(duì)。如果你對(duì)保護(hù)你的嵌入式系統(tǒng)感興趣,你必須執(zhí)行威脅模型安全分析(TMSA)。這種分析要求開發(fā)人員識(shí)別系統(tǒng)中的各種數(shù)據(jù)資產(chǎn),并確定他們需要的保護(hù)級(jí)別。TMSA需要在設(shè)計(jì)系統(tǒng)架構(gòu)之前執(zhí)行,這意味著數(shù)據(jù)決定的架構(gòu)所需的許多細(xì)節(jié)已經(jīng)可用。
第二,識(shí)別數(shù)據(jù)資產(chǎn)可以幫助我們確定如何在組件級(jí)別分解系統(tǒng)。假設(shè)我們是優(yōu)秀的架構(gòu)師,并遵循單一責(zé)任原則(SRP)。在這種情況下,很有可能我們識(shí)別的每個(gè)數(shù)據(jù)資產(chǎn)都將被包裝在它的模塊中,并具有對(duì)其進(jìn)行操作的功能。
第三,跟蹤各種數(shù)據(jù)資產(chǎn)如何交互可以開始提示系統(tǒng)在應(yīng)用程序級(jí)別的架構(gòu)。例如,在嵌入式開發(fā)中,假設(shè)我可以看到輸入到系統(tǒng)中的數(shù)據(jù)及其與處理數(shù)據(jù)的速率相比的高頻率。在這種情況下,我可以開始將交互與接收數(shù)據(jù)的輸入活動(dòng)和處理數(shù)據(jù)的活動(dòng)綁定。在早期的架構(gòu)階段,我不會(huì)選擇是使用中斷、緩沖區(qū)還是直接內(nèi)存訪問(DMA)來(lái)接收高頻數(shù)據(jù)輸入。我只想把問題解決,等到有必要時(shí)再做最后決定。我不會(huì)立即跳出來(lái)說(shuō)處理活動(dòng)是一項(xiàng)RTOS任務(wù)。該活動(dòng)可能是一項(xiàng)任務(wù)或其他內(nèi)容?,F(xiàn)在說(shuō)還為時(shí)過(guò)早。雖然工程師經(jīng)常努力盡快鎖定盡可能多的細(xì)節(jié),但優(yōu)秀的軟件架構(gòu)師會(huì)盡可能長(zhǎng)時(shí)間地推遲決策,以最大限度地提高靈活性。
結(jié)論
設(shè)計(jì)嵌入式軟件架構(gòu)的第二步是識(shí)別和跟蹤系統(tǒng)中的數(shù)據(jù)資產(chǎn)。對(duì)于一個(gè)通常專注于硬件的嵌入式軟件工程師來(lái)說(shuō),過(guò)度關(guān)注數(shù)據(jù)似乎有些奇怪。改變我們思維模式的一個(gè)方法是修改嵌入式軟件的定義,使其:
嵌入式軟件是為確定性運(yùn)行而設(shè)計(jì)和構(gòu)建的代碼,通常有實(shí)時(shí)期限,通過(guò)各種形式的輸入、處理、輸出和存儲(chǔ)來(lái)管理數(shù)據(jù)。
強(qiáng)大的嵌入式軟件架構(gòu)允許數(shù)據(jù)決定設(shè)計(jì)。在嵌入式開發(fā)中,識(shí)別數(shù)據(jù),然后跟蹤它如何與系統(tǒng)中的其他數(shù)據(jù)交互,可以幫助軟件架構(gòu)師看到架構(gòu)是如何出現(xiàn)的。架構(gòu)圖通常從30,000英尺的高處開始,提示組件和任務(wù)可能有意義的地方。然而,在這個(gè)階段,我們只想識(shí)別數(shù)據(jù)資產(chǎn)和它們所涉及的操作。