【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 初學者重要提示
- 本章節講解的內容相對比較簡單,主要是配置Net_Debug.c檔案即可。由於Net_Debug.c檔案中可以使能的選項較多,實際測試中使能太多的話,會打印出非常多的資訊,完全看不過來,所以實際測試的時候最好需要除錯哪些功能,就開啟哪些選項。
- 本章節使用的例子是由前面移植章節配套的例子簡單修改而來。另外,對於本章節配套的例子,大家僅需要知道如何使能除錯功能即可,具體程式碼實現的功能會在後面章節逐漸講解。
- 如果不熟悉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 總結
本章節為大家講解這麼多,建議實際操作演練下,實踐出真知。