電子發燒友網>控制/MCU> > 正文

如何充分利用各種類型的斷點

2021年09月18日 11:03 ? 次閱讀

在面向高可靠性應用開發MCU程序的過程中,工程師通常會遇到設定斷點的問題,斷點的合理使用對于更好地編程和MCU使用是一種挑戰。借助新的工具,這些斷點就可以發揮巨大的作用,成為開發工作中的利器。

斷點的概念非常簡單,因為它的作用是在指定指令之前中斷程序的執行。實現方式可以是硬件或軟件。然而,簡單并不意味著它不能被用于復雜的調試組合中,以達到用簡單的方式解決BUG的目的。事實上,軟件開發者在調試時離不開斷點,但如何最好地利用斷點呢?

要更好地使用各種斷點,開發人員不能僅靠經驗或者直覺,需要借助一些先進的開發工具來完成,它們可以幫助開發人員去了解不同斷點的特點和價值。例如,在IAR Embedded Workbench工具中,開發人員可以使用以下斷點:

·代碼斷點

·條件代碼斷點

·具有讀寫訪問的數據斷點

·數據日志斷點

·日志斷點

·功率斷點

·Trace開始和停止斷點

本文將指導開發人員如何利用每一個可用的斷點來更快地調試程序。

代碼斷點

代碼斷點是最簡單的斷點。開發人員只需要選擇C代碼或者反匯編窗口中的ASM指令并設置斷點即可。一旦斷點被觸發,程序就會暫停。此時,開發人員就可以檢查變量、標志和寄存器的值。換句話說,開發人員現在擁有了完全控制權限。

poYBAGFFWuSANUdmAAalwzEfsw4638.png

代碼斷點的數量受限于MCU硬件斷點的數量,但如果代碼在RUM中運行,開發人員利用軟件斷點,軟件斷點的數量則可以是無限的。即使數量有限,例如對于Arm Cortex-M,有6到8個斷點,但開發人員也可以保存斷點位置并在需要時禁用和啟用斷點。只需要選擇顯示View -》Breakpoints window,就可以選中/清除方框,也就是啟用或禁用斷點。

poYBAGFFWvKAdS1CAAWN1Ad80AQ942.png

在這種情況下,可以有6到8個以上的斷點,但不能同時都激活。

默認情況下,IDE會設置代碼斷點。如果開發人員有一個I-jet仿真器,就可以在右鍵點擊代碼行時明確地選擇一個flash斷點。如果開發人員已經用完了現有全部硬件斷點,這招會很有用。注意斷點符號中的“F”說明改斷點是Flash斷點。IAR Embedded Workbench for Arm的7.60或更高版本中提供flash斷點功能。

poYBAGFFWvyAAVpJAAX-P0GZdUU660.png

條件代碼斷點

條件斷點是代碼斷點與一些標志或變量(作為條件)的組合。設置好斷點后,開發人員可以再次使用View -》Breakpoints window來查看所有斷點,也可以通過右鍵點擊并選擇Edit opTIon來設置額外參數。

poYBAGFFWwOAPzrrAAU648t0XhQ472.png

使用的語法類似于C語言的語法,包括==、》=和《=。例如,如果想讓應用在計數器等于10的時候停止在斷點,則可以使用“counter==10”。

pYYBAGFFWwyAMG_mAAKu0k3A3ko106.png

當需要在一個中斷例程內設置斷點時,這非常有用。如果沒有條件,就不可能調試應用,因為程序將一直停止。使用標志或變量作為條件可以簡化操作。此外,還可以進一步使用跳過計數器和條件檢查,如true或changed。

具有讀寫訪問的數據斷點

相比其他斷點,數據斷點有些不同,因為它們監測對特定內存地址、標志、變量或寄存器的讀寫訪問。數據斷點使用非常直截了當只需右鍵點擊標志或變量,然后選擇選項Set data Breakpoint即可。默認情況下,讀和寫的訪問將被監測。如果開發人員想增加額外的設置,可以通過View-》Breakpoints window和Edit opTIon來完成。除了訪問之外,還可以監測數據是否匹配。這意味著只有當數據匹配時,寫或讀的訪問才會觸發停止。選擇“Edit”按鈕,可以打開一個額外的窗口,可以選擇絕對地址甚至是源代碼行。如果是一個變量或標志,建議使用自動大小。如果需要監測更大的范圍,應手動設置所需的大小。

poYBAGFFWxmAF2kzAAFiFMTHZis909.png

數據斷點對于調試被應用破壞的標志和變量非常有用。一旦出現了讀寫訪問,應用就會停止。另一種用法是堆棧溢出調查,只需要在堆棧大小的80-90%處設置一個數據斷點,當溢出接近時,就可以停止應用,并一步步找到問題的根源。

數據日志斷點

除了可監測讀寫訪問的數據斷點外,開發人員還可以使用數據日志斷點。使用這些斷點的目的是監測并以圖形方式繪制特定變量或內存地址的值跟隨時間的變化,這就能更輕松地比較多個變量,觀察中斷觸發的情況。

pYYBAGFFWzOAUkX6AASqmmEYF2M270.png

仿真器選項提供了時間軸、附加數據日志和數據日志總結,如下圖所示。

pYYBAGFFWz-AGLPnAAUlppT23cw918.png

日志斷點

除了代碼斷點和數據斷點之外,開發人員還可以使用日志斷點。這是一個特殊的斷點,因為它只會暫時停止應用來打印一條信息。只有當斷點被觸發時,它才會顯示選定的信息。

poYBAGFFW0qAT0OXAAGFOxbj1V8232.png

每當斷點被觸發,一條信息就會顯示在調試日志窗口中。配合計數器,我們就可以知道應用源代碼的特定部分運行了多少次。

poYBAGFFW1OAO_f0AAQte8BG4J0071.png

功率斷點

得益于IAR Embedded Workbench的功率調試技術,開發人員可以監控能耗并將其與源代碼聯系起來。這使得了解整個應用的能耗成為可能。這個概念也使得添加功率斷點成為可能。可以設置一個閾值,比如25mA,一旦能耗超過這個值,調試器就會中斷。

poYBAGFFW1yAYc9uAAQ_tmD6-Os948.png

設置閾值的操作非常簡單。只需要打開I-jet -》 PowerLog window,然后設置數值和對應的操作。

pYYBAGFFW2aABOTKAATSW-ahPiE858.png

這個功能很有用,可以保證不出現任何耗電浪涌或高于指定值的情況,而且通過這種分析,電池的使用壽命也會延長,開發人員可以放心讓其應用長時間運行。雖然時間軸窗口不是必須的,但它能提供實時的能耗信息。

Trace開始和停止斷點

最后要介紹的是Trace開始和停止斷點。如果開發人員使用先進的仿真器,比如I-jet Trace for Arm Cortex-M或I-jet Trace for Cortex-A/R/M,就可以利用這些斷點。這在分析應用特定部分時特別有用。Trace開始和Trace停止斷點簡單易用,只需在代碼行中右鍵點擊并決定跟蹤的開始和結束位置即可。Trace緩沖區將只保存應用中指定代碼行之間的指令。

pYYBAGFFW3KAR1rfAATlblNchEM183.png

另外,開發人員也可以從時間軸上的Trace指令中得到函數調用的圖形概覽,這些函數調用信息是在Trace開始和停止斷點之間捕獲的。

pYYBAGFFXT6AKgV4AAP3f8DHfhE469.png

雖然I-jet Trace仿真器比標準JTAG/SWD仿真器更強大,但有時如果記錄包含所有正常信息時,Trace調試變得很麻煩。為了避免收集數以百萬計的非必要指令,使Trace調試變得簡單明了,IAR Embedded Workbench提供了Trace開始和停止斷點的功能。

下載發燒友APP

打造屬于您的人脈電子圈

關注電子發燒友微信

有趣有料的資訊及技術干貨

關注發燒友課堂

鎖定最新課程活動及技術直播

電子發燒友觀察

一線報道 · 深度觀察 · 最新資訊
收藏 人收藏
分享:

評論

相關推薦

static在c語言中是什么意思

2019-10-10閱讀(64)最主要有兩點用途。讓一個變量長期有效,而不管其是在什么地方被申明。比如:intfun1(){staticints...
發表于 2021-09-17 06:42? 0次閱讀
static在c語言中是什么意思

使用C語言進行PID算法實現

前文對PID算法離散化和增量式PID算法原理進行來探索,之后又使用Matlab進行了仿真實驗,對PID三個參數又有了...
發表于 2021-09-16 09:11? 0次閱讀
使用C語言進行PID算法實現

學習單片機的經驗與心得分享

怎樣才能學好單片機?單片機各管腳都是干什么的?能實現什么樣的功能?...
發表于 2021-09-16 07:15? 0次閱讀
學習單片機的經驗與心得分享

C語言中struct的用法有哪些

定義結構體變量 ? ????下面舉一個例子來說明怎樣定義結構體變量。 ? ? ? ? ? ? ? ?....
發表于 2021-09-15 09:41? 802次閱讀
C語言中struct的用法有哪些

使用C語言進行PID算法實現

前文對PID算法離散化和增量式PID算法原理進行來探索,之后又使用Matlab進行了仿真實驗,對PID三個參數又有了...
發表于 2021-09-15 09:20? 0次閱讀
使用C語言進行PID算法實現

輕松搞定C語言(提高篇)

太大,上傳不了附件,以下是網盤鏈接: 輕松搞定C語言(提高篇) 鏈接: 提取碼:cq6c ...
發表于 2021-09-14 17:29? 197次閱讀
輕松搞定C語言(提高篇)

C語言編程程序的內存如何布局

重點關注以下內容:   C語言程序在內存中各個段的組成   C語言程序連接過程中的特性和常見錯誤   C...
發表于 2021-09-13 15:04? 101次閱讀
C語言編程程序的內存如何布局

計算機如何執行你寫的代碼

計算機如何執行你寫的代碼?知乎上有人提問:電腦怎樣執行編程語言的? 很多剛剛入坑的小白可能對此完全沒....
發表于 2021-09-12 09:33? 277次閱讀
計算機如何執行你寫的代碼

C語言發展歷程,C語言特點分析

C語言的發展頗為有趣。它的原型ALGOL 60語言。   1963年,劍橋大學將ALGOL 60語言發展成為CPL(Comb...
發表于 2021-09-10 17:59? 505次閱讀
C語言發展歷程,C語言特點分析

C語言的一些誤用和知識總結

在學習單片機的時候才真正知道C語言是什么它是來干什么的~但是C語言用到嵌入式只是它小小的一部分他的應用還有很多地...
發表于 2021-09-10 10:02? 202次閱讀
C語言的一些誤用和知識總結

C語言測控系統程序設計步進電機控制

C語言測控系統程序設計步進電機控制實驗報告學生姓名:XXX 學號:XXXXXXXXX實驗的目的:1.掌握計算機并行...
發表于 2021-09-10 06:21? 0次閱讀
C語言測控系統程序設計步進電機控制

單片機是啥?怎么用

完結單片機基礎知識的總結(制作作品)一個暑假過去了,也許沒有達到學長和老師的期望,可是只有我知道我自己是突破了自...
發表于 2021-09-10 06:07? 0次閱讀
單片機是啥?怎么用

內聯匯編代碼中的關鍵語法規則講解

一、基本 asm 格式 1. 語法規則 2. test1.c 插入空指令 3. test2.c 操作....
發表于 2021-09-05 09:46? 233次閱讀
內聯匯編代碼中的關鍵語法規則講解

C語言代碼中的extern

在你的C語言代碼中,不知能否看到類似下面的代碼: 這好像沒有什么問題,你應該還會想:“嗯?是啊,我們....
發表于 2021-09-02 15:13? 217次閱讀
C語言代碼中的extern

嵌入式系統開發的思維和注重方法

開頭的話 嵌入式開發是一個比較苦、容易背鍋、可能仍然需要996而且拿錢較少,但也有些許樂趣的活,我一....
發表于 2021-09-02 11:10? 1219次閱讀
嵌入式系統開發的思維和注重方法

Vivado調用Questa Sim或Model...

Vivado調用Questa Sim或ModelSim仿真中存在的一些自動化問題的解決方案。 Viv....
發表于 2021-09-02 10:12? 215次閱讀
Vivado調用Questa Sim或Model...

21489圖形化開發詳解:Fireware的燒寫...

本文介紹ADI SHARC DSP圖形化開發,在一般我們都是使用vdsp++進行c語言開發的,但其實....
發表于 2021-08-27 15:14? 1370次閱讀
21489圖形化開發詳解:Fireware的燒寫...

嵌入式系統編程的大小端和內存對齊問題

C語言是一種高級語言,在大多數情況下C語言的代碼是和具體的處理器體系結構無關的。然而,在嵌入式系統的....
發表于 2021-08-27 10:54? 1112次閱讀
嵌入式系統編程的大小端和內存對齊問題

大文件上傳服務器、支持超大文件HTTP斷點如何續...

最近由于筆者所在的研發集團產品需要,需要支持高性能的大文件http上傳,并且要求支持http斷點續傳....
發表于 2021-08-26 15:36? 712次閱讀
大文件上傳服務器、支持超大文件HTTP斷點如何續...

C語言編程中如何求出二叉樹后序遍歷

題目 已知二叉樹前序為 ABDFGCEH 后序序列為 BFDGACEH ,要求輸出后序遍歷為 FGD....
發表于 2021-08-23 11:04? 1225次閱讀
C語言編程中如何求出二叉樹后序遍歷

FPGA、Verilog HDL與VHDL的優缺...

Verilog HDL 優點:類似C語言,上手容易,靈活。大小寫敏感。在寫激勵和建模方面有優勢。 缺....
發表于 2021-08-20 10:03? 333次閱讀
FPGA、Verilog HDL與VHDL的優缺...

淺談嵌入式中的C語言編程技術分析

程序員可能無意識的傳遞了錯誤參數;外界的強干擾可能將傳遞的參數修改掉,或者使用隨機參數意外的調用函數....
發表于 2021-08-19 14:50? 4144次閱讀
淺談嵌入式中的C語言編程技術分析

C語言中的高內聚低耦合講解

編程時,我們講究的是高內聚低耦合,在協同開發、代碼移植、維護等環節都起到很重要的作用。 一、原理篇而....
發表于 2021-08-16 14:06? 304次閱讀
C語言中的高內聚低耦合講解

C語言中Linux字節對齊的問題

最近作者在做一個項目,遇到一個問題,運行于ARM上的threadx在與DSP通信采用消息隊列的方式傳....
發表于 2021-08-16 11:25? 329次閱讀
C語言中Linux字節對齊的問題

Keil5軟件配置與新建STM32工程教程

新建工程文件夾 建立名字為LED的文件夾存放工程文件,其中再建立兩個文件夾,Listing文件夾用于....
發表于 2021-08-16 10:21? 412次閱讀
Keil5軟件配置與新建STM32工程教程

周易AIPU Model Zoo模型list

繼周易AIPU SDK 公測版開放以來,很多AIoT工程師們積極申請仿真評測。為了讓大家充分利用周易....
發表于 2021-08-14 17:42? 685次閱讀
周易AIPU Model Zoo模型list

當 i = i++ 后,結果究竟是什么

前言: 之前有朋友跟我討論過一個問題,他問在java中,i=1;i=i++;之后的結果時什么,我一開....
發表于 2021-08-14 10:16? 283次閱讀
當 i = i++ 后,結果究竟是什么

while(1)和 for(;;)有什么區別

有讀者提出了類似這樣的問題:while(1) 和 for(;;) 它們不都是無限循環嗎,作用應該一樣....
發表于 2021-08-11 10:34? 276次閱讀
while(1)和 for(;;)有什么區別

STM32操作系統系列使用C語言的教程

C語言,相對于匯編有更好的可讀性,便于維護等優點。下面實驗將使用C語言實現點亮LED燈。C語言與硬件....
發表于 2021-08-10 23:26? 1165次閱讀
STM32操作系統系列使用C語言的教程

什么是C語言的聯合體

我們知道結構體(Struct)是一種構造類型或復雜類型,它可以包含多個類型不同的成員。 在C語言 中....
發表于 2021-07-29 15:35? 283次閱讀
什么是C語言的聯合體

C語言排序中堆排序的技巧

堆是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節....
發表于 2021-07-29 15:29? 235次閱讀
C語言排序中堆排序的技巧

C語言排序中快速排序的技巧

快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比....
發表于 2021-07-29 15:14? 242次閱讀
C語言排序中快速排序的技巧

單片機腳本語言移植lua到stm32MDK的步驟

Lu a 是一個小巧的腳本語言。作者是巴西人。該語言的設計目的是為了嵌入應用程序中,從而為應用程序提....
發表于 2021-07-22 16:54? 397次閱讀
單片機腳本語言移植lua到stm32MDK的步驟

什么是堆內存?堆內存是如何分配的?

在一般的編譯系統中,堆內存的分配方向和棧內存是相反的。當棧內存從高地址向低地址增長的時候,堆內存從低....
發表于 2021-07-05 17:58? 803次閱讀
什么是堆內存?堆內存是如何分配的?

C語言的函數調用程序和函數逆向分析

IDA可以很好地識別函數的起始位置和結束位置,如果在逆向分析的過程中發現有分析不準確的時候,可以通過....
發表于 2021-07-05 15:52? 324次閱讀
C語言的函數調用程序和函數逆向分析

嵌入式開發中C語言源代碼的應用優化方案

如果一個函數只在實現它的文件中被使用,把它聲明為靜態的(static)以強制使用內部連接。否則,默認....
發表于 2021-07-02 16:42? 456次閱讀
嵌入式開發中C語言源代碼的應用優化方案

Verilog HDL語言中任務與函數的比較

其中,返回值的類型和位寬是可選項,如果缺省會返回一位寄存器類型數據。Verilog HDL認為函數的....
發表于 2021-07-02 10:24? 275次閱讀
Verilog HDL語言中任務與函數的比較

定點程序會是什么樣?為什么要進行定點仿真呢?

浮點程序已經給出了,那么定點程序會是什么樣子呢?為什么要進行定點仿真呢?這是產品的要求!很多產品中用....
發表于 2021-06-29 14:19? 542次閱讀
定點程序會是什么樣?為什么要進行定點仿真呢?

C語言程序的動態內存中棧內存區域的概念

C語言程序的動態內存分為棧內存區域和堆內存區域兩種。棧內存是由編譯器管理的,而堆內存是由程序調用具體....
發表于 2021-06-29 10:34? 342次閱讀
C語言程序的動態內存中棧內存區域的概念

探索C語言入門基礎之緩沖區

01 — C標準庫緩沖區探索 在計算機里緩存是一個很重要的概念,C標準庫里大量使用了緩存,最為典型的....
發表于 2021-06-28 17:24? 394次閱讀
探索C語言入門基礎之緩沖區

C# 用來開發上位機挺舒服

作為嵌入式開發者,已經熟悉了C語言跟VS。推薦你也了解下C#,用來開發上位機挺舒服。如果你仔細與其它....
發表于 2021-06-27 10:31? 1004次閱讀
C# 用來開發上位機挺舒服

這些必須要說的C語言技巧你都知道多少?

1、簡介市面上介紹C語言以及編程方法的書數目繁多,但對如何編寫優質嵌入式C程序卻鮮有介紹,特別是對應....
發表于 2021-06-24 12:58? 435次閱讀
這些必須要說的C語言技巧你都知道多少?

你都知道C語言中return的哪些用法?

按初學的理解,return的任務就是返回對應的參數,在外層函數中對這個參數做進一步處理。
發表于 2021-06-23 13:39? 502次閱讀
你都知道C語言中return的哪些用法?

如何使用union來了解內存?

今天一個讀者朋友給我發的一段代碼,這段代碼讓他有了疑惑。 代碼如下: #include “stdio....
發表于 2021-06-22 17:01? 330次閱讀
如何使用union來了解內存?

小編科普幾種C語言中的運算符

我們先看一段代碼演示加減法的使用。
發表于 2021-06-21 16:06? 273次閱讀
小編科普幾種C語言中的運算符

關于C語言編程的四部經典之作

很多朋友問我學了很久的C語言,可是看一些稍微大一點的代碼還是有一些懵圈,自己寫一些程序也是漏洞百出,....
發表于 2021-06-17 17:13? 452次閱讀
關于C語言編程的四部經典之作

什么是順序棧?什么又是鏈棧?

棧是一種后進先出的數據結構,棧的實現方式主要有2種,順序棧和鏈棧。
發表于 2021-06-15 10:50? 291次閱讀
什么是順序棧?什么又是鏈棧?
柚子直播226vt_柚子直播app官网入口_柚子直播间下载