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