為什麼說你一定要掌握 KEIL 除錯方法?

2021-09-13 13:32:32 字數 1615 閱讀 7759

在嵌入式軟體開發過程中,不可避免的會出現很多的 bug,比如串列埠通訊異常、定時器無法輸出脈衝、io 口無法輸出、無法進入中斷等等問題,導致這些問題的原因可能不僅僅只是某乙個方面,也可能是綜合的,可能是軟體設計上的問題,也可能是硬體上的,如何鎖定問題就成了關鍵。

學習 51 的時候,可能會採用 led 燈、數碼管、lcd 屏等方式進行輔助除錯(關於這個【看不會 printf 怎麼列印紅外遙控資料?】),也可能會使用類似 printf 函式的方式將資料列印至串列埠除錯助手除錯,但無一例外的是,這些方法都要在合適的地方插入合適的**才行,而且還有可能因為插入了這些除錯**而導致本來沒有問題的程式出現了問題,這都是有可能的。

51 開發的時候沒有辦法,硬體**除錯功能太弱,只能採用這些方式,但如果說你在進行 stm32 開發時還在使用這些方法,那真的是守著莫大財富而不自知了。

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

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

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

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

stm32 除錯過程中最常用的的就是利用 watch 視窗檢視變數的值,比如像這樣:

你可以看到通過這個視窗,你可以檢視 usart1 外設暫存器的值,也可以檢視使用者變數 num 的值,這樣你就能實時的觀察變數的變化,從而知道**有問題了。

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

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

Python程式設計師為什麼一定要掌握Linux?

不少python新手經常問到學python到底需不需要學習linux?python不是支援windows和linux作業系統嗎?能在windows下開發為什麼還要學習linux?問這樣的問題的朋友,可能還沒有真正入行python開發或者沒有真正參與公司的一些專案部署,上線過程,對於上面問題,首選答案...

Docker 為什麼一定要sudo

這個sudo真是煩死人了,每次都要sudosudo,覺得浪費了我大量的時間。但是,當我學習到如何到如何可以不sudo 為什麼要sudo之後,還是覺得sudo好一些吧,於是最後選擇加乙個環境變數,來節約時間。參考文章中給出了幾個非常高水平的處理辦法,我很喜歡,以後來學。1.如何免sudo實現docke...

為什麼規則一定要簡單?

我們生活在各種各樣的規則中,專案中 企業中 社會中,凡是有人的地方就有規則。規則,不論明規則,還是潛規則,都將約束人們的行為。為什麼規則一定要簡單?只有簡單的規則才能體現公正。試想,玩撲克牌,如果撲克牌的規則過於複雜,複雜到多數玩家無法通曉全部規則,還有誰會玩呢?我們把規則搞複雜的目的是什麼呢?是為...