硬件工程師必須具備的10種軟件技術(shù)
嵌入式系統(tǒng)設(shè)計不僅需要理解硬件,還需要理解軟件對硬件的影響以及與硬件的交互。設(shè)計硬件所需的范式可能與設(shè)計軟件完全相反。從硬件設(shè)計過渡到包含軟件的設(shè)計時,硬件工程師(news.eda365.com)必須牢記一些軟件技術(shù)。
下面分享一下——硬件工程師必須要做的十大軟件訣竅。
提示#1:流程圖第一,實現(xiàn)第二
工程師第一次進(jìn)入軟件開發(fā)領(lǐng)域時,會有強烈的誘惑,讓他們立即投入工作,開始寫代碼。這相當(dāng)于在電路邏輯圖完成之前設(shè)計印刷電路板(PCB)。在著手開發(fā)軟件時,抑制寫代碼的沖動很重要,所以首先要使用流程圖開發(fā)軟件體系結(jié)構(gòu)。這種方法使開發(fā)人員能夠形成應(yīng)用程序所需的多個部分和程序集的概念,就像電路邏輯圖可以告訴工程師所需的硬件組件一樣。這樣,整個程序可以在良好的組織和深思熟慮的基礎(chǔ)上減少程序調(diào)試時間,長期節(jié)省時間,減少麻煩。
提示#2:使用狀態(tài)機控制程序流
狀態(tài)機是20世紀(jì)最偉大的軟件發(fā)明之一。應(yīng)用程序通??梢苑譃槎鄠€狀態(tài)機,每個狀態(tài)機控制應(yīng)用程序的特定部分。這種狀態(tài)機通過自身的內(nèi)部狀態(tài)和狀態(tài)轉(zhuǎn)換,可以了解軟件如何與各種激勵機制交互。使用狀態(tài)機設(shè)計軟件可以簡化軟件開發(fā),并使其易于模塊化、維護(hù)和理解?,F(xiàn)在有多種資源可以演示狀態(tài)機理論和算法。
提示#3:防止使用全局變量
在函數(shù)式編程的時代,函數(shù)必須先于形式,程序員唯一的目標(biāo)是讓程序盡快運行,而不管程序結(jié)構(gòu)或可重用性如何。這種編程范式無憂地使用程序中所有函數(shù)都可以修改的全局變量。結(jié)果,變量被破壞的概率增加了,或者變量被誤用的可能性增加了。新推薦的面向?qū)ο蠓妒揭笤谧钚》秶鷥?nèi)定義和封裝變量,以防止其他函數(shù)的誤用或損壞。因此,最好限制使用的全局變量的數(shù)量。在c語言中,這些變量可以通過外部關(guān)鍵字進(jìn)行標(biāo)識。
提示#4:利用模塊化功能
不管你問哪個工程師,即使項目的哪個部分最有可能推遲發(fā)貨,超過預(yù)算,答案也是軟件。軟件往往很復(fù)雜,很難開發(fā)和維護(hù)。尤其是當(dāng)整個應(yīng)用程序位于單個文件或多個松散連接的文件中時。為了提高可維護(hù)性、可重用性和復(fù)雜性,程序員最好充分利用現(xiàn)代編程語言的模塊化功能,將通用功能劃分為模塊。通過這種方式分解代碼,程序員可以構(gòu)建函數(shù)和特性庫,然后在一個應(yīng)用程序中再次使用,從而通過連續(xù)測試提高代碼質(zhì)量,同時減少開發(fā)時間,降低開發(fā)成本。提示#5:保持中斷服務(wù)實例的簡單性
中斷服務(wù)例程用于中斷處理器當(dāng)前代碼的執(zhí)行,并處理剛剛觸發(fā)中斷的外圍設(shè)備。每次中斷時,都需要存儲當(dāng)前程序的狀態(tài),運行中斷,然后將處理器恢復(fù)到原始程序狀態(tài)的開銷。現(xiàn)代處理器比幾年前的處理器快得多,但仍要考慮這個成本。一般來說,程序員會盡量減少停機時間,以免干擾主代碼。換句話說,中斷應(yīng)該是短暫而簡單的。中斷不應(yīng)該調(diào)用函數(shù)。此外,如果中斷太復(fù)雜或太耗時,則只有在必要時才使用中斷來執(zhí)行最少的任務(wù)。例如,必須將數(shù)據(jù)加載到緩沖區(qū)中,設(shè)置標(biāo)志,然后讓主代碼處理輸入的數(shù)據(jù)。這樣,大多數(shù)處理器時間將用于運行應(yīng)用程序,而不是處理中斷。
提示#6:使用處理器示例代碼進(jìn)行測試
設(shè)計硬件時,建立原型測試電路總是有益的。這樣,工程師在布置電路之前,就能對電路有正確的了解。設(shè)計軟件時也是如此。硅制造商通常有樣品代碼,可以測試微處理器的各個部分,從而使工程師能夠確定該部分的工作方式。通過這種方法,人們可以清楚地知道如何設(shè)計軟件體系結(jié)構(gòu)以及可能出現(xiàn)的任何問題。了解設(shè)計初期可能存在的障礙比產(chǎn)品配送前最后幾個小時發(fā)現(xiàn)的障礙我最好。這是預(yù)先測試代碼的好方法,但請記住,制造商代碼經(jīng)常不模塊化,必須徹底修改,以便在實際應(yīng)用中使用。隨著技術(shù)的發(fā)展,也許有一天芯片供應(yīng)商會提供可用于生產(chǎn)的代碼。
提示#7:限制功能的復(fù)雜性
工程上有個古老的詞叫“吻”。——簡單直白。處理某些復(fù)雜的事情時,最簡單的方法是把它分解成更小、更簡單、更容易處理的任務(wù)。隨著工作或功能越來越復(fù)雜,人們準(zhǔn)確記錄所有細(xì)節(jié)也變得更加困難。編寫函數(shù)時,其復(fù)雜性在當(dāng)時看起來是適當(dāng)?shù)?,但也要考慮到,6個月后工程師進(jìn)行維護(hù)時需要確認(rèn)代碼。衡量函數(shù)復(fù)雜性(如循環(huán)復(fù)雜性)的方法有多種,現(xiàn)在有了自動計算函數(shù)循環(huán)復(fù)雜性的工具。經(jīng)驗表明,函數(shù)的循環(huán)復(fù)雜性保持在10以下是最理想的。
處理某些復(fù)雜的任務(wù)時,最簡單的方法是把它分解成更容易處理的任務(wù)。
提示#8:使用源代碼存儲庫并經(jīng)常提交代碼
人都會犯錯,寫代碼的時候也會犯錯。這就是開發(fā)人員使用源代碼存儲庫的重要原因。源代碼存儲庫使開發(fā)人員能夠“保存”好的代碼版本,并說明對基本代碼所做的修改。這使開發(fā)人員不僅可以還原或向下鉆取的上一個代碼,還可以比較上一個代碼之間的差異。開發(fā)人員進(jìn)行了一系列修改,系統(tǒng)損壞后,只需單擊一下即可恢復(fù)代碼版本!請記住,如果不經(jīng)常提交代碼,存儲庫將無法達(dá)到預(yù)期的目的。如果做出不可恢復(fù)的更改,過了兩周才提交代碼并恢復(fù),可能會造成很多業(yè)務(wù)和時間損失!提示#9:代碼注釋
在緊張的軟件開發(fā)中,開發(fā)人員可以忽略詳細(xì)注釋,輕松地集中精力編寫和調(diào)試代碼。在壓力下,錫工作經(jīng)常被拖到最后。因為開發(fā)者認(rèn)為這是最后一件事。但是,當(dāng)代碼記憶猶新時,注釋很重要。這樣可以讓其他開發(fā)者或以后自己閱讀注釋,理解代碼是如何工作的。
提示#10:使用Agile開發(fā)過程
無論進(jìn)行什么樣的工程設(shè)計,最好先設(shè)置和遵循流程,以確保質(zhì)量和成本穩(wěn)定,按時交貨。軟件開發(fā)人員成功地開發(fā)了高質(zhì)量的軟件,可以使用Agile開發(fā)過程根據(jù)任務(wù)優(yōu)先級進(jìn)行開發(fā)。優(yōu)先級最高的任務(wù)在指定的時間內(nèi)首先完成,稱為重復(fù)。這種方法的優(yōu)點是能夠順利地保持軟件開發(fā)過程,并根據(jù)結(jié)果和客戶的需求,根據(jù)每次迭代調(diào)整和修改需求和任務(wù)。