0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DWT跟蹤組件使用方法

硬件攻城獅 ? 來源:技術(shù)讓夢想更偉大 ? 作者:技術(shù)讓夢想更偉大 ? 2022-10-09 10:14 ? 次閱讀

DWT跟蹤組件

跟蹤組件:數(shù)據(jù)觀察點(diǎn)與跟蹤(DWT)

a4574ab0-416f-11ed-96c9-dac502259ad0.png

DWT 中有剩余的計(jì)數(shù)器,它們典型地用于程序代碼的“性能速寫”(profiling)。通過編程它們,就可以讓它們在計(jì)數(shù)器溢出時(shí)發(fā)出事件(以跟蹤數(shù)據(jù)包的形式)。

最典型地,就是使用 CYCCNT寄存器來測量執(zhí)行某個(gè)任務(wù)所花的周期數(shù),這也可以用作時(shí)間基準(zhǔn)相關(guān)的目的(操作系統(tǒng)中統(tǒng)計(jì) CPU使用率可以用到它)。

Cortex-M中的DWT

在Cortex-M里面有一個(gè)外設(shè)叫DWT(Data Watchpoint and Trace),是用于系統(tǒng)調(diào)試及跟蹤。

a48285cc-416f-11ed-96c9-dac502259ad0.png

它有一個(gè)32位的寄存器叫CYCCNT,它是一個(gè)向上的計(jì)數(shù)器,記錄的是內(nèi)核時(shí)鐘運(yùn)行的個(gè)數(shù),內(nèi)核時(shí)鐘跳動(dòng)一次,該計(jì)數(shù)器就加1,精度非常高,如果內(nèi)核時(shí)鐘是72M,那精度就是1/72M = 14ns,而程序的運(yùn)行時(shí)間都是微秒級別的,所以14ns的精度是遠(yuǎn)遠(yuǎn)夠的。

最長能記錄的時(shí)間為:59.65s。計(jì)算方法為2的32次方/72000000。

當(dāng)CYCCNT溢出之后,會(huì)清0重新開始向上計(jì)數(shù)。

使用方法

要實(shí)現(xiàn)延時(shí)的功能,總共涉及到三個(gè)寄存器:DEMCR 、DWT_CTRL、DWT_CYCCNT,分別用于開啟DWT功能、開啟CYCCNT及獲得系統(tǒng)時(shí)鐘計(jì)數(shù)值。

DEMCR

想要使能DWT外設(shè),需要由另外的內(nèi)核調(diào)試寄存器DEMCR的位24控制,寫1使能(劃重點(diǎn)啦,要考試?。。?。DEMCR的地址是0xE000 EDFC

a4bf8c56-416f-11ed-96c9-dac502259ad0.pnga4e0356e-416f-11ed-96c9-dac502259ad0.png

關(guān)于DWT_CYCCNT

使能DWT_CYCCNT寄存器之前,先清0。讓我們看看DWT_CYCCNT的基地址,從ARM-Cortex-M手冊中可以看到其基地址是0xE000 1004,復(fù)位默認(rèn)值是0,而且它的類型是可讀可寫的,我們往0xE000 1004這個(gè)地址寫0就將DWT_CYCCNT清0了。

a4fea044-416f-11ed-96c9-dac502259ad0.png

關(guān)于CYCCNTENA

CYCCNTENA Enable the CYCCNT counter. If not enabled, the counter does not count and no event is generated for PS sampling or CYCCNTENA. In normal use, the debugger must initialize the CYCCNT counter to 0.

它是DWT控制寄存器的第一位,寫1使能,則啟用CYCCNT計(jì)數(shù)器,否則CYCCNT計(jì)數(shù)器將不會(huì)工作。

【https://developer.arm.com/documentation/ddi0337/e/system-debug/dwt/summary-and-description-of-the-dwt-registers?lang=en】

a5172556-416f-11ed-96c9-dac502259ad0.png

綜上所述

想要使用DWT的CYCCNT步驟:

先使能DWT外設(shè),這個(gè)由另外內(nèi)核調(diào)試寄存器DEMCR的位24控制,寫1使能

使能CYCCNT寄存器之前,先清0。

使能CYCCNT寄存器,這個(gè)由DWT的CYCCNTENA 控制,也就是DWT控制寄存器的位0控制,寫1使能

寄存器定義:

//0xE000EDFCDEMCRRWDebugExceptionandMonitorControlRegister.
//使能DWT模塊的功能位
#defineDEMCR(*(unsignedint*)0xE000EDFC)
#defineTRCENA(0x01<

用法示例:

vvolatileunsignedint*DWT_CYCCNT;
volatileunsignedint*DWT_CONTROL;
volatileunsignedint*SCB_DEMCR;

voidreset_timer(){
DWT_CYCCNT=(int*)0xE0001004;//addressoftheregister
DWT_CONTROL=(int*)0xE0001000;//addressoftheregister
SCB_DEMCR=(int*)0xE000EDFC;//addressoftheregister
*SCB_DEMCR=*SCB_DEMCR|0x01000000;
*DWT_CYCCNT=0;//resetthecounter
*DWT_CONTROL=0;
}

voidstart_timer(){
*DWT_CONTROL=*DWT_CONTROL|1;//enablethecounter
}

voidstop_timer(){
*DWT_CONTROL=*DWT_CONTROL|0;//disablethecounter
}

unsignedintgetCycles(){
return*DWT_CYCCNT;
}

main(){
....
reset_timer();//resettimer
start_timer();//starttimer
//Codetoprofile
...
myFunction();
...
stop_timer();//stoptimer
numCycles=getCycles();//readnumberofcycles
...
}

示例2:

#definestart_timer()*((volatileuint32_t*)0xE0001000)=0x40000001//EnableCYCCNTregister
#definestop_timer()*((volatileuint32_t*)0xE0001000)=0x40000000//DisableCYCCNTregister
#defineget_timer()*((volatileuint32_t*)0xE0001004)//GetvaluefromCYCCNTregister

/***********
*Howtouse:
*uint32_tit1,it2;//startandstopflag
start_timer();//startthetimer.
it1=get_timer();//storecurrentcycle-countinalocal
//dosomething
it2=get_timer()-it1;//Derivethecycle-countdifference
stop_timer();//Iftimerisnotneededanymore,stop
print_int(it2);//Displaythedifference
****/

示例3:

#defineDWT_CR*(uint32_t*)0xE0001000

#defineDWT_CYCCNT*(uint32_t*)0xE0001004

#defineDEM_CR*(uint32_t*)0xE000EDFC

#defineDEM_CR_TRCENA(1<

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120818
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2259

    瀏覽量

    94813
  • DWT
    DWT
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    11154

原文標(biāo)題:分享一個(gè)超實(shí)用的單片機(jī)調(diào)試技巧!DWT組件

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    詳解DWT跟蹤組件的單片機(jī)調(diào)試技巧

    DWT 中有剩余的計(jì)數(shù)器,它們典型地用于程序代碼的“性能速寫”(profiling)。通過編程它們,就可以讓它們在計(jì)數(shù)器溢出時(shí)發(fā)出事件(以跟蹤數(shù)據(jù)包的形式)。
    發(fā)表于 10-03 06:42 ?688次閱讀

    ComponentCodelab——Tablist的使用方法

    讓開發(fā)者了解HarmonyOS應(yīng)用開發(fā)常用布局和常用組件之Tablist的使用方法,體驗(yàn)從工程創(chuàng)建到代碼、布局的編寫,再到編譯構(gòu)建、部署和運(yùn)行的全過程。
    發(fā)表于 05-08 22:04

    DWT的相關(guān)資料下載

    特定應(yīng)用場景下定時(shí)器外設(shè)資源是十分稀缺的。在留言區(qū)有位大佬提到可以使用DWT,我就研究了一番。02、DWT在Cortex-M里面有一個(gè)外設(shè)叫DWT(DataWatchpoint andTrace),是用于系統(tǒng)調(diào)試及
    發(fā)表于 02-07 09:19

    AT32使用內(nèi)核DWT寄存器設(shè)定延時(shí)時(shí)間

    (Cortex-M 內(nèi)核)GPIO快速使用方法硬件資源AT-START-F403A V1.x 實(shí)驗(yàn)板;軟件資源該 Demo 以 AT32F403A 為例,BSP 版本
    發(fā)表于 07-19 20:18

    如何使用或啟用STM32CubeIDE DWT?

    我有一塊 STM32L031K6 Nucleo 板……我想使用 DWT.. 但我變成了這個(gè)錯(cuò)誤:../Core/Src/../Inc/stm32_delay.h:35:30: error: 'DWT
    發(fā)表于 01-30 06:38

    示波器的使用方法

    數(shù)字萬用表使用方法和示波器的使用方法詳解。
    發(fā)表于 03-14 10:38 ?32次下載

    電力電纜局部放電測量DWT技術(shù)

    從主要測試方法、信號(hào)提取電路和信號(hào)波形、離散小波變換(DWT)的濾波器本質(zhì)特性實(shí)例分析了電力電纜局部放 電的現(xiàn)場測量和降噪分析技術(shù)。根據(jù)離散小波降噪的母小波選擇、分解尺度選擇和閾值算法等3個(gè)關(guān)鍵
    發(fā)表于 08-30 17:47 ?10次下載
    電力電纜局部放電測量<b class='flag-5'>DWT</b>技術(shù)

    示波器的使用方法(三):示波器的使用方法詳解

    示波器的使用方法并非很難,重點(diǎn)在于正確使用示波器的使用方法。往期文章中,小編對模擬示波器的使用方法和數(shù)字示波器的使用方法均有所介紹。為增進(jìn)大家對示波器的
    的頭像 發(fā)表于 12-24 20:37 ?3344次閱讀

    羅森伯格HFM電纜組件使用方法

    組件使用方法,目的是闡述安裝使用過程中的注意事項(xiàng),避免錯(cuò)誤的操作。 ? 1 2 表:HFM線端連接器 連接器和電纜組件的安裝過程涉及到線纜組件與板端連接器的插入、拔出和線束的布置等過
    的頭像 發(fā)表于 01-18 15:33 ?3520次閱讀

    STM32“隱藏的定時(shí)器”-DWT

    特定應(yīng)用場景下定時(shí)器外設(shè)資源是十分稀缺的。在留言區(qū)有位大佬提到可以使用DWT,我就研究了一番。02、DWT在Cortex-M里面有一個(gè)外設(shè)叫DWT(DataWatchpoint andTrace),是用于系統(tǒng)調(diào)試及
    發(fā)表于 12-04 14:51 ?1次下載
    STM32“隱藏的定時(shí)器”-<b class='flag-5'>DWT</b>

    DWT跟蹤組件調(diào)試

    DWT跟蹤組件 跟蹤組件:數(shù)據(jù)觀察點(diǎn)與跟蹤(DWT)
    的頭像 發(fā)表于 06-22 14:24 ?1040次閱讀
    <b class='flag-5'>DWT</b><b class='flag-5'>跟蹤</b><b class='flag-5'>組件</b>調(diào)試

    射頻電纜組件使用方法和注意事項(xiàng)

    射頻電纜組件使用方法和注意事項(xiàng)? 射頻電纜組件是一類廣泛應(yīng)用于通信系統(tǒng)、無線電設(shè)備和其他射頻設(shè)備中的重要電子組件。它們在傳輸高頻信號(hào)時(shí)扮演著關(guān)鍵的角色,因此使用和安裝時(shí)需要特別注意一
    的頭像 發(fā)表于 01-05 15:08 ?700次閱讀

    揭秘單片機(jī)調(diào)試?yán)髦抵?b class='flag-5'>DWT跟蹤組件

    DWT 中有剩余的計(jì)數(shù)器,它們典型地用于程序代碼的“性能速寫”(profiling)。通過編程它們,就可以讓它們在計(jì)數(shù)器溢出時(shí)發(fā)出事件(以跟蹤數(shù)據(jù)包的形式)。
    發(fā)表于 02-28 13:55 ?848次閱讀
    揭秘單片機(jī)調(diào)試?yán)髦抵?b class='flag-5'>DWT</b><b class='flag-5'>跟蹤</b><b class='flag-5'>組件</b>

    太陽能組件檢測設(shè)備的使用方法簡單嗎?

      JD-EL4太陽能組件檢測設(shè)備的使用方法簡單而直觀,通常設(shè)計(jì)為用戶友好型,以確保操作便捷、高效。以下將詳細(xì)介紹太陽能組件檢測設(shè)備的使用方法及相關(guān)特點(diǎn):   1. 簡潔直觀的操
    的頭像 發(fā)表于 05-21 17:09 ?487次閱讀

    LangChain框架關(guān)鍵組件使用方法

    LangChain,開發(fā)者可以輕松構(gòu)建基于RAG或者Agent流水線的復(fù)雜應(yīng)用體系,而目前我們已經(jīng)可以在LangChain的關(guān)鍵組件LLM,Text Embedding和Reranker中直接調(diào)用OpenVINO進(jìn)行模型部署,提升本地RAG和Agent服務(wù)的性能,接下來就讓我們一起看下這些
    的頭像 發(fā)表于 08-30 16:55 ?642次閱讀
    LangChain框架關(guān)鍵<b class='flag-5'>組件</b>的<b class='flag-5'>使用方法</b>