1. 程式人生 > 實用技巧 >【STM32F429】第9章 RL-TCPnet除錯方法(Event Recorder和串列埠兩種)

【STM32F429】第9章 RL-TCPnet除錯方法(Event Recorder和串列埠兩種)

最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=95243

第9章 RL-TCPnet除錯方法(Event Recorder和串列埠兩種)

本章節為大家講解RL-TCPnet的除錯方法,RL-TCPnet的除錯功能可以通過串列埠列印和Event Recoder實時監控執行狀態。而且RL-TCPnet的除錯設定比較簡單,因為官方已經為我們做好了除錯版本的庫,直接新增到工程,並使能相應的巨集配置就可以使用了。

9.1 初學者重要提示

9.2 RL-TCPnet支援的除錯版本

9.3 RL-TCPnet除錯方法設定(串列埠列印)

9.4 RL-TCPnet除錯方法設定(Event Recorder)

9.5 實驗例程說明

9.6 總結

9.1 初學者重要提示

  1. 本章節講解的內容相對比較簡單,主要是配置Net_Debug.c檔案即可。由於Net_Debug.c檔案中可以使能的選項較多,實際測試中使能太多的話,會打印出非常多的資訊,完全看不過來,所以實際測試的時候最好需要除錯哪些功能,就開啟哪些選項。
  2. 本章節使用的例子是由前面移植章節配套的例子簡單修改而來。另外,對於本章節配套的例子,大家僅需要知道如何使能除錯功能即可,具體程式碼實現的功能會在後面章節逐漸講解。
  3. 如果不熟悉Event Recorder的使用,務必看下V6使用者手冊的第8章。http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

9.2 RL-TCPnet支援的除錯版本

KEIL官方提供的庫有如下幾個版本:

  • IPv4 Debug和IPv4/IPv6 Debug

這兩個版本用於Event Recoder的除錯。

  • IPv4 Debug STDIO和IPv4/IPv6 Debug STDIO

這兩個版本用於串列埠除錯。

  • IPv4 Release和IPv4/IPv6 Release

這兩個是正式釋出版本。

9.3 RL-TCPnet除錯方法設定(串列埠列印)

下面分步進行說明RL-TCPnet的串列埠除錯方法。

9.3.1 第1步,新增串列埠除錯版本的RL-TCPnet庫

選擇庫檔案IPv4/IPv6 Debug STDIO

9.3.2 第2步,設定使用User模式的IO輸出

設定後,使用者就可以設定串列埠輸出資料。

9.3.3 第3步,使用串列埠重定向函式stdout_putchar

RL-TCPnet的除錯功能就是通過呼叫函式printf實現列印功能,所以需要我們做一個串列埠重定向,也就是修改函式stdout_putchar(特別注意,如果程式裡面有fputc函式的重定向,請註釋掉)。只不過這裡稍有區別,對於換行符 \n 要特殊處理下,將其修改成回車符 \r 。否則打印出來的訊息會錯行,比較混亂。

int stdout_putchar (int ch)
{
#if 0  /* 將需要printf的字元通過串列埠中斷FIFO傳送出去,printf函式會立即返回 */
    comSendChar(COM1, ch);
    
    return ch;
#else    /* 採用阻塞方式傳送每個字元,等待資料傳送完畢 */
    /* 使用了RL-TCPnet網路協議棧,這裡特別調整下 */
    if (ch == '\n')  
    {
        /* 寫一個位元組到USART1 */
        USART1->TDR = '\r';

        /* 等待發送結束 */
        while((USART1->ISR & USART_ISR_TC) == 0){}
    }
    
    /* 寫一個位元組到USART1 */
    USART1->TDR = ch;
    
    /* 等待發送結束 */
    while((USART1->ISR & USART_ISR_TC) == 0){}
    
    return ch;
#endif    
}

9.3.4 第4步,除錯級別配置

(重要說明,RL-TCPnet的除錯是通過串列埠打印出來的)

RL-TCPnet的除錯功能是通過配置檔案Net_Debug.c實現。在MDK工程中開啟檔案Net_Debug.c,可以看到下圖所示的工程配置嚮導:

  • Print Time Stamp

勾選了此選項的話,列印訊息時,前面會附帶時間資訊。

  • 其它所有的選項

預設情況下,所有的除錯選項都是關閉的,每個選項有三個除錯級別可選擇,這裡我們以Memory Management為例,點選下拉列表,可以看到裡面有Off,Errors only和Full debug三個除錯級別可供選擇,每個除錯選項裡面都是這三個級別。

Off:表示關閉此選項的除錯功能。

Errors only:表示僅在此選項出錯時,將其錯誤打印出來。

Full debug:表示此選項的全功能除錯。

9.3.5 第5步,實際效果

下面開啟如下幾個選項的全功能除錯(Application Debug Definitions的所有選項都是關閉的,沒有開啟):

實際應用時,要除錯哪方面功能的時候,開啟哪些選項,否則打印出來的資訊非常多,顯示效果如下:

9.4 RL-TCPnet除錯方法設定(Event Recorder)

下面分步說明RL-TCPnet的Event Recorder除錯方法。關於JLINK,STLINK,CMSIS-DAP使用Event Recorder的注意事項在V6開發板使用者手冊的8章節有詳細說明:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

9.4.1 第1步,新增Event Recorder除錯版本的RL-TCPnet庫

選擇庫檔案IPv4/IPv6 Debug。

9.4.2 第2步,設定使用Event Recorder模式的IO輸出

使能bsp.h檔案裡面的巨集定義,0表示禁止Event Recorder,1表示使能。

這個巨集定義控制的是bsp.c檔案裡面的Event Recorder的初始化。

#if Enable_EventRecorder == 1  
    /* 初始化EventRecorder並開啟 */
    EventRecorderInitialize(EventRecordAll, 1U);
    EventRecorderStart();
#endif

設定完畢後,配置STDOUT使用Event Recorder。

9.4.3 第3步,除錯級別配置

(重要說明,RL-TCPnet的除錯是通過串列埠打印出來的)

RL-TCPnet的除錯功能是通過配置檔案Net_Debug.c實現。在MDK工程中開啟檔案Net_Debug.c,可以看到下圖所示的工程配置嚮導:

  • Print Time Stamp

勾選了此選項的話,列印訊息時,前面會附帶時間資訊。

  • 其它所有的選項

預設情況下,所有的除錯選項都是關閉的,每個選項有三個除錯級別可選擇,這裡我們以Memory Management為例,點選下拉列表,可以看到裡面有Off,Errors only和Full debug三個除錯級別可供選擇,每個除錯選項裡面都是這三個級別。

Off:表示關閉此選項的除錯功能。

Errors only:表示僅在此選項出錯時,將其錯誤打印出來。

Full debug:表示此選項的全功能除錯。

9.4.4 第4步,實際效果

開啟RL-TCPnet的除錯元件:

效果如下:

Event Recorder元件:

效果如下:

9.5 實驗例程說明

本章節僅僅是教會大家除錯方法,具體實驗內容還不做講解,僅需學會除錯功能的開啟方法即可。

本章節配套了如下幾個例子:

具體網路工程的測試看第7章的7.14小節或者第8章的8.14章節均可。

9.6 總結

本章節為大家講解這麼多,建議實際操作演練下,實踐出真知。