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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Event Recorder的使用

汽車電子技術 ? 來源:嵌入式之入坑筆記 ? 作者: 嵌入式之入坑筆記 ? 2023-02-10 14:09 ? 次閱讀

單片機的軟件開發(fā)中,經(jīng)常會遇到各種各樣的問題,很多時候為了定位到出現(xiàn)bug的地方,我們可能會借助很多的手段或者工具。比如串口打印、MDK在線仿真、上位機調試工具等等的。但是,有時候想要用串口打印輸出某些結果,而硬件設計又沒有預留串口,這種時候就感覺很不方便。我個人使用串口調試的頻率還是蠻多的,主要是簡單易操作,可以在想要觀察運行結果的代碼位置隨便加調試輸出,很方便定位問題。在硬件上沒有多余的串口預留的話,如果有外接仿真引腳出來的話,在MDK環(huán)境下就可以使用ST-LINK、J-LINK等的各種LINK進行調試,實現(xiàn)printf輸出的功能,簡直是不要太棒了!在MDK的開發(fā)IDE環(huán)境下,支持仿真調試的組件有好幾個,我這里使用的是Event Recorder。這個組件功能是在MDK5.22的版本是哪個開始增加的,所以想要使用這個組件功能,需要將自己的MDK開發(fā)工具升級到5.22以上,建議是當前最新的版本!

1、添加 Event Recorder 組件

1)打開你需要添加調試組件的項目工程,點擊如下圖所示的圖標:

pYYBAGPl3oOAdGhCAABKe-ugfoU937.png

2)選擇 “Compiler”,并按照如下勾選,勾選之后點擊“ok”即可。如下圖:

pYYBAGPl3pCAe2rzAACStiKdwfI693.png

勾選之后可以看到工程目錄上出現(xiàn)一個“Compiler”的選項,說明組件添加成功了,如下圖:

pYYBAGPl3ueAXCjkAAB1gI1u5LI697.png

3)檢查組件的工程配置,如下:

pYYBAGPl3vKAW0OSAAFPC0GOVD4584.png

說明如下:

Number of Records:表示 Event Recorder 緩沖可以記錄的消息條數(shù)。Time Stamp Source:表示時間戳的來源其中,Time Stamp Source 有如下四種可以選擇,一般使用 DWT 時鐘周期計數(shù)器。如下圖:

poYBAGPl3v2AGp3GAAAS3zyYi8I176.png

至此,Event Record組件就已經(jīng)添加完成了。

2、printf 重定向

在Event Recorder 實現(xiàn)printf輸出需要使用MDK的 Debug 功能,輸出的效果就跟串口調試工具上的顯示效果是一樣的。Event Recorder 中的重定向代碼如下:

int fputc (int c, FILE * stream) {
#if (!defined(RTE_Compiler_IO_STDOUT) && !defined(RTE_Compiler_IO_STDERR))
  (void)c;
  (void)stream;
#endif
 
#ifdef RTE_Compiler_IO_STDOUT
  if (stream == &__stdout) {
#if (STDOUT_CR_LF != 0)
    if (c == 'n') stdout_putchar('r');
#endif
    return (stdout_putchar(c));
  }
#endif
 
#ifdef RTE_Compiler_IO_STDERR
  if (stream == &__stderr) {
#if (STDERR_CR_LF != 0)
    if (c == 'n') stderr_putchar('r');
#endif
    return (stderr_putchar(c));
  }
#endif
 
  return (-1);
}

注意:使用 Event Recorder 實現(xiàn)printf重定向時,一定要取消掉自己的項目中原本的重定向!

1)進入仿真調試模式,如下:

pYYBAGPl3wuALctGAAAxhoV4-D0964.png

2)選中 Debug(printf)Viewer 調試組件,如下圖:

poYBAGPl3xeAa7f9AAMXkalcjzg602.png

3)選擇仿真時周期更新,如下圖:

pYYBAGPl3ySAKl9XAAMsqzVAvhA382.png

4)添加初始化代碼,如下:

/* 初始化 EventRecorder 并開啟 */
   EventRecorderInitialize(EventRecordAll, 1U);
    EventRecorderStart();

5)全速運行即可以看到結果。

poYBAGPl3zCAcgiIAABoQ7jU4M0498.png

示例:

測試代碼如下:

poYBAGPl3zqAQ9sXAAE-ZmJKzRU919.png

仿真結果如下:

poYBAGPl30aAKOp7AADfB0rjQW4368.png

鼠標右鍵還可以對 Debug(printf)Viewer 進行設置,如下圖:

pYYBAGPl31SAbpRNAAFpwzo6K-U868.png

3、簡單方便的時間測量功能

Event Recorder 也可以測量代碼運行的時間,時間測量功能簡單易用,僅需一個起始函數(shù),一個停止函數(shù)即可。

3.1、時間測量起始函數(shù)

EventStartG (slot)
或者
EventStopGv (slot, val1, val2)

函數(shù)說明:

1)函數(shù)中的字母 G 是表示分組 A,B,C,D,即實際調用函數(shù)為 EventStartA,EventStartB,EventStartC 和 EventStartD。2)函數(shù)的第一個形參 slot 的范圍是 0-15,也就是最大可以測量 16 路。3)函數(shù)后面的兩個形象 val1 和 val2 是 32 Bit變量,用戶可以用這兩個形參來傳遞變量數(shù)值給 Event Statistics 調試組件里面,用于圖形化展示。

3.2、時間測量結束函數(shù)

EventStopG (slot)
或者
EventStopGv (slot, val1, val2)

函數(shù)說明:

1)函數(shù)中的字母G是表示分組A,B,C,D,即實際調用函數(shù)為EventStopA,EventStopB,EventStopC 和 EventStopD。2)函數(shù)的第一個形參 slot 的范圍是 0-15,也就是最大可以測量 16 路。3)函數(shù)后面的兩個形象 val1 和 val2 是 32 位變量,用戶可以用這兩個形參來傳遞變量數(shù)值給 Event Statistics 調試組件里面,用于圖形化展示。

3.3、使用示例

1)添加初始化代碼

/* 初始化 EventRecorder 并開啟 */
EventRecorderInitialize(EventRecordAll, 1U);
EventRecorderStart();

2)在代碼前后加上起始和結束時間的測量API函數(shù),如下所示:

poYBAGPl32WAU9bLAAFVbwk3L8g506.png

3)選擇 Event Statistics 調試組件,如下:

pYYBAGPl33OAUz0FAAYRAqFym9E226.png

4)全速運行,查看結果,如下:

pYYBAGPl33-AJECJAAFhG1Z328I392.png

從圖中可以看出,開始測量的位置是在 149 行處,結束測量的位置是在152 行處,下方的紅色方框處標出了測量的最大時間和最小時間。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6026

    文章

    44452

    瀏覽量

    630791
  • 軟件開發(fā)

    關注

    0

    文章

    591

    瀏覽量

    27302
  • 上位機
    +關注

    關注

    27

    文章

    928

    瀏覽量

    54643
收藏 人收藏

    評論

    相關推薦

    【原創(chuàng)專題教程第7期】終極調試組件Event Recorder,各種Link通吃,支持時間和功耗測量,printf打印,RTX5及中間件調試

    Recorder實現(xiàn)的串口打印,無需占用系統(tǒng)額外的硬件資源,而且速度超快,是替代串口調試的絕佳方式。5、Event Recorder的API可以在中斷和多任務環(huán)境中正常調用。最重要的是速度快。6、對于
    發(fā)表于 06-19 18:54

    靈動微課堂 (第164講) | MM32F013x——Event Recorder使用方法

    Recorder則沒有以上的限制,Event Recorder是MDK在5.22版本加入的新功能,使用標準SWD的下載接口,基本上適用于各種Link,只要MDK v5.22以上的版本即可,支持時間測量、功耗測量
    發(fā)表于 04-23 11:21

    STM32F407的終極調試組件Event Recorder

    第8章 STM32F407的終極調試組件Event Recorder本章節(jié)為大家介紹終極調試方案Event Recoder,之所以叫終極解決方案,是因為所有Link通吃,支持時間測量,功耗測量
    發(fā)表于 08-03 08:22

    移植Event Recorder調試工具

    、Output3.3、C/C++(AC6)3.4、Debug3.5、模板代碼(main.c)3.6、開始移植RTX53.6、隔離Device上的文件四、代碼4.1、main.h4.2、main.c五、DEBUG5.1、RTX RTOS六、細節(jié)補充6.1、移植Event Recor
    發(fā)表于 08-24 06:07

    Event Recorder是什么?Event Recorder的特色有哪些

    Event Recorder是什么?Event Recorder的特色有哪些?JTAG接口和SWD接口區(qū)別在哪?
    發(fā)表于 10-09 06:01

    請問一下Event Recorder的特色是什么?

    JTAG接口和SWD接口區(qū)別是什么? Event Recorder的特色是什么?
    發(fā)表于 10-11 07:00

    STM32H7的終極調試組件Event Recorder是什么

    STM32H7的終極調試組件Event Recorder是什么
    發(fā)表于 10-13 07:32

    怎樣使用keil的Event Recorder中間件進行打印呢

    怎樣使用keil的Event Recorder中間件進行打印呢?有何缺點?怎樣使用jlink-RTT Viewer組件進行打???有何缺點?
    發(fā)表于 01-19 06:44

    Event Recorder的特色主要有幾點

    1、最好使用比較新的cmsis庫,否則添加event recorder將無法編譯通過2、rte設置如下:3、sct文件開辟一個NOINIT的sram區(qū)域,不開辟好像也可以,官網(wǎng)教程是開辟的。4
    發(fā)表于 01-19 06:27

    淺析基于GD32F427適配RTX4+調試組件Event Recorder

    :使用板載的GD_Link就能方便調試而不需要串口1.打開Manage Run_Time Enviornment -> Compiler 選項中Event Recorder
    發(fā)表于 12-21 09:39

    【STM32F429開發(fā)板用戶手冊】第8章 STM32F429的終極調試組件Event Recorder

    【STM32F429開發(fā)板用戶手冊】第8章 STM32F429的終極調試組件Event Recorder
    發(fā)表于 12-04 14:06 ?17次下載
    【STM32F429開發(fā)板用戶手冊】第8章 STM32F429的終極調試組件<b class='flag-5'>Event</b> <b class='flag-5'>Recorder</b>

    【STM32F407開發(fā)板用戶手冊】第8章 STM32F407的終極調試組件Event Recorder

    【STM32F407開發(fā)板用戶手冊】第8章 STM32F407的終極調試組件Event Recorder
    發(fā)表于 12-04 14:21 ?18次下載
    【STM32F407開發(fā)板用戶手冊】第8章 STM32F407的終極調試組件<b class='flag-5'>Event</b> <b class='flag-5'>Recorder</b>

    【STM32H7教程】第8章 STM32H7的終極調試組件Event Recorder

    【STM32H7教程】第8章 STM32H7的終極調試組件Event Recorder
    發(fā)表于 12-05 20:06 ?7次下載
    【STM32H7教程】第8章 STM32H7的終極調試組件<b class='flag-5'>Event</b> <b class='flag-5'>Recorder</b>

    MM32F013x——Event Recorder使用方法

    在前面幾個專題中介紹了Ozone、RTT-Viewer、J-Scope在MM32F013x上的使用方法,雖然以上的幾種方式簡單方便,但是也僅僅局限于J-Link工具...
    發(fā)表于 01-25 18:22 ?2次下載
    MM32F013x——<b class='flag-5'>Event</b> <b class='flag-5'>Recorder</b>使用方法

    MM32F013x——Event Recorder使用方法

    在前面幾個專題中介紹了Ozone、RTT-Viewer、J-Scope在MM32F013x上的使用方法,雖然以上的幾種方式簡單方便,但是也僅僅局限于J-Link工具。
    發(fā)表于 02-08 16:19 ?1次下載
    MM32F013x——<b class='flag-5'>Event</b> <b class='flag-5'>Recorder</b>使用方法