調(diào)試是每個(gè)開(kāi)發(fā)人員都想避免的一項(xiàng)任務(wù),但不幸的是,這是軟件開(kāi)發(fā)的必然之舉。事實(shí)上,正如EDN的嵌入式研究所揭示的那樣,嵌入式開(kāi)發(fā)項(xiàng)目平均花費(fèi)超過(guò)其總體努力的20%用于單獨(dú)調(diào)試。當(dāng)你的袖子卷起來(lái)并開(kāi)始調(diào)試時(shí),這里有一些提示可以幫助你。
提示1 -采取可控制的步驟
當(dāng)一個(gè)bug進(jìn)入嵌入式軟件時(shí),開(kāi)發(fā)人員的第一直覺(jué)往往是跳入代碼并啟動(dòng)做出改變。但是,開(kāi)發(fā)人員的方法通常是偶然的,幾乎是隨機(jī)的,而不是以受控制的方式進(jìn)行更改。嵌入式軟件開(kāi)發(fā)不是狂野西部。解決甚至最簡(jiǎn)單的錯(cuò)誤應(yīng)該包括檢查可用數(shù)據(jù),評(píng)估它,假設(shè)最可能的原因,更新代碼,然后測(cè)試更新。如果變更沒(méi)有解決問(wèn)題,新數(shù)據(jù)至少應(yīng)該被曝光,這有助于重復(fù)該過(guò)程。
提示2 -增加斷言密度
ASSERT 宏是一個(gè)很棒的工具,可以在運(yùn)行時(shí)返回錯(cuò)誤消息斷言的條件是錯(cuò)誤的。開(kāi)發(fā)人員可以使用此宏來(lái)驗(yàn)證其代碼中的假設(shè)是否成立。令人驚訝的是,許多開(kāi)發(fā)人員沒(méi)有花時(shí)間將斷言放入他們的代碼中。代碼庫(kù)的 ASSERT 密度通??赡苁情L(zhǎng)期和痛苦的調(diào)試會(huì)話之間的差異,也可能是失敗假設(shè)發(fā)生時(shí)的陷阱。 ASSERT 可以幫助開(kāi)發(fā)人員立即發(fā)現(xiàn)錯(cuò)誤或假設(shè)失敗。您的代碼庫(kù)的 ASSERT 密度是多少?
技巧3 -使用數(shù)據(jù)記錄器
有關(guān)軟件運(yùn)行方式的信息是嵌入式軟件工程師在調(diào)試時(shí)可以擁有的最佳工具。擁有諸如任務(wù)開(kāi)始和完成時(shí)的性能信息,是否被搶占以及類似的細(xì)節(jié)都是至關(guān)重要的。記錄所采取的操作是開(kāi)發(fā)人員深入了解軟件行為的好方法。日志可以像RAM緩沖區(qū)一樣簡(jiǎn)單,文件寫入外部閃存,也可以像傳輸?shù)竭h(yuǎn)程位置的編碼數(shù)據(jù)一樣復(fù)雜。
技巧4 -使用高級(jí)斷點(diǎn)
開(kāi)發(fā)人員熟悉使用IDE中可以打開(kāi)的標(biāo)準(zhǔn)斷點(diǎn),只需雙擊一個(gè)斷點(diǎn)即可代碼的左邊距。但是,許多IDE還具有更高級(jí)的斷點(diǎn)功能,這是開(kāi)發(fā)人員很少使用的功能。高級(jí)斷點(diǎn)的一個(gè)示例是在變量達(dá)到某個(gè)值時(shí)設(shè)置要斷開(kāi)的行。使用高級(jí)斷點(diǎn)可以大大減少調(diào)試時(shí)間,并且難以發(fā)現(xiàn)很容易發(fā)現(xiàn)錯(cuò)誤。
提示5 -再次查看數(shù)據(jù)表
調(diào)試外圍設(shè)備可能特別困難。現(xiàn)代微控制器可以在設(shè)置單個(gè)外設(shè)時(shí)涉及許多寄存器,這些外設(shè)設(shè)置并不總是很明顯或有很好的記錄。更糟糕的是,有關(guān)如何正確設(shè)置外設(shè)的詳細(xì)信息通常并非都在一個(gè)數(shù)據(jù)表中。相反,信息的形式是“面包屑”,散布在家庭和外圍數(shù)據(jù)表中,有時(shí)甚至在應(yīng)用筆記中。僅僅查看一個(gè)文檔是不夠的。當(dāng)硬件行為不端時(shí),您需要反復(fù)查看數(shù)據(jù)表。
提示6 -監(jiān)控調(diào)用堆棧
開(kāi)發(fā)人員有時(shí)會(huì)質(zhì)疑他們?nèi)绾尾拍塬@得特定的代碼行。 IDE包含一個(gè)可以準(zhǔn)確顯示該信息的調(diào)用堆棧窗口。調(diào)用堆棧顯示調(diào)用了哪些函數(shù)以及以什么順序調(diào)用,顯示對(duì)于跟蹤錯(cuò)誤非常有用的信息。
提示7 -休息一下
調(diào)試可能是一項(xiàng)繁重的工作。深入研究軟件和硬件的運(yùn)作可以為開(kāi)發(fā)人員提供隧道視野。開(kāi)發(fā)人員有時(shí)需要通過(guò)繼續(xù)執(zhí)行其他任務(wù)或休息來(lái)退后一步。通過(guò)散步或做一些放松的事情離開(kāi)系統(tǒng)將允許潛意識(shí)在有意識(shí)的思維休息時(shí)處理解決方案,以便當(dāng)再次開(kāi)始查看代碼時(shí),通常會(huì)有其他見(jiàn)解。
結(jié)論
無(wú)論是花費(fèi)大量時(shí)間進(jìn)行調(diào)試還是花費(fèi)很少,事實(shí)上嵌入式軟件開(kāi)發(fā)人員都無(wú)法避免。使用本文中的提示有助于使調(diào)試更成功,因此更加可口。
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19155瀏覽量
306433 -
PCB打樣
+關(guān)注
關(guān)注
17文章
2968瀏覽量
21760 -
華強(qiáng)PCB
+關(guān)注
關(guān)注
8文章
1831瀏覽量
27848 -
華強(qiáng)pcb線路板打樣
+關(guān)注
關(guān)注
5文章
14629瀏覽量
43109
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論