淺談軟件硬件聯(lián)系
軟件硬件看似兩個(gè)分家的東西,其實(shí)內(nèi)在有千絲萬(wàn)縷的聯(lián)系。我舉一些小例子:
開(kāi)關(guān)電源的電感在一個(gè)時(shí)鐘周期內(nèi),要滿足伏秒平衡。物理意義是,開(kāi)關(guān)周期內(nèi)電感吸收的能量和釋放的能量應(yīng)該是相等的。否則,系統(tǒng)不會(huì)平衡,不穩(wěn)定。對(duì)于軟件系統(tǒng),特別是復(fù)雜的大型系統(tǒng),雖然有嚴(yán)謹(jǐn)?shù)睦碚撊ヅ袛嘁粋(gè)軟件模塊的穩(wěn)定性。但對(duì)于程序員調(diào)試,并不是一個(gè)簡(jiǎn)單輕松的過(guò)程?梢越梃b伏秒平衡的思路,一個(gè)大型的代碼在一個(gè)狀態(tài)結(jié)束時(shí),除了一些統(tǒng)計(jì)變量之外,應(yīng)該是回到最初的狀態(tài),具體的體現(xiàn):內(nèi)存釋放與申請(qǐng),系統(tǒng)輸出的結(jié)果等應(yīng)和最初狀態(tài)一致。棧在沒(méi)有中斷回到初始位置時(shí),應(yīng)該也是回到最初位置的。否則,系統(tǒng)會(huì)不穩(wěn)定。
關(guān)于初始化,一直不被軟件工程師所重視。硬件工程師有時(shí)候也會(huì)忽視這個(gè)問(wèn)題。軟件中的初始化,從宏觀上講,模塊的初始化;啟動(dòng)操作系統(tǒng)的準(zhǔn)備工作;任務(wù)棧,堆的準(zhǔn)備。從微觀上講,變量的初始化,全局構(gòu)造函數(shù),全局變量初始化。對(duì)于硬件,上電的順序;芯片管腳上電的狀態(tài)。數(shù)字芯片的初始邏輯狀態(tài)。模擬信號(hào)的初始范圍等等。有一些音箱,開(kāi)機(jī)的時(shí)候會(huì)砰一聲。這個(gè)是上電產(chǎn)生的電流沖擊,比較難抑制。消音電路很難做好。一些高級(jí)的CPU,會(huì)有上電順序要求。一些可靠的系統(tǒng),要求上電,掉電,信號(hào)都必須有確定的狀態(tài)。單純的硬件去做,有時(shí)候很困難。可能需要軟件硬件一起結(jié)合著做。Bootloader 為了后續(xù)的應(yīng)用代碼做了很多初始化工作。
在軟件抽象一些客觀事物時(shí),可以參考硬件的抽象。比如說(shuō)以太網(wǎng)相對(duì)于處理器是個(gè)低速設(shè)備,為了解決無(wú)休止的中斷,DMA 可以大大緩解處理器的壓力。如果處理器抽象成一個(gè)類、以太網(wǎng)抽象成一個(gè)類,那么DMA可以看作一個(gè)通信關(guān)聯(lián)類了。其參數(shù)的抽象和深入的分析,對(duì)軟件設(shè)計(jì)和硬件設(shè)計(jì)都是個(gè)極大的促進(jìn)。
芯片是別人給你的庫(kù)函數(shù)。完成各種各樣的功能。軟件開(kāi)發(fā)過(guò)程中,需要了解庫(kù)函數(shù)的執(zhí)行行為,參數(shù)范圍,使用技巧,應(yīng)用場(chǎng)景。其實(shí),芯片的應(yīng)用也是一樣的。需要了解管腳的功能定義,芯片的動(dòng)作行為,應(yīng)用場(chǎng)景,功耗等等各方面的信息。了解得越細(xì),對(duì)應(yīng)用越有幫助。
軟件硬件的結(jié)合,主要是洞悉背后解決問(wèn)題的方法,處理實(shí)際的工程問(wèn)題。
編輯:admin 最后修改時(shí)間:2018-01-05