自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

傳說中的軟件斷點(diǎn)到底是什么?

商務(wù)辦公
不知道道友是否有這樣的經(jīng)歷,代碼全速運(yùn)行的時(shí)候,等了很久發(fā)現(xiàn)并沒有得到想要的結(jié)果,然后暫停之后發(fā)現(xiàn)程序死在了循環(huán)里面,或者斷言里面。

[[402868]]

本文轉(zhuǎn)載自微信公眾號(hào)「魚鷹談單片機(jī)」,作者魚鷹Osprey。轉(zhuǎn)載本文請(qǐng)聯(lián)系魚鷹談單片機(jī)公眾號(hào)。

不知道道友是否有這樣的經(jīng)歷,代碼全速運(yùn)行的時(shí)候,等了很久發(fā)現(xiàn)并沒有得到想要的結(jié)果,然后暫停之后發(fā)現(xiàn)程序死在了循環(huán)里面,或者斷言里面。

那么我們是否有辦法在程序斷言失敗的時(shí)候,讓程序自動(dòng)停下來呢?而不是苦苦等待結(jié)果呢?

如果用常規(guī)的方法,肯定是在斷言里面加入斷點(diǎn),只要斷言失敗,那么程序自然就停下來了。

但是我們知道,KEIL 加入斷點(diǎn)后有可能在再次打開工程后消失,而且STM32單片機(jī)支持的斷點(diǎn)數(shù)量也有限,有沒有好的方法?

有的,就是軟件斷點(diǎn)。

你可以在需要停止CPU運(yùn)行的代碼中加入這條語句:

  1. __breakpoint(0);  //后面的立即數(shù)不怎么重要 

這樣,當(dāng)你的程序斷言失敗了之后,如果運(yùn)行到這條語句,在線調(diào)試模式下就會(huì)自動(dòng)停止單片機(jī)運(yùn)行(如果不在在線調(diào)試模式,也會(huì)進(jìn)入停止運(yùn)行,所以需要后面的優(yōu)化方案)。

比如 hardfault 錯(cuò)誤很難查,但是你可以在進(jìn)入這個(gè)中斷后,立刻執(zhí)行一條匯編軟件斷點(diǎn)代碼:

  1. BKPT  0 

或者直接在中斷處理函數(shù)中加入代碼:

  1. void HardFault_Handler(void) 
  2.     __breakpoint(0); 

這樣一來,一旦運(yùn)行到這個(gè)函數(shù),單片機(jī)就會(huì)馬上自動(dòng)停止運(yùn)行,而且你還可以通過 stack 窗口查看是從哪里跳進(jìn)這個(gè)函數(shù)的,這樣就能快速定位這種錯(cuò)誤了!

只有在滿足條件下,才會(huì)在你設(shè)置斷點(diǎn)位置自動(dòng)停止在斷點(diǎn)處。比如一個(gè)條件下,會(huì)導(dǎo)致整個(gè)程序出問題,那么你可以在應(yīng)用程序中添加代碼,讓其在滿足條件時(shí)自動(dòng)停止運(yùn)行(前提是處于在線調(diào)試,否則沒有任何打印信息的情況下停止運(yùn)行是很麻煩的事情)。

但有的時(shí)候,我只想讓軟件斷點(diǎn)在進(jìn)入調(diào)試模式時(shí)生效,正常運(yùn)行時(shí)不產(chǎn)生軟件斷點(diǎn),又該如何處理;換句話說,如何判斷單片機(jī)處于調(diào)試模式還是正常模式。

C 語言版

  1. if(*((uint32_t*)0xE000EDF0) & 0x00000001) // 判斷是否工作在調(diào)試模式 
  2.     __breakpoint(0); 

匯編版

  1. DEMCR          EQU     0xE000EDF0 
  2.  
  3.             LDR     r0, =DEMCR 
  4.             LDR     r0,[r0,#0x00] 
  5.             AND     r0,r0,#0x00000001 
  6.             CBZ     r0,no_debug 
  7.             BKPT    0 
  8. no_debug  ; 地址標(biāo)簽 

適用于 STM32f1x or Cortex-M3/M4 平臺(tái),其他平臺(tái)自行研究

 

注意,剛下載程序時(shí)判斷也會(huì)成立,必須斷開調(diào)試器后再上電才可退出調(diào)試模式(或者其他方式退出調(diào)試模式)

 

責(zé)任編輯:武曉燕 來源: 魚鷹談單片機(jī)
相關(guān)推薦

2010-03-19 17:30:18

云計(jì)算

2018-03-13 07:17:39

網(wǎng)絡(luò)限速運(yùn)營(yíng)商網(wǎng)絡(luò)

2012-03-16 09:57:29

開源

2012-03-16 09:23:50

開源IDC

2017-04-12 14:18:29

北京政務(wù)云數(shù)據(jù)中心設(shè)計(jì)布局

2013-07-16 10:03:45

移動(dòng)市場(chǎng)移動(dòng)觀察新機(jī)型

2015-05-20 10:02:02

程序員全棧工程師

2017-03-02 12:18:22

5G運(yùn)作基礎(chǔ)

2010-11-04 10:19:31

Chrome OS

2019-02-25 10:18:43

工具代碼測(cè)試

2019-04-03 11:22:06

NginxApacheweb服務(wù)器

2022-08-24 13:25:20

微軟Python小白神器

2017-12-18 16:55:47

2018-03-08 10:35:07

2020-03-05 10:28:19

MySQLMRR磁盤讀

2022-10-08 00:00:00

Spring數(shù)據(jù)庫(kù)項(xiàng)目

2011-04-27 09:30:48

企業(yè)架構(gòu)

2020-10-14 06:22:14

UWB技術(shù)感知

2010-11-01 01:25:36

Windows NT

2020-09-22 08:22:28

快充
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)