嵌入式軟件工程師:兩手都要硬!
1992年,那是一個春天,有一位老人,在中國的南海邊寫下詩篇,其心也比金堅,其字也動人心弦,其中有云:一手抓經(jīng)濟建設(shè),一手抓精神文明建設(shè),兩手都要抓,兩手都要硬。多年下來,勤勞、務實的中國人民在鄧公囑托之下,聚精會神搞建設(shè),全心全意謀發(fā)展,在大力發(fā)展經(jīng)濟、滿足人民對物質(zhì)生活的美好期待之余,也以各種低俗網(wǎng)絡小說、無腦商業(yè)大片、娛樂至上的各大衛(wèi)視節(jié)目豐富著人們的精神生活。除了國家和社會的發(fā)展,兩手都要抓,兩手都要硬的原則也以其頗合“中庸之道”,在各個領(lǐng)域發(fā)揮著重要的指導作用,比如筆者,就在多年職業(yè)生涯的風風雨雨中,悟出想干好嵌入式軟件工程師,軟件、硬件兩手都要硬的經(jīng)驗體會。
本文引用地址:http://2s4d.com/article/201810/392926.htm硬件搭臺 軟件唱戲
嵌入式軟件開發(fā)和PC軟件開發(fā)多有不同,究其根源,個中區(qū)別主要歸因于硬件平臺的差異。在Wintel聯(lián)盟多年的絞殺下,PC軟件就一個硬件平臺,無論多么花哨的PC軟件,也都只是在x86這個大觀園中打轉(zhuǎn)悠。多年來用情專一,兩兩不相生厭,灑家也是頗為佩服PC軟件工程師的。不過嵌入式軟件就不同了,且看嵌入式系統(tǒng)的定義:
“以應用為中心、以計算機技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應于應用系統(tǒng)對功能、可靠性、成本、體積、功耗等方面有特殊要求的專用計算機系統(tǒng)?!?/p>
可以說,嵌入式系統(tǒng)是硬件搭臺,軟件唱戲,軟件和硬件面向特定應用,高度可定制,同時也高度融合,正所謂我中有你、你中有我,你儂我儂、水乳交融。硬件搭不好,軟件跑不了,所以在開發(fā)軟件之前一般要先調(diào)好電路,好似把舞臺搭好一般。軟件不能跑,硬件瞪眼了,沒有功能的硬件就是女媧娘娘手中的小泥人,軟件就好像那一口仙氣,沒有這口仙氣,硬件的世界就是天地玄黃、宇宙洪荒,女媧娘娘吹了這口仙氣,硬件的世界才大夢初醒,揮灑張揚。
搭幫結(jié)伙 地老天荒
據(jù)說戀愛中的情侶、婚姻中的兩口子都有那么幾天,瘋狂地想要掐死對方,情緒過去,又會牽起手共同走向前方。其實,在日常開發(fā)工作中,嵌入式硬件工程師和軟件工程師有時也會吵得不可開交,大有不共戴天之勢,灑家多年工作生涯,一向以和為貴,有時也會失了方寸吼上一番,但是,好在嵌入式工程師是世界上最單純、最可愛的群體,心地單純的軟件工程師和硬件工程師大多數(shù)時間都是舉案齊眉、卿卿我我,并在多年的磨合中更加合作默契,心心相印。
軟件工程師和硬件工程師之間的合作就像搭幫結(jié)伙,一起說相聲。相聲演員經(jīng)常把一句話掛在嘴邊:“三分逗,七分捧”,但是據(jù)說分賬時又會沒皮沒臉地四六開(逗哏拿六成,捧哏拿四成),在嵌入式這個行業(yè)也有一個不成文的說法,硬件和軟件三七開,更有甚者(肯定是一小撮自大過頭的軟件工程師)認為軟件能占到80%的工作量。灑家并不贊同這種歧視性的分法。世尊當年于菩提樹下,夜矚明星,悟道成佛,初成正覺已,嘆曰:“奇哉,一切眾生皆有如來智慧德相,但以妄想、分別、執(zhí)著不能證得?!比藚?,本來可享受無邊清涼,卻因為頭上安頭、妄生分別,輪回于熱惱之中不可自拔。
可是話說回來,做為道道地地的凡夫眾生,做為一名略懂硬件但專職干軟件的嵌入式軟件工程師,我還是要站在自己這個小群體中分別一番的。
嵌入式軟件工程師是一個光榮而神圣的角色,他單純而內(nèi)斂,視名利如浮云,在日復一日的編碼中揮灑青春和熱血。他使出渾身解數(shù),將代碼捧于掌心,精加工,細打磨,為的只是讓壽命周期長的系統(tǒng)能夠經(jīng)受住歲月的洗禮,而依然光芒綻放。也許在日常生活中他老實巴交、呆板木訥,也許在社會交際中他懵懵懂懂、進退失措,但是,他是一個高尚的人,一個脫離了低級趣味的人,一個愿意把愛播撒到代碼的天地中自得其樂的“大寫的人”。
當然,物有千差萬別,人分三六九等,出色的工程師總是鳳毛麟角,可遇而不可求。對于嵌入式軟件工程師來說,竊以為,想要躋身于優(yōu)秀之列,他對硬件的了解程度至少需要達到半個硬件工程師的水平。
半個硬件工程師
嵌入式軟件編程顯然不同于PC軟件開發(fā),它和硬件密切相關(guān)。想寫好嵌入式軟件代碼,就必須了解清楚所使用MCU的硬件特性、各個外圍電路和接口電路的原理。不僅要深挖細究MCU內(nèi)核架構(gòu)的知識,是否支持浮點處理器/DSP,是否支持協(xié)處理器、指令數(shù)據(jù)緩存,還要了解MCU的編程模型、各種存儲器的地址空間分配及其訪問效率如何,在MCU之外,還必須了解各種電路知識,什么地方需要上下拉,什么地方需要加濾波電路,什么地方必須隔離,哪里必須加抑制器件,等等不一而足。
為什么需要了解到這種程度呢?
一來是軟硬結(jié)合,更好地實現(xiàn)用戶需求,比如輸入捕捉,如果是通過上升沿或者下降沿捕捉,加了不合適的濾波電容會造成對沿的破壞,不加濾波電容就會受困于各種空間干擾產(chǎn)生的雜波。倘若硬件工程師搬來的是加了不合適電容的電路,搞得沿之間位寬失真,便會出現(xiàn)數(shù)據(jù)不正常的偶發(fā)故障,倘若硬件工程師搬來的是不加電容的電路,搞得軟件工程師必須進行軟件濾波,把代碼搞得又復雜又難解,你說這怨誰來著?
二來是方便定位Bug。愛因斯坦曾經(jīng)說過,“提出一個問題往往比解決一個問題更重要,因為解決一個問題也許僅是一個數(shù)學上的或試驗上的技能而已,而提出新的問題、新的可能性、從新的角度去看舊的問題需要有創(chuàng)造性的想象力,而且標志著科學的真正進步?!便@研硬件電路可以幫助軟件工程師提出更多解決問題的思路,發(fā)現(xiàn)導致Bug的更多可能性。一般來說,當遇到Bug時,對硬件一知半解的軟件工程師只在代碼層面上打轉(zhuǎn)轉(zhuǎn),基本不會在硬件方面提出問題,最終為了迎合蹩腳的硬件設(shè)計出別扭無比的代碼,卻不曾想,只要稍稍改變一下硬件設(shè)計,就可以輕松且優(yōu)雅地完成代碼設(shè)計。
三來,藝多不壓身,求人不如求己。當我們對硬件電路設(shè)計起了懷疑,倘若自己悄沒聲地拿起烙鐵飛個線、換個元件,驗證了自己的思路,這時直起腰版、拿著板子理直氣壯地去找硬件工程師,豈不是順順利利,又送順水人情?倘若直接拿著板子,心底發(fā)虛面上露怯地去找硬件工程師理論,一場唇槍舌戰(zhàn)在所難免,腥風血雨不說,到頭來硬件工程師硬著頭皮給你調(diào)調(diào)電路,真是解決了問題還好說,若是自己思路錯了,那不是自找苦吃?上個班,掙點錢養(yǎng)家糊口而已,當個老好人,和同事其樂融融多好,吵來吵去,搞得那么辛苦,何必來著?
后記
在嵌入式軟件工程師的培養(yǎng)過程中,先搞個一兩年硬件是很有必要的,筆者當年走的就是這么個路子,現(xiàn)如今雖然水平一般,但是相比較而言,還是比那些“純軟”的工程師多了幾分優(yōu)勢,主要體現(xiàn)在出了問題,思路更加開闊一些,不會把嫌疑僅僅局限在代碼上。反過來,其實硬件工程師也要多多少少懂些軟件,不能只會連線,而要略微考慮一下功能的具體實現(xiàn)。比如進行輸入捕捉時,只顧及走線便利,隨便接到MCU的IO口上,而不是專用的輸入捕捉模塊上,還不得把軟件工程師逼瘋嘍?當然,聞道有先后,術(shù)業(yè)有專攻,也不是非得軟硬精通,只需要互相略懂,工作就會輕松愉快很多了!
評論