日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
軟件斷點是什么?

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

在安鄉(xiāng)等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供做網站、網站設計 網站設計制作按需設計網站,公司網站建設,企業(yè)網站建設,成都品牌網站建設,成都全網營銷推廣,外貿營銷網站建設,安鄉(xiāng)網站建設費用合理。

傳說中的軟件斷點到底是什么?

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

那么我們是否有辦法在程序斷言失敗的時候,讓程序自動停下來呢?而不是苦苦等待結果呢?

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

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

有的,就是軟件斷點。

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

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

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

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

BKPT  0

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

void HardFault_Handler(void)
{
   __breakpoint(0);
}

這樣一來,一旦運行到這個函數,單片機就會馬上自動停止運行,而且你還可以通過 stack 窗口查看是從哪里跳進這個函數的,這樣就能快速定位這種錯誤了!

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

但有的時候,我只想讓軟件斷點在進入調試模式時生效,正常運行時不產生軟件斷點,又該如何處理;換句話說,如何判斷單片機處于調試模式還是正常模式。

C 語言版

if(*((uint32_t*)0xE000EDF0) & 0x00000001) // 判斷是否工作在調試模式
{
   __breakpoint(0);
}
匯編版

DEMCR          EQU     0xE000EDF0

           LDR     r0, =DEMCR
           LDR     r0,[r0,#0x00]
           AND     r0,r0,#0x00000001
           CBZ     r0,no_debug
           BKPT    0
no_debug  ; 地址標簽

適用于 STM32f1x or Cortex-M3/M4 平臺,其他平臺自行研究

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


當前題目:軟件斷點是什么?
網站地址:http://www.5511xx.com/article/djhhgpj.html