天天看點

為什麼說你一定要掌握 KEIL 調試方法?

為什麼說你一定要掌握 KEIL 調試方法?

在嵌入式軟體開發過程中,不可避免的會出現很多的 BUG,比如序列槽通信異常、定時器無法輸出脈沖、IO 口無法輸出、無法進入中斷等等問題,導緻這些問題的原因可能不僅僅隻是某一個方面,也可能是綜合的,可能是軟體設計上的問題,也可能是硬體上的,如何鎖定問題就成了關鍵。

學習 51 的時候,可能會采用 LED 燈、數位管、LCD 屏等方式進行輔助調試(關于這個【看不會 printf 怎麼列印紅外遙控資料?】),也可能會使用類似 printf 函數的方式将資料列印至序列槽調試助手調試,但無一例外的是,這些方法都要在合适的地方插入合适的代碼才行,而且還有可能因為插入了這些調試代碼而導緻本來沒有問題的程式出現了問題,這都是有可能的。

51 開發的時候沒有辦法,硬體仿真調試功能太弱,隻能采用這些方式,但如果說你在進行 STM32 開發時還在使用這些方法,那真的是守着莫大财富而不自知了。

現在簡單了解一下 STM32 仿真調試的原理是什麼。我們知道程式的運作主要依靠 CPU 還有各種外設,這就相當于一個人在工作,除了需要你的大腦(CPU)外,還需要你的手、腳、軀幹等部分協調配合才能将一件事完成,否則光有強大的大腦(CPU)是不行的。

那麼調試功能又是怎麼怎麼一回事呢?它就像是你的同伴,當你在工作的時候,他會實時記錄你的工作資訊,當别人(調試者)需要知道你的工作情況還有工作細節的時候,由你的同伴告知就行了,這樣就能在不耽誤你(CPU)正常工作的前提下,又能知道你在幹什麼。你的同伴擁有以下功能或權限:

1、實時記錄你的工作過程,把你工作時的所思所想都記錄下來(注意這種記錄是實時的,隻保留目前的資訊,之前的資訊會被目前資訊覆寫,是以如果你需要記錄所有的資訊的話,需要把它列印出來才行)。

2、控制你的工作流程,比如暫停你的工作,工作到什麼地方的時候讓你停下來等等類似功能,但是不能更改你的工作順序和工作内容(這點很重要)。

STM32 調試過程中最常用的的就是利用 Watch 視窗檢視變量的值,比如像這樣:

為什麼說你一定要掌握 KEIL 調試方法?

你可以看到通過這個視窗,你可以檢視 USART1 外設寄存器的值,也可以檢視使用者變量 num 的值,這樣你就能實時的觀察變量的變化,進而知道哪裡有問題了。

還有很多時候我們需要看别人的代碼,比如學長的代碼,公司以前項目的代碼,如果有相關文檔和注釋的話還好說,但是這些都沒有的話,想要快速了解一個人的想法是很困難的事情。比如說一個變量變化了,那它是在哪個位置變化了?這個變量又在哪裡被使用了?這些都是在看别人代碼的時候經常會遇到的情況。常用的方法是用搜尋功能搜尋這個變量名,這樣就就能把這個變量的所有出現的位置找出來,但是這裡有一個問題,如果這個變量用的非常頻繁,有的地方可能隻運作一次就不再運作了,有的地方可能需要滿足一定的條件才會運作,而有的地方可能會一直執行,這些情況怎麼辦?都打上斷點嗎?這确實是一種方法,但是接下來的系列文章将介紹一種更高效的方法,開啟你不一樣的調試之旅。

根據魚鷹多年的嵌入式開發經驗,把這個系列的文章分為三個部分,基礎部分的内容相信大家或多或少的都了解過,但第二部分和第三部分的内容(第三部分其實已經釋出了,就是 ITM)卻很少人知道,比你盲目的調試和使用 printf 函數列印資料強的多,而且更加友善高效,相信當你掌握了這些調試方法後,你會愛上它的。

更多精彩,歡迎關注公衆号:魚鷹談單片機

為什麼說你一定要掌握 KEIL 調試方法?

繼續閱讀