硬件和軟件的開發(fā)過程似乎有些相似:發(fā)布了需求規(guī)范;精心設(shè)計;結(jié)果使用一種特殊的語言進行編碼(用于硬件的HDL和用于軟件的編程語言)。但是相似之處到此為止。
啟動硬件生產(chǎn)時,硬件設(shè)計會在某些時候凍結(jié)。在此之后進行更改通常會很麻煩且昂貴。另一方面,軟件永遠不會完成。調(diào)整和完善將持續(xù)到最后一刻。調(diào)整代碼并進行重建非常容易。這既是優(yōu)點也是缺點。
由于軟件可以延展性強,因此有機會進行廣泛的測試并修復仍然存在的錯誤。靈活性的不利之處在于,人們傾向于在最后時刻進行增強和完善。“蠕動的優(yōu)雅”是真正的危險。這些挑戰(zhàn)都是與軟件相關(guān)的,但情況越來越糟……
如果在凍結(jié)設(shè)計后檢測到硬件錯誤怎么辦?
硬件問題通常昂貴且處理不便。一個非常常見的解決方案是“將其修復在軟件中”。這樣的修復可能是微不足道的,軟件工程師應(yīng)該很高興能夠為他們的硬件同行提供幫助。但是,在其他情況下,對代碼的調(diào)整可能會完全損害軟件設(shè)計。
設(shè)計中的錯誤與“怪異”之間存在一定程度的模糊性,“怪異”對于硬件開發(fā)人員來說并不奇怪,但需要包含在軟件中。我們可以用一些示例來說明軟件需要在哪些地方容納硬件的怪異之處。
翻轉(zhuǎn)位
嵌入式系統(tǒng)中最簡單的輸入設(shè)備是開關(guān)或按鈕。憑直覺,可以預期處于“關(guān)閉”位置的開關(guān)(或未按下的按鈕)將顯示為0值,并在打開(或按下按鈕)時轉(zhuǎn)換為1。但是,在幾乎所有情況下,情況都是相反的:關(guān)閉開關(guān)顯示為1并轉(zhuǎn)換為0。這是因為它簡化了硬件設(shè)計,可以將輸入引腳“上拉”為邏輯1并將其接地(下拉為0)。 )表示輸入。當然,一旦開發(fā)人員對此有所了解,在軟件中的容納就變得微不足道了。
彈跳
關(guān)于開關(guān)或按鈕的另一個自然期望是,它將僅在兩種邏輯狀態(tài)之間轉(zhuǎn)換。但是,機械開關(guān)的行為通常不是很理想-觸點閉合,然后彈跳開一次或多次,然后降落到閉合位置。此行為的結(jié)果是,預期的從1到0的過渡可能會快速連續(xù)地重復幾次,未經(jīng)檢查,可能會被錯誤地解釋。想象一下按下一個按鈕會增加一個設(shè)置,但通常會將其增加2或3而不是1!
這可以固定在硬件中,但這要付出復雜性和材料清單的代價。多年來,“修復軟件”是最佳的選擇,并且已經(jīng)設(shè)計了許多“反跳”算法。
一切都與時機有關(guān)
一些復雜的外圍硬件可能會響應(yīng)軟件寫入寄存器的命令。硬件通過執(zhí)行一系列動作來響應(yīng)命令的情況并不少見,在此期間它不會響應(yīng)其他命令。這不是故障,因為硬件設(shè)計人員希望設(shè)備以此方式運行。但是,從軟件開發(fā)人員的角度來看,這似乎是不合邏輯的。
這給軟件帶來了挑戰(zhàn)。需要包括安全措施,以便在發(fā)出命令時,必須經(jīng)過一段適當?shù)臅r間才能編寫另一條命令。在簡單的應(yīng)用中,某種延遲循環(huán)可能就足夠了。在更復雜的軟件中,可能無法在空閑循環(huán)中占用CPU,因為還有其他處理要做。在這種情況下,需要更復雜的計時機制。
大端或小端
有多種方式可以表示一個單詞(甚至一個字節(jié))內(nèi)的數(shù)據(jù)。一個簡單的例子是單詞中字節(jié)的順序。他們可能是最不重要的第一或最重要的。兩種方法都不對,而且不同的CPU歷來都是小端或大端的。因此,幾乎不可避免的是,鏈接在一起的兩個子系統(tǒng)可能對數(shù)據(jù)表示有不同的想法。
這是在軟件中修復的另一種候選方法,僅字節(jié)交換或循環(huán)。挑戰(zhàn)在于將接口的使用本地化到執(zhí)行轉(zhuǎn)換的軟件的一小部分。
增加功能
除了規(guī)避硬件中的錯誤和怪異之外,以節(jié)省成本為名,或者因為該功能在開發(fā)過程的后期就被夢想了,可以在硬件中有效實施的功能可以卸載到軟件中并不少見。
這是微處理器控制的替代品,用于伺服液壓系統(tǒng)上的大型硬接線控制面板。當時,在微處理器中擁有如此巨大的計算能力的想法令人鼓舞,當然,開發(fā)人員對此感到迷戀。硬件設(shè)計已經(jīng)完成,并在非常好的時間內(nèi)凍結(jié),使生產(chǎn)能夠按計劃進行。在新功能的想法泛濫之前,軟件開發(fā)一直進展順利。該軟件被迫屈服(即,其實時行為受到損害),因此必須進行重大設(shè)計審查。
隱藏硬件問題:驅(qū)動程序
長期以來,人們已經(jīng)認識到,訪問和控制硬件對于沒有經(jīng)驗的或缺乏經(jīng)驗的嵌入式軟件開發(fā)人員可能是一個特殊的挑戰(zhàn)。結(jié)果,出現(xiàn)了設(shè)備驅(qū)動程序的概念。驅(qū)動程序只是一個很小的軟件,它封裝了使用某些硬件的笨拙并提供了與應(yīng)用程序代碼的合理接口。
它是在驅(qū)動程序中容納了硬件設(shè)計的怪癖,理想情況下,應(yīng)該在其中進行調(diào)整以解決意外的功能或非功能。
責任編輯:Ct
評論