軟硬件協(xié)同開發(fā)的應(yīng)對(duì)方案
從事嵌入式業(yè)務(wù)已有很多年時(shí)間了,但還是不清楚“協(xié)同開發(fā)”是否是指管理人員夢(mèng)想實(shí)現(xiàn)超高效項(xiàng)目開發(fā)進(jìn)度的一種方式,還是說對(duì)于軟件開發(fā)人員而言是一種折磨?;蛟S它只是意味著軟件開發(fā)與硬件平臺(tái)設(shè)計(jì)齊頭并進(jìn)吧。這除了意味著軟件人員的苦難之外,真不清楚還意味著什么。
本文引用地址:http://butianyuan.cn/article/148311.htm在嵌入式領(lǐng)域,經(jīng)常要為正在設(shè)計(jì)中的電路板或芯片同時(shí)編寫軟件。有時(shí)是為Mentor Graphics或Cadence Design Systems等EDA廠商仿真環(huán)境中復(fù)雜的ASIC設(shè)計(jì)而編寫軟件。有時(shí)則是為Xilinx或Altera等公司功能強(qiáng)大的FPGA設(shè)計(jì)而編寫軟件。FPGA器件帶有與標(biāo)準(zhǔn)和定制IP模塊相連的嵌入式微處理器內(nèi)核。還有的時(shí)候是為了可編程片上系統(tǒng)編寫軟件,這種可編程片上系統(tǒng)將可編程數(shù)字/模擬功能和微控制器完美集成在一起(如賽普拉斯的PSoC器件)。這些功能都非常強(qiáng)大,能實(shí)現(xiàn)難以置信的創(chuàng)新,但同時(shí)也會(huì)帶來痛苦,那就是硬件可能隨時(shí)發(fā)生變化,而軟件開發(fā)人員則難以招架。
不是建議放慢創(chuàng)新步伐,而是說應(yīng)該給軟件工程師一個(gè)喘氣的機(jī)會(huì)。但事實(shí)上剛好相反。硬件工具需要更好地與軟件IDE集成在一起才能加速產(chǎn)品上市進(jìn)程。而設(shè)計(jì)人員需要更多工具和方法讓應(yīng)用不受硬件變化的影響。不是說向設(shè)計(jì)中添加或從中移除主要的通信模塊。如果您的真需要添加或移除主要通信模塊,那么您的軟件工程師真該找點(diǎn)別的事干了,因?yàn)檫@意味著硬件設(shè)計(jì)還根本沒就位呢。這里說的變化都是設(shè)計(jì)周期較晚階段對(duì)于已定義的功能模塊進(jìn)行的微小改變,比方說寄存器地址變動(dòng)、比特位被重新定義、緩沖區(qū)大小改變等。這些“小變化”也會(huì)影響到軟件,進(jìn)而可能造成產(chǎn)品缺陷,甚至在忘記硬件變化原因時(shí)還要對(duì)軟件進(jìn)行長時(shí)間返工。
軟件工程師,現(xiàn)在到了們奮起反擊的時(shí)候了!以下給出了針對(duì)目標(biāo)不斷變化的情況如何靈活進(jìn)行應(yīng)用開發(fā)的三點(diǎn)建議。在開始新的項(xiàng)目之前,不要忘掉這些建議!
1、不要編寫HAL,要生成它!
我們需要的第一個(gè)變化就是讓硬件開發(fā)工具生成軟件接口,也就是通常所說的硬件適配層(HAL)。HAL應(yīng)包括能可靠地初始化可編程硬件的啟動(dòng)代碼,并提供API接口以支持系統(tǒng)的軟件控制。HAL不僅簡化了固件開發(fā),還能將實(shí)施從接口中抽象出來。這就意味著硬件的微小變化不會(huì)對(duì)固件造成影響。
中其實(shí)沒什么新概念,許多經(jīng)驗(yàn)豐富的設(shè)計(jì)人員已經(jīng)明智指出,常量、函數(shù)和變量都應(yīng)采用一致的、直觀的命名規(guī)范。不過,對(duì)于FPGA、CPLD和PSoC等可編程器件而言,們還要將此規(guī)范進(jìn)一步擴(kuò)展,也就是HAL要由硬件設(shè)計(jì)工具生成,否則軟件工程師怎么才能確??煽康慕涌谀??
在固定或變化很少的環(huán)境中(比如說固定功能MCU或大規(guī)模ASIC項(xiàng)目),們可將HAL視為一套獨(dú)立的API,可將其作為硬件設(shè)計(jì)變化的一部分進(jìn)行修改。不過,對(duì)于現(xiàn)代化的可編程器件而言,硬件一天會(huì)變化好幾次。手動(dòng)HAL維護(hù)與當(dāng)前情況根本不相匹配,肯定會(huì)在實(shí)施階段出現(xiàn)錯(cuò)誤,更別說要對(duì)軟件工程師帶來多大痛苦和折磨了!認(rèn)為,HAL自動(dòng)生成應(yīng)為任何可編程平臺(tái)的必備要求。
圖1:PSoC Creator工作區(qū)域抓屏,其中們看到采用FanController模塊和一對(duì)比較器(Comp_Hi)和(Comp_Lo)的系統(tǒng)控制器設(shè)計(jì)所用的API文件(HAL)。
2、集成自己最喜歡的
可編程器件為創(chuàng)新帶來了巨大機(jī)遇,但往往設(shè)計(jì)硬件所需的工具會(huì)對(duì)正常軟件開發(fā)實(shí)踐造成影響。工程師往往不得不使用簡單、功能欠佳的工具,而且不能與現(xiàn)有的流程很好地結(jié)合。
大多數(shù)協(xié)同設(shè)計(jì)環(huán)境都是從硬件設(shè)計(jì)工具演變而來,這些工具多年來一直支持ASIC和FPGA或CPLD流程。隨著嵌入式CPU越來越普及,為工具產(chǎn)品組合添加軟件開發(fā)功能的需求變得非常明顯,這樣,一種工具就能支持軟硬件兩個(gè)領(lǐng)域,但對(duì)兩個(gè)領(lǐng)域各自而言又都不夠理想。在此情況下,工程師就會(huì)在兩個(gè)領(lǐng)域都會(huì)減少特性選擇,甚至喪失特性選擇。
解決方案不是讓工具廠商提供業(yè)界領(lǐng)先的調(diào)試器,將其捆綁到硬件設(shè)計(jì)工具中,就宣布成功,然后奇怪軟件工程師怎么還在不停地抱怨。為以硬件為中心的工具添加源代碼編輯器并調(diào)試特性,這并不能真正解決問題,因?yàn)楣ぞ呷詻]有集成到用戶的流程中。源控制接口、軟件測(cè)試套件、自動(dòng)化構(gòu)建等是目前開發(fā)人員每天都要接觸的工作,將硬件設(shè)計(jì)工具集成到他們的日常工作中才是真正的挑戰(zhàn)。
正確的做法根本不是集成調(diào)試器、編輯器或整個(gè)IDE,而是要讓軟件開發(fā)人員從項(xiàng)目一開始就能在自己真正喜歡并使用的傳統(tǒng)IDE開發(fā)環(huán)境中開展工作。硬件設(shè)計(jì)人員或許仍需要工具中的軟件特性來創(chuàng)建并運(yùn)行小型測(cè)試程序,但真正的應(yīng)用開發(fā)應(yīng)當(dāng)始終在工程師首選的IDE中進(jìn)行。
如果想要滿足這一要求,一個(gè)辦法就是要能夠?qū)㈨?xiàng)目從一個(gè)工具導(dǎo)出到另一個(gè)工具。舉例來說,賽普拉斯的PSoC Creator能夠?qū)SoC設(shè)計(jì)直接導(dǎo)入到Keil μVision工具中。在許多可編程系統(tǒng)中,“硬件”事實(shí)上是作為數(shù)據(jù)塊提供,能在啟動(dòng)時(shí)被編程到器件中,以創(chuàng)建配置好的器件。對(duì)于軟件而言,它僅僅是數(shù)據(jù),因此導(dǎo)出設(shè)計(jì)只需硬件工具為目標(biāo)產(chǎn)品生成項(xiàng)目文件,再用HAL源文件和初始化代碼植入即可。應(yīng)用隨后就能在硬件頂層上進(jìn)行構(gòu)建,而且不會(huì)干擾現(xiàn)代化環(huán)境中使用的自動(dòng)化測(cè)試和源控制系統(tǒng)。
圖2:PSoC Creator的“IDE 導(dǎo)出”GUI.本對(duì)話框用來創(chuàng)建和更新用于應(yīng)用開發(fā)的Keil μVision項(xiàng)目。
評(píng)論