加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

驚呆!MDK當(dāng)計(jì)算器使用?

2020/12/22
112
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

今天魚鷹介紹一個(gè)小知識(shí)點(diǎn),那就是如何在調(diào)試時(shí)進(jìn)行計(jì)算。在開發(fā)調(diào)試過程中,難免會(huì)遇到調(diào)試過程中需要臨時(shí)計(jì)算的情況,有些時(shí)候可能還需要?jiǎng)討B(tài)的得到計(jì)算結(jié)果。很多時(shí)候,我們都會(huì)打開 Windows 自帶的計(jì)算器,這確實(shí)一種解決方式,但是難免顯得麻煩,而對(duì)于需要多次計(jì)算的情況來說,更是如此。那么是否有更好的解決方式呢?當(dāng)然有,就是使用 MDK 自帶的命令行進(jìn)行計(jì)算。進(jìn)入調(diào)試模式后,MDK 自動(dòng)會(huì)打開一個(gè)命令窗口,但估計(jì)絕大部分人都不知道這個(gè)窗口可以干什么用,今天魚鷹就介紹一個(gè)與此有關(guān)的使用,就是計(jì)算。

比如輸入以下公式(實(shí)際上,這里可以使用全局變量計(jì)算或當(dāng)程序停在局部函數(shù)時(shí)計(jì)算局部變量),得到結(jié)果為 0x04。

你會(huì)發(fā)現(xiàn)即使使用括號(hào),也能計(jì)算出結(jié)果,比 Windows 自帶的計(jì)算器強(qiáng)。那么現(xiàn)在就看計(jì)算結(jié)果是否正確了。如果我們的小學(xué)數(shù)學(xué)過關(guān)的話,這個(gè)結(jié)果應(yīng)該是 5。但結(jié)果卻是 4,還是按照 16 進(jìn)制顯示的。仔細(xì)想想你就知道,這里的計(jì)算完全按照 C 的表達(dá)式形式進(jìn)行計(jì)算的(命令行下提示 C- style),這樣看來計(jì)算結(jié)果沒有問題。那我們嘗試使用浮點(diǎn)進(jìn)行計(jì)算:

發(fā)現(xiàn)結(jié)果是我們想要的,同時(shí)計(jì)算結(jié)果使用十進(jìn)制顯示。這里就需要注意一點(diǎn),如果說你想計(jì)算結(jié)果準(zhǔn)確,那么使用浮點(diǎn)計(jì)算是一個(gè)不錯(cuò)的選擇,否則你就要確定是否是在驗(yàn)證你的 C 語言表達(dá)式是否正確了。我們會(huì)想,是否可以設(shè)置結(jié)果為十進(jìn)制顯示呢?偶然情況下,魚鷹發(fā)現(xiàn),這個(gè)結(jié)果顯示和局表變量窗口有關(guān):

也就是說,如果局部變量顯示為十進(jìn)制,那么計(jì)算結(jié)果也是十進(jìn)制,反之亦然(默認(rèn)十六進(jìn)制顯示)。所以,現(xiàn)在我們有兩種十進(jìn)制顯示方式:1、將局部變量窗口設(shè)置為十進(jìn)制顯示 2、使用浮點(diǎn)計(jì)算(比如 1 寫成 1.0),那么結(jié)果一定是十進(jìn)制。魚鷹推薦第二種方式,比較方便,同時(shí)計(jì)算結(jié)果也不容易出錯(cuò)。事實(shí)上,除此之外,這個(gè)命令窗口還可以使用 sizeof,比如我想計(jì)算一下 int 的大小,可以這樣:

在這里可能不能體現(xiàn)這個(gè)命令窗口的優(yōu)勢(shì),但如果說你想計(jì)算一個(gè)復(fù)雜的結(jié)構(gòu)體呢?!

還有如果我們想動(dòng)態(tài)的知道兩個(gè)變量的差值(或其他表達(dá)式)怎么辦?正常情況下,我們會(huì)選擇修改代碼,將結(jié)果存放至全局變量顯示。但今天魚鷹再介紹一種更簡(jiǎn)單的顯示方式,直接在 Watch 窗口計(jì)算:

但是要注意,如果這兩個(gè)變量修改的很快的話,可能會(huì)突然出現(xiàn)一個(gè)異常值,所以只能作為一個(gè)參考,不能看到一個(gè)異常值就認(rèn)為兩個(gè)變量有問題。但是暫停調(diào)試情況下,計(jì)算結(jié)果是可以相信的。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

六年開發(fā)經(jīng)驗(yàn),豐富的KEIL調(diào)試經(jīng)驗(yàn),STM32使用經(jīng)驗(yàn),C語言運(yùn)用經(jīng)驗(yàn)。