不管是代碼的維護(hù)還是開(kāi)發(fā)的質(zhì)量都是一名的嵌入式工程師都要去考慮的,隨著嵌入式的產(chǎn)品在市面的運(yùn)用越來(lái)越多,現(xiàn)在對(duì)于嵌入式系統(tǒng)的要求也就越高了。也因?yàn)榍度胧绞且婚T(mén)IT開(kāi)發(fā)技術(shù),而IT行業(yè)又是日新月異的行業(yè),所以說(shuō)在技術(shù)上面的要求也就越高了,下面達(dá)內(nèi)科技給大家講講嵌入式編程培訓(xùn)中提高開(kāi)發(fā)質(zhì)量的小技巧都有哪些?
技巧1:嵌入式編程培訓(xùn)中要避免使用匯編代碼
當(dāng)然,在低端PIC上您別無(wú)選擇,而在高端ARM上您可能不需要它,但是在這兩種極端之間,有很多平臺(tái)使用匯編代碼來(lái)實(shí)現(xiàn)以下目的:提高性能并減少代碼大小。但是,問(wèn)題在于,簡(jiǎn)單地選擇使用匯編代碼可能會(huì)使您的項(xiàng)目脫軌,并使您陷入困境。盡管匯編代碼允許您直接訪問(wèn)機(jī)器的功能,但由于難以理解程序中正在發(fā)生的事情,因此可以輕易地忽略性能優(yōu)勢(shì)。正是出于這個(gè)原因,構(gòu)思了語(yǔ)言,例如C和Java。
技巧2:嵌入式編程培訓(xùn)中要避免注釋蠕變
這是一個(gè)通用的編程技巧,但是在長(zhǎng)壽命應(yīng)用程序中變得尤為重要的技巧“管理您的注釋與它們記錄的代碼的關(guān)聯(lián)。隨著代碼的更新,注釋的遷移非常容易,并且結(jié)果很難理解。以下示例說(shuō)明了隨著時(shí)間的推移,注釋蠕變的發(fā)生有多么容易。
技巧3:嵌入式編程培訓(xùn)中不要過(guò)早優(yōu)化。
編程的主要缺點(diǎn)之一是過(guò)早的優(yōu)化。但是,由于時(shí)間限制,草率的編碼或過(guò)分熱心的工程師,該規(guī)則在實(shí)踐中經(jīng)常被打破。您編寫(xiě)的任何程序都應(yīng)盡可能簡(jiǎn)單地開(kāi)始,并且仍然提供所需的功能。“如果需要性能,請(qǐng)嘗試簡(jiǎn)單地實(shí)現(xiàn)該程序,即使它與性能不匹配。
一旦測(cè)試并調(diào)試了完整的單元(它是大型系統(tǒng)的編程器或組件),然后回去進(jìn)行優(yōu)化。危險(xiǎn)地優(yōu)化代碼會(huì)導(dǎo)致維護(hù)噩夢(mèng),因?yàn)閮?yōu)化后的代碼通常較難理解,并且您可能無(wú)法理解您需要的性能結(jié)果。理想情況下,使用探查器(例如與GCC一起使用的gprof或Intel的VTune)來(lái)查看瓶頸所在,并專注于這些領(lǐng)域-真正緩慢的事情可能會(huì)讓您感到驚訝。
技巧4:嵌入式編程培訓(xùn)中的ISR應(yīng)該很簡(jiǎn)單
出于性能和維護(hù)方面的考慮,中斷服務(wù)例程(ISR)應(yīng)該盡可能簡(jiǎn)單。作為異步性質(zhì)的ISR本質(zhì)上比“常規(guī)”程序代碼更難調(diào)試,因此將其責(zé)任降到對(duì)于您的應(yīng)用程序的總體可維護(hù)性很重要。嘗試將所有數(shù)據(jù)處理移出ISR并移至主程序中,然后ISR僅負(fù)責(zé)獲取數(shù)據(jù)(例如,從硬件中獲取)并將其放置在緩沖區(qū)中以備后用??梢允褂靡粋€(gè)簡(jiǎn)單的標(biāo)志來(lái)向主程序發(fā)出信號(hào),通知有要處理的數(shù)據(jù)。
技巧5:嵌入式編程培訓(xùn)中要將調(diào)試代碼保留在源文件中
在開(kāi)發(fā)過(guò)程中,您可能會(huì)添加大量旨在調(diào)試“詳細(xì)輸出,聲明,LED閃爍等”的代碼。當(dāng)項(xiàng)目結(jié)束時(shí),可能很想刪除其中的這些部分。代碼以清理整個(gè)應(yīng)用程序,尤其是在隨意添加調(diào)試代碼的情況下。
技巧6:嵌入式編程培訓(xùn)中要為系統(tǒng)調(diào)用編寫(xiě)包裝器
嘗試通過(guò)接口將低級(jí)I / O例程與程序邏輯分開(kāi),因?yàn)橥ㄟ^(guò)單片開(kāi)發(fā)可以使程序難以管理。將應(yīng)用程序的所有功能放到幾個(gè)大功能中會(huì)使代碼難以理解,并且更難更新和調(diào)試。對(duì)于硬件接口尤其如此。您可能可以直接訪問(wèn)硬件寄存器或I / O,甚至可以訪問(wèn)平臺(tái)供應(yīng)商提供的API,但是有很多動(dòng)機(jī)來(lái)創(chuàng)建自己的“包裝程序”接口。
技巧7:僅分解功能
嵌入式應(yīng)用程序?qū)⑴cPC應(yīng)用程序不同,因?yàn)樵S多功能將專用于您正在使用的硬件。不建議將功能單元盡可能地拆分為小–將單個(gè)作用域(功能)中的功能調(diào)用數(shù)保持在5或6以下,并使硬件的功能單元與軟件中的功能單元相對(duì)應(yīng)。進(jìn)一步分解程序?qū)?chuàng)建調(diào)用圖的蜘蛛網(wǎng),從而使調(diào)試和理解變得困難。
技巧8:文檔
保留所有文檔以及代碼,理想情況下,還應(yīng)保留硬件副本。在記錄應(yīng)用程序時(shí),請(qǐng)嘗試將盡可能多的設(shè)計(jì)和應(yīng)用程序模型直接放入源代碼中。如果必須將其分開(kāi),則將其作為巨大的注釋放入源文件中,并將其鏈接到程序中。
技巧9:不要機(jī)靈!
類似于過(guò)早的優(yōu)化,聰明的編碼會(huì)導(dǎo)致麻煩。由于C和C ++仍然是嵌入式世界中的主導(dǎo)語(yǔ)言,因此有很多方法可以解決一個(gè)問(wèn)題。模板,繼承,goto,三元運(yùn)算符(“?”),列表會(huì)不斷出現(xiàn)。
真正聰明的程序員可以提出使用這些工具解決問(wèn)題的極其緊湊和優(yōu)雅的方法。問(wèn)題是通常只有程序員才能理解聰明的解決方案(以后可能會(huì)忘記它是如何工作的)。
技巧10:嵌入式編程培訓(xùn)中要將所有定義放在一個(gè)地方
如果您有很多常量定義或條件定義,請(qǐng)將它們放在中央位置。這可能是單個(gè)文件或源代碼目錄,但是如果將定義深埋在實(shí)現(xiàn)中,它會(huì)再次咬住您。




