軟件工程師如何應對軟硬件協(xié)同開(kāi)發(fā)

發(fā)布時(shí)間:2012-10-29 10:40    發(fā)布者:eechina
關(guān)鍵詞: 嵌入式 , 軟硬件
作者:賽普拉斯半導體公司 Mark Saunders

我從事嵌入式業(yè)務(wù)已有很多年時(shí)間了,但還是不清楚“協(xié)同開(kāi)發(fā)”是否是指管理人員夢(mèng)想實(shí)現超高效項目開(kāi)發(fā)進(jìn)度的一種方式,還是說(shuō)對于軟件開(kāi)發(fā)人員而言是一種折磨;蛟S它只是意味著(zhù)軟件開(kāi)發(fā)與硬件平臺設計齊頭并進(jìn)吧。這除了意味著(zhù)軟件人員的苦難之外,我真不清楚還意味著(zhù)什么。

在嵌入式領(lǐng)域,經(jīng)常要為正在設計中的電路板或芯片同時(shí)編寫(xiě)軟件。有時(shí)是為Mentor Graphics或Cadence Design Systems等EDA廠(chǎng)商仿真環(huán)境中復雜的ASIC設計而編寫(xiě)軟件。有時(shí)則是為XilinxAltera等公司功能強大的FPGA設計而編寫(xiě)軟件。FPGA器件帶有與標準和定制IP模塊相連的嵌入式微處理器內核。還有的時(shí)候是為了可編程片上系統編寫(xiě)軟件,這種可編程片上系統將可編程數字/模擬功能和微控制器完美集成在一起(如賽普拉斯的PSoC器件)。這些功能都非常強大,能實(shí)現難以置信的創(chuàng )新,但同時(shí)也會(huì )帶來(lái)痛苦,那就是硬件可能隨時(shí)發(fā)生變化,而軟件開(kāi)發(fā)人員則難以招架。

我不是建議放慢創(chuàng )新步伐,而是說(shuō)應該給軟件工程師一個(gè)喘氣的機會(huì )。但事實(shí)上剛好相反。硬件工具需要更好地與軟件IDE集成在一起才能加速產(chǎn)品上市進(jìn)程。而設計人員需要更多工具和方法讓?xiě)貌皇苡布兓挠绊。我不是說(shuō)向設計中添加或從中移除主要的通信模塊。如果您的真需要添加或移除主要通信模塊,那么您的軟件工程師真該找點(diǎn)別的事干了,因為這意味著(zhù)硬件設計還根本沒(méi)就位呢。我這里說(shuō)的變化都是設計周期較晚階段對于已定義的功能模塊進(jìn)行的微小改變,比方說(shuō)寄存器地址變動(dòng)、比特位被重新定義、緩沖區大小改變等。這些“小變化”也會(huì )影響到軟件,進(jìn)而可能造成產(chǎn)品缺陷,甚至在忘記硬件變化原因時(shí)還要對軟件進(jìn)行長(cháng)時(shí)間返工。

軟件工程師,現在到了我們奮起反擊的時(shí)候了!以下給出了針對目標不斷變化的情況如何靈活進(jìn)行應用開(kāi)發(fā)的三點(diǎn)建議。在開(kāi)始新的項目之前,不要忘掉這些建議!

1 不要編寫(xiě)HAL,要生成它!

我們需要的第一個(gè)變化就是讓硬件開(kāi)發(fā)工具生成軟件接口,也就是通常所說(shuō)的硬件適配層(HAL)。HAL應包括能可靠地初始化可編程硬件的啟動(dòng)代碼,并提供API接口以支持系統的軟件控制。HAL不僅簡(jiǎn)化了固件開(kāi)發(fā),還能將實(shí)施從接口中抽象出來(lái)。這就意味著(zhù)硬件的微小變化不會(huì )對固件造成影響。

HAL中其實(shí)沒(méi)什么新概念,許多經(jīng)驗豐富的設計人員已經(jīng)明智指出,常量、函數和變量都應采用一致的、直觀(guān)的命名規范。不過(guò),對于FPGA、CPLDPSoC等可編程器件而言,我們還要將此規范進(jìn)一步擴展,也就是HAL要由硬件設計工具生成,否則軟件工程師怎么才能確?煽康慕涌谀?

在固定或變化很少的環(huán)境中(比如說(shuō)固定功能MCU或大規模ASIC項目),我們可將HAL視為一套獨立的API,可將其作為硬件設計變化的一部分進(jìn)行修改。不過(guò),對于現代化的可編程器件而言,硬件一天會(huì )變化好幾次。手動(dòng)HAL維護與當前情況根本不相匹配,肯定會(huì )在實(shí)施階段出現錯誤,更別說(shuō)要對軟件工程師帶來(lái)多大痛苦和折磨了!我認為,HAL自動(dòng)生成應為任何可編程平臺的必備要求。


圖1:PSoC Creator工作區域抓屏,其中我們看到采用FanController模塊和一對比較器(Comp_Hi)和(Comp_Lo)的系統控制器設計所用的API文件(HAL)。

2 集成自己最喜歡的IDE

可編程器件為創(chuàng )新帶來(lái)了巨大機遇,但往往設計硬件所需的工具會(huì )對正常軟件開(kāi)發(fā)實(shí)踐造成影響。工程師往往不得不使用簡(jiǎn)單、功能欠佳的工具,而且不能與現有的流程很好地結合。

大多數協(xié)同設計環(huán)境都是從硬件設計工具演變而來(lái),這些工具多年來(lái)一直支持ASIC和FPGA或CPLD流程。隨著(zhù)嵌入式CPU越來(lái)越普及,為工具產(chǎn)品組合添加軟件開(kāi)發(fā)功能的需求變得非常明顯,這樣,一種工具就能支持軟硬件兩個(gè)領(lǐng)域,但對兩個(gè)領(lǐng)域各自而言又都不夠理想。在此情況下,工程師就會(huì )在兩個(gè)領(lǐng)域都會(huì )減少特性選擇,甚至喪失特性選擇。

解決方案不是讓工具廠(chǎng)商提供業(yè)界領(lǐng)先的調試器,將其捆綁到硬件設計工具中,就宣布成功,然后奇怪軟件工程師怎么還在不停地抱怨。為以硬件為中心的工具添加源代碼編輯器并調試特性,這并不能真正解決問(wèn)題,因為工具仍沒(méi)有集成到用戶(hù)的流程中。源控制接口、軟件測試套件、自動(dòng)化構建等是目前開(kāi)發(fā)人員每天都要接觸的工作,將硬件設計工具集成到他們的日常工作中才是真正的挑戰。

正確的做法根本不是集成調試器、編輯器或整個(gè)IDE,而是要讓軟件開(kāi)發(fā)人員從項目一開(kāi)始就能在自己真正喜歡并使用的傳統IDE開(kāi)發(fā)環(huán)境中開(kāi)展工作。硬件設計人員或許仍需要工具中的軟件特性來(lái)創(chuàng )建并運行小型測試程序,但真正的應用開(kāi)發(fā)應當始終在工程師首選的IDE中進(jìn)行。

如果想要滿(mǎn)足這一要求,一個(gè)辦法就是要能夠將項目從一個(gè)工具導出到另一個(gè)工具。舉例來(lái)說(shuō),賽普拉斯的PSoC Creator能夠將PSoC設計直接導入到Keil μVision工具中。在許多可編程系統中,“硬件”事實(shí)上是作為數據塊提供,能在啟動(dòng)時(shí)被編程到器件中,以創(chuàng )建配置好的器件。對于軟件而言,它僅僅是數據,因此導出設計只需硬件工具為目標產(chǎn)品生成項目文件,再用HAL源文件和初始化代碼植入即可。應用隨后就能在硬件頂層上進(jìn)行構建,而且不會(huì )干擾現代化環(huán)境中使用的自動(dòng)化測試和源控制系統。


圖2:PSoC Creator的“IDE 導出”GUI。本對話(huà)框用來(lái)創(chuàng )建和更新用于應用開(kāi)發(fā)的Keil μVision項目。

當然,對于動(dòng)態(tài)的硬件平臺而言,一次性導出不是完整的解決方案,還必須提供無(wú)縫更新設計的特性,而且不會(huì )破壞應用。對于支持庫的IDE來(lái)說(shuō),更新過(guò)程很簡(jiǎn)單,因為設計可被拆分為應用項目和配置庫,這就能將應用完全隔離開(kāi)來(lái),而且能讓包含配置數據和HAL的硬件庫在設計變化時(shí)自動(dòng)更新。


圖3:以上導出的系統控制器項目在Keil μVision中打開(kāi),可用于應用開(kāi)發(fā)。

3 超越軟件范疇的調試

設計人員所需的第三個(gè)特性就是改進(jìn)調試。在現代化器件中,“處理器”的定義不僅限于CPU的寄存器和指令集。處理器芯片集成了各種額外的片上功能,比如說(shuō)常見(jiàn)的通信模塊和標準接口,此外還包括無(wú)所不在的定時(shí)器和計數器,以及為軟件提供數字接口的模擬功能,有時(shí)也包括定制邏輯和可切換的路由功能等。這種可定制性說(shuō)到底正是我們最初選擇協(xié)同設計的原因所在。調試器如果只支持CPU,就會(huì )讓軟件開(kāi)發(fā)人員非常失望。我們需要圍繞硬件認真解決以下問(wèn)題:硬件啟動(dòng)了嗎?時(shí)鐘啟動(dòng)并穩定了嗎?外設在正常工作嗎?通信模塊是否生成中斷?能否發(fā)送和接收數據?能否在內部總線(xiàn)上正常工作?

如果這聽(tīng)起來(lái)就夠嚇人的話(huà),我還沒(méi)說(shuō)到從調試器改變硬件呢,這其實(shí)是讓人的角色在迫害者和受害者之間轉變。我需要符號化外設硬件的存取方式,這樣我就能監控和控制影響應用的狀態(tài)變化。

當然,符號信息必須從硬件工具中生成,就好像上述HAL一樣。通過(guò)簡(jiǎn)單添加這一點(diǎn),調試過(guò)程就變得更加簡(jiǎn)單,功能也更加強大了。之所以說(shuō)更簡(jiǎn)單,是因為我們不再需要一直查詢(xún)文檔去尋找并確認調試器中要注意哪些關(guān)鍵寄存器的地址了。而之所以說(shuō)更強大,是因為現在它能支持更為復雜的調試。除了快速獲得外設模塊狀態(tài)快照之外,有時(shí)我們還能從調試器控制功能塊,無(wú)需編寫(xiě)代碼以編程方式重建情境就能了解情境工作的具體情況。

交換此信息的典型方法就是讓IDE使用由硬件工具生成的XML文件。ARM CMSIS-SVD(軟件接口標準——系統視圖描述)標準就是一個(gè)很好的例子。它是基于XML的硬件描述,旨在讓調試器支持高度集成的微控制器。CMSIS是一種面向ARM Cortex微控制器的HAL的標準定義,得到了眾多廠(chǎng)商的廣泛采用。SVD擴展主要針對硬件描述,如寄存器、存儲器、外設等,讓從事可編程系統開(kāi)發(fā)的人員真正地大獲裨益。


圖4:這是一小段XML,介紹了賽普拉斯PSoC Creator調試器有關(guān)CAN實(shí)施中一個(gè)寄存器的情況。CAN_CSR_ERR_SR寄存器的地址、大小和描述均已定義,在寄存器中有5個(gè)字段,定義了名稱(chēng)、大小和存取權限。

共享硬件定義的一個(gè)重要因素就是能夠定義外設寄存器,進(jìn)而言之,則能提供面向寄存器中字段的存取權限,從而確保調試器認真對待讀/寫(xiě)可修改的位。硬件給我們提供clear-on-read位和zero-to-toggle位以及各種其它晶體管能夠感應但是軟件很難應付的狀態(tài)處理接口。只有對硬件進(jìn)行良好的機器生成定義,我們才能保證用戶(hù)在外設模塊上調試寄存器或個(gè)別位時(shí)不至于浪費時(shí)間,或導致意外結果。

有了可編程硬件的高級視圖,我們不僅能檢查狀態(tài)寄存器和錯誤狀態(tài),還能實(shí)現更多功能。舉例來(lái)說(shuō),如果硬件支持寄存器控制的開(kāi)關(guān),能實(shí)現外設I/O到器件引腳的靈活路由,那么軟件開(kāi)發(fā)人員就能從調試器操控器件的內部布線(xiàn)!有些人聽(tīng)到這里可能感覺(jué)有些嚇人,不過(guò)如果SVD信息正確生成,那么我們就能限制允許的變化,確!鞍踩摹本庉,比如說(shuō)數字信號上的多路復用器通道選擇或兩個(gè)物理引腳之間的模擬輸入切換。

硬件工具為軟件開(kāi)發(fā)人員生成調試信息,有望顯著(zhù)縮短應用開(kāi)發(fā)時(shí)間。不僅如此,重要的是,我們還有機會(huì )在早期檢測出硬件設計錯誤,因為軟件開(kāi)發(fā)人員發(fā)現混亂和代碼重寫(xiě)的不正常情況下更有可能發(fā)現意料之外的行為。

面向可編程器件的完整產(chǎn)品

現在,“完整產(chǎn)品”的概念已得到充分地理解和廣泛地接受,也成了成功的重要因素。只有最佳的工具或最出色的芯片已經(jīng)不夠了。我們今天使用的可編程解決方案形式多樣:可能是全定制的ASIC,其在高度專(zhuān)業(yè)化的解決方案中集成了ARM內核和多個(gè)IP模塊;也可能是更加通用的平臺,其集成了可編程芯片和設計工具,諸如Altera和賽靈思推出的FPGA解決方案,或賽普拉斯半導體公司推出的PSoC器件等。雖然這些環(huán)境千差萬(wàn)別,但都面臨著(zhù)同樣的問(wèn)題——不能將硬件修改有效地遷移到軟件領(lǐng)域,從而影響應用開(kāi)發(fā)。

我認為,這個(gè)問(wèn)題的根源在于項目中使用的硬件設計工具和IDE采用了狹隘的方法。像我這樣的軟件狂人(開(kāi)玩笑)總喜歡把所有問(wèn)題都歸咎于硬件工具和工程師,但事實(shí)上硬件工具和軟件工具集都太過(guò)偏向于他們特定的領(lǐng)域了。很難見(jiàn)到二者添加了我以上提到的特性,因為這些特性跟其各自的客戶(hù)好像沒(méi)什么關(guān)系。我相信這種局面正在發(fā)生變化,PSoC Creator等產(chǎn)品支持在可編程硬件上進(jìn)行器件配置同時(shí)還集成第三方IDE(如ARM的Keil μVision IDE)的工具會(huì )不斷發(fā)展。在工程師首選的IDE中實(shí)現應用開(kāi)發(fā),同時(shí)讓工具獲得獨有的強大信息并控制硬件平臺,這顯然是更高效進(jìn)行產(chǎn)品開(kāi)發(fā)、加速產(chǎn)品上市進(jìn)程的必由之路。與此同時(shí),減少對工程師的折磨也不失為一件大好事!


本文地址:http://selenalain.com/thread-99890-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页