從只有幾千字節(jié)存儲(chǔ)空間的簡(jiǎn)單 8 位控制器,到現(xiàn)在先進(jìn)的 32 位控制器,雖然微控制器經(jīng)歷了諸多演變,但是許多開(kāi)發(fā)人員仍在使用老舊的工具,拖慢了開(kāi)發(fā)周期。
設(shè)計(jì)人員若要適應(yīng)當(dāng)今快速發(fā)展且復(fù)雜多變的開(kāi)發(fā)環(huán)境,則需要確保擁有合適的工具才能應(yīng)對(duì)。他們需要嵌入式工具,以便監(jiān)視芯片并查看其軟件是否按照預(yù)期方式運(yùn)行;他們還需要可指出錯(cuò)誤或優(yōu)化代碼規(guī)模的工具,以降低其 BOM 成本。
現(xiàn)在有許多工具可以幫助他們降低整體開(kāi)發(fā)成本,加快調(diào)試過(guò)程,從而縮短上市時(shí)間。本文將介紹一些這樣的工具,然后說(shuō)明如何通過(guò)它們獲得最大收益。
利用專(zhuān)業(yè)調(diào)試器節(jié)省時(shí)間和金錢(qián)
開(kāi)發(fā)人員編寫(xiě)的軟件程序第一次試運(yùn)行就正常工作非常少見(jiàn)。因此軟件開(kāi)發(fā)需要調(diào)試,所以對(duì)于軟件開(kāi)發(fā)人員來(lái)說(shuō),最重要的工具就是調(diào)試器。利用調(diào)試器,開(kāi)發(fā)人員可以將應(yīng)用程序加載到目標(biāo)微控制器上,逐步檢查代碼,查看存儲(chǔ)器和其他寄存器,并操縱硬件。
問(wèn)題是,許多專(zhuān)業(yè)開(kāi)發(fā)人員通常使用的調(diào)試器是其低成本開(kāi)發(fā)板所附帶的。這些調(diào)試器方便、便宜,而且在演示時(shí)表現(xiàn)完美。但是,在開(kāi)發(fā)專(zhuān)業(yè)軟件時(shí),可能會(huì)出現(xiàn)以下限制:
-
斷點(diǎn)有限
-
時(shí)鐘速率降低
-
缺乏跟蹤功能
-
功能極少
換言之,有時(shí)真是一分錢(qián)一分貨:附送的簡(jiǎn)化工具集可能不是快速有效地開(kāi)發(fā)和調(diào)試軟件的最佳方式。
專(zhuān)業(yè)級(jí)調(diào)試器具有許多功能,可提高工程師的生產(chǎn)力,例如無(wú)限制的斷點(diǎn)。許多調(diào)試器只能使用微控制器的內(nèi)部比較器來(lái)設(shè)置斷點(diǎn),而在大多數(shù)情況下只有兩個(gè)可用。在有數(shù)萬(wàn)行代碼的復(fù)雜程序中,只有兩個(gè)可用的斷點(diǎn)可能會(huì)導(dǎo)致開(kāi)發(fā)人員把時(shí)間浪費(fèi)斷點(diǎn)切換上,也可能會(huì)導(dǎo)致開(kāi)發(fā)人員錯(cuò)過(guò)軟件中的關(guān)鍵點(diǎn),從而錯(cuò)過(guò)潛伏的漏洞。這樣一來(lái),可能會(huì)導(dǎo)致編碼時(shí)間更長(zhǎng),反而增加了開(kāi)發(fā)成本并影響了上市時(shí)間。
專(zhuān)業(yè)級(jí)調(diào)試器提供的算法不僅可以使用硬件斷點(diǎn),還可以使用軟件和閃存斷點(diǎn),為開(kāi)發(fā)人員提供了更多的靈活性,而且用來(lái)評(píng)估代碼的斷點(diǎn)數(shù)量幾無(wú)限制。
當(dāng)然專(zhuān)業(yè)級(jí)調(diào)試器不便宜。它們的價(jià)格可以輕松標(biāo)到幾百到幾千美元。但它們?yōu)殚_(kāi)發(fā)人員帶來(lái)了不可計(jì)算的投資回報(bào),并能使用多年,無(wú)需升級(jí)或更換。選擇調(diào)試器時(shí),開(kāi)發(fā)人員應(yīng)該問(wèn)自己幾個(gè)問(wèn)題:
-
調(diào)試器的斷點(diǎn)數(shù)是否無(wú)限制?
-
這是一款可以與幾乎所有工具鏈和微控制器配合使用的第三方調(diào)試器嗎?
-
五年后這個(gè)調(diào)試器還能使用嗎?
-
這個(gè)調(diào)試器有很好的生態(tài)系統(tǒng)嗎?
-
調(diào)試器的能力可以擴(kuò)展嗎?
因?yàn)榉仙鲜鰳?biāo)準(zhǔn)而變得非常受歡迎的一款第三方調(diào)試器是 Segger J-Link。根據(jù)開(kāi)發(fā)人員的需求,Segger J-Link 可提供不同的版本。其中包括 J-Link Base Unit、J-Link Plus、J-Link Ultra Plus 和 J-Link Trace(圖 1)。
圖 1:Segger J-Link 調(diào)試器型號(hào)比較。(來(lái)源:Segger)
使用調(diào)試器跟蹤和分支檢測(cè)來(lái)揪出潛藏的錯(cuò)誤
高級(jí)調(diào)試器(通常也是最昂貴的)配備 ETM 跟蹤連接器,可以獲得大量跟蹤數(shù)據(jù),這是使用 JTAG 或 SWD 的標(biāo)準(zhǔn)跟蹤無(wú)法實(shí)現(xiàn)的。
使用高級(jí)跟蹤功能,開(kāi)發(fā)人員可以將調(diào)試器與商業(yè)工具鏈(如適用于 ARM 的 Keil MDK-PRO)連用,來(lái)監(jiān)視系統(tǒng)中的每一行代碼在測(cè)試期間是否得到執(zhí)行。如下例所示,針對(duì) ARM 的 Keil MDK-PRO 與跟蹤調(diào)試器一并運(yùn)行,檢測(cè)到了那些代碼行在測(cè)試期間得到執(zhí)行(圖 2)。這種跟蹤對(duì)于需要 100% 測(cè)試覆蓋的安全關(guān)鍵型系統(tǒng)非常有用。在未測(cè)試代碼之處,可能會(huì)潛藏錯(cuò)誤并在以后導(dǎo)致問(wèn)題。
圖 2:在調(diào)試模式下運(yùn)行并對(duì)軟件執(zhí)行分支分析的用于 ARM 的 Keil MDK-PRO。左側(cè)的綠色塊表示在測(cè)試期間得到執(zhí)行的代碼行。(圖片來(lái)源:Keil)
如果開(kāi)發(fā)人員不想購(gòu)買(mǎi)成熟的跟蹤工具,則可以使用 SWD 進(jìn)行跟蹤。在這種情況下,開(kāi)發(fā)人員可以選擇使用如 Segger 的 SystemView 或 Percepio 的 Tracelyzer 之類(lèi)軟件工具將跟蹤信息流傳輸?shù)皆?PC 上執(zhí)行的應(yīng)用程序。這些跟蹤系統(tǒng)通常在 RTOS 中工作,并且需要幾行代碼來(lái)設(shè)置跟蹤任務(wù)、捕獲數(shù)據(jù)并將其發(fā)送到調(diào)試器,然后再發(fā)送到 PC 上。
顯示軟件跟蹤的輸出示例(圖 3)。開(kāi)發(fā)人員可以使用這些工具來(lái)檢測(cè)諸如優(yōu)先級(jí)轉(zhuǎn)換、死鎖、線程饑餓以及許多在復(fù)雜系統(tǒng)中可能遇到的其他問(wèn)題。每個(gè)任務(wù)都有一條生命線,顯示其何時(shí)就緒、何時(shí)執(zhí)行、何時(shí)完成,以及在此期間可能發(fā)生的任何事件,例如發(fā)出和接收信號(hào)。
專(zhuān)業(yè)開(kāi)發(fā)人員需要這樣的細(xì)節(jié),同樣地,也要求他們使用的調(diào)試工具能夠檢索這類(lèi)信息。
圖 3:使用如 Percepio 的 Tracealyzer 之類(lèi)工具檢查軟件操作,并查看執(zhí)行時(shí)間和時(shí)間長(zhǎng)短。(圖片來(lái)源:Digi-Key)
最大限度利用調(diào)試器的技巧與竅門(mén)
調(diào)試工具有很多功能,但有時(shí)可能受限于為應(yīng)用選擇的微控制器。開(kāi)發(fā)人員需要了解其調(diào)試器的功能,并要將其與微控制器正確配對(duì)?,F(xiàn)今的許多調(diào)試器都可與 ARM? Cortex?-M 微控制器配合使用,開(kāi)發(fā)人員在調(diào)試這些系統(tǒng)時(shí)應(yīng)考慮以下幾個(gè)因素:
-
避免通過(guò) UART 進(jìn)行 printf。而應(yīng)使用 ITM 端口來(lái)獲得更好的性能
-
不要逐條查看代碼,使用高級(jí)斷點(diǎn)來(lái)提高調(diào)試效率
-
選擇一個(gè)通過(guò)服務(wù)器控制的調(diào)試器,以便為多個(gè)應(yīng)用提供調(diào)試數(shù)據(jù),即自定義分析儀、跟蹤、調(diào)試環(huán)境等等。
-
調(diào)整調(diào)試器使用的默認(rèn)時(shí)鐘速率,因該速率通常比最大值慢得多
-
在開(kāi)發(fā)周期的早期階段設(shè)置跟蹤,以建立比較基準(zhǔn)
-
使 SWO 能夠從系統(tǒng)獲取更多信息
-
在硬件、軟件和閃存斷點(diǎn)之間進(jìn)行選擇性選擇,以最小化實(shí)時(shí)性能影響
使用這些技巧可以幫助開(kāi)發(fā)人員從調(diào)試器及其調(diào)試會(huì)話(huà)中獲取更多信息。
使用商業(yè)編譯器降低成本
GCC 是一款極受歡迎且大獲成功的編譯器。它與商業(yè)工具相比有一個(gè)優(yōu)點(diǎn)就是免費(fèi)!免費(fèi)并不意味著編譯器的質(zhì)量和輸出將產(chǎn)生與商業(yè)工具同等的可執(zhí)行代碼。事實(shí)上,在許多情況下,將 GCC 與商業(yè)編譯器(如用于 ARM 的 Keil MDK-PRO 或 IAR Embedded Workbench)進(jìn)行比較,得出的結(jié)果是,GCC 使用的代碼規(guī)模更大,占用的 RAM 空間更多。Renesas 甚至在他們的 Synergy 平臺(tái)規(guī)格書(shū)中顯示了這一點(diǎn)(圖 4)。
在圖中,Renesas 使用 EEMBC CoreMark? 對(duì)其編譯器進(jìn)行了基準(zhǔn)測(cè)試,顯示了 IAR 編譯的代碼比 GCC 編譯的代碼更快。
基準(zhǔn)測(cè)試還顯示,使用商業(yè)級(jí)編譯器可以顯著減少代碼規(guī)模。乍一看,開(kāi)發(fā)人員可能會(huì)認(rèn)為購(gòu)買(mǎi)諸如用于 ARM 的 Keil MDK-PRO 之類(lèi)工具不值得投資,而應(yīng)該使用 GCC。但是,當(dāng)開(kāi)發(fā)人員使用包含 128 KB 代碼空間的微控制器(如 NXP MK20DX128)并發(fā)現(xiàn)使用 GCC 應(yīng)用程序需要 132 KB 時(shí),會(huì)發(fā)生什么?
若發(fā)生這種情況,開(kāi)發(fā)團(tuán)隊(duì)就被迫要尋找一個(gè)具有足夠內(nèi)存但卻更為昂貴的引腳兼容器件,如 NXP MKD20DX256。如果該公司只能生產(chǎn)適量的產(chǎn)品,那么每年花在 MCU 上的成本可能會(huì)超過(guò)最初投資于商業(yè)編譯器上的成本。
使用商業(yè)編譯器也有其他優(yōu)勢(shì),有助于降低成本,例如:
-
代碼分析功能,如分支檢測(cè)
-
軟件復(fù)雜性測(cè)量
-
高效生成代碼
-
卓越的調(diào)試工具和功能
-
技術(shù)支持
-
集成到驅(qū)動(dòng)程序庫(kù)和框架
結(jié)論
開(kāi)發(fā)人員當(dāng)然可以使用免費(fèi)或便宜的開(kāi)發(fā)工具。然而問(wèn)題在于,這些低成本工具在大多數(shù)情況下并非是適合這種工作的最佳工具。它們往往缺乏每個(gè)開(kāi)發(fā)人員所需的高級(jí)功能,不能節(jié)省時(shí)間和金錢(qián),而且常常會(huì)導(dǎo)致項(xiàng)目延遲并增加成本。
購(gòu)買(mǎi)好的專(zhuān)業(yè)調(diào)試器和工具鏈?zhǔn)且豁?xiàng)投資,可以在未來(lái)幾年節(jié)省大量時(shí)間和金錢(qián),并大幅提高開(kāi)發(fā)團(tuán)隊(duì)的工作效率和績(jī)效。
-
ARM
+關(guān)注
關(guān)注
134文章
9104瀏覽量
367777 -
嵌入式
+關(guān)注
關(guān)注
5085文章
19137瀏覽量
305672 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
305瀏覽量
23755
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論