NRF51822 如何使用RTT 實時終端調試(翻譯教程)

原教程: https://devzone.nordicsemi.com/tutorials/6/安全

 

在SDK12.0.0或者更高的版本中,對RTT的日誌記錄調試是內置到記錄器模塊(logger module NRF_LOG)。想使用RTT的日誌記錄,檢查配置嚮導(configuration wizard)的sdk_config.h文件的NRF_LOG_BACKEND_SERIAL_USES_RTT 選項。app

所以,下面記錄的方法主要用於SDK11或者更久遠的版本。函數

當咱們建立一個工程的時候,一般須要調試和監視代碼的執行。若是咱們想要調試,有幾個選項,例如在串行端口打印信息,或者在keil中使用斷點並單步運行。不過,對於帶有藍牙協議棧這樣的實時操做系統的程序來講,這些法子都不怎麼能工做。想要在串行端口上記錄下標準日誌,能夠嘗試使用SEGGER的實時終端。下面上正題,來談談如何將這種調試功能添加到現有的項目中。spa

一、將RTT文件添加到項目操作系統

在網上下載RTT文件調試

將RTT文件解壓複製到工程目錄下日誌

在C/C++選項卡包含路徑code

在項目的主要.c文件頂部包含 #include "SEGGER_RTT.h"blog

將RTT中的SEGGER_RTT.c文件加入工程教程

 

二、簡單應用

如今能夠經過RTT發送簡單的字符串了:

SEGGER_RTT_WriteString(0,"hello!\r\n");

第一個參數是將字符串寫入的通道(channel)。

不過咱們更常常使用的是另外一個函數:

SEGGER_RTT_printf(0,"hello:%d %s\r\n", a, s);

這個函數的功能更強大,使用就和printf同樣。它在SEGGER_RTT_printf.c文件中。可是它在中斷中使用過多經常會沒法正常打印,或者直接不打印。

編譯運行一下

 

三、打開實時終端 

如今,代碼能夠將數據輸出到RTT,咱們須要能看到它。方法有不少。最方便的一種是使用J-Link軟件包附帶的RTT查看器。(j-Link RTT Viewer)

打開J-Link RTT Viewer。以下。若是有多個設備鏈接,請檢查序列號(Serial no),而後輸入您想要鏈接的設備的序列號。

單擊「肯定」。顯示以下:

如今,下載你的程序到設備上,就能看到終端上顯示「Hello!」。

注意,若是你打開終端,並不會影響串口打印。你可使用ble_app_uart 工程來建造的項目,在這個項目中向RTT發送文本以進行調試。

請記住,SEGGER_RTT_WriteString()比printf快的多,所以您能夠安全地調用此函數,而不影響應用程序的實時性。

 

 四、更高級的打印 

來詳細講講以前提到的SEGGER_RTT_printf()函數。爲了可以使用它,稍微修改一下項目:

將文件SEGGER_RTT_printf.c加入到項目中

加入文件RTT_Syscalls_KEIL.c(文件在keil_v5\ARM\Pack\NordicSemiconductor\Syscalls)

去掉工程中的retarget文件(工程目錄的nRF_Libraries文件夾下,以下)

 

在選項卡的 target選項中取消勾線Use MicroLIB 

 

 而後就可使用了,以下:在主程序中:



編譯運行。
注意:如上例程,能夠經過在第三個參數寫入 RTT_CTRL_BG_BRIGHT_RED 來控制該輸出語句的顏色。以下 Terminals 0 所示:char c = 0; for (;;) { c = SEGGER_RTT_WaitKey(); // will block until data is available if(c == 'r'){ SEGGER_RTT_printf(0, "%sResetting in %d second..%s\n", RTT_CTRL_BG_BRIGHT_RED, 1, RTT_CTRL_RESET); nrf_delay_ms(1000); sd_nvic_SystemReset(); } //power_manage(); }

 

注意:咱們經常使用的rintf()函數實際上是定向輸出到RTT的。ble_app_uart 項目可以依然按照預期工做,由於它是使用 app_uart_put() 輸出到串行端口。

使用printf的例子:

SEEGGER_RGG_printf(0, "variable value: %d\r\n", variable);

第一個參數指定輸出的通道,第二個參數是要打印的字符串,variable變量的值插入%d.

相關文章
相關標籤/搜索