0.前言
因為RA2L1開發板板載了JLINK-OB,那么我們完全可以通過SWD調試口去打印日志,從而不去用物理串口,這樣不僅省了硬件串口資源占用,而且可以很快速的打印log,對系統整體運行效率也得到了一定程度的提高。接下來就來移植一下SEGGER的RTT日志打印功能。
1.準備
一個由RTT Studio新建好的BSP工程
SEGGER RTT源碼(在jlink上位機按照目錄里,例如C:Program FilesSEGGERJLinkSamplesRTT)
2.移植
首先把四個基礎文件加到工程目錄(推薦單獨建一個文件夾放源碼實現模塊化,這里僅做演示沒有新建)
SEGGER_RTT.c SEGGER_RTT.h SEGGER_RTT_printf.c SEGGER_RTT_Conf.h
然后新建一個注冊文件,這里命名為segger_rtt_register.c
刷新ide,正常來說應該和下圖文件一樣
接下來修改文件
segger_rtt_register.c加入以下代碼
/*
- Copyright (c) 2006-2021, RT-Thread Development Team
- SPDX-License-Identifier: Apache-2.0
- Change Logs:
- Date Author Notes
- 2023-02-24 dreamcmi the first version
*/
#include "SEGGER_RTT.h"
#include "rtthread.h"
void rt_hw_console_output(const char *str)
{
SEGGER_RTT_Write(0, str, rt_strlen(str));
}
SEGGER_RTT.h
將開頭的include改為#include "SEGGER_RTT_Conf.h"
SEGGER_RTT_Conf.h
(此文件可以暫時不修改)
主要看以下兩個地方
#ifndef BUFFER_SIZE_UP
#define BUFFER_SIZE_UP (512) // Size of the buffer for terminal output of target, up to host (Default: 1k)
#endif
#ifndef BUFFER_SIZE_DOWN
#define BUFFER_SIZE_DOWN (16) // Size of the buffer for terminal input to target from host (Usually keyboard input) (Default: 16)
#endif
這里的大小根據log頻率和長度進行修改,默認是1024和16
drv_common.c
這個文件開頭加入#include "SEGGER_RTT.h"
在最下面rt_hw_board_init函數增加rtt初始化函數,并注釋掉rt_hw_usart_init();(原因后面說)
RT_WEAK void rt_hw_board_init()
{
rt_hw_systick_init();
SEGGER_RTT_Init();
/* Heap initialization */
#if defined(RT_USING_HEAP)
rt_system_heap_init((void *)HEAP_BEGIN, (void )HEAP_END);
#endif
/ Pin driver initialization is open by default /
#ifdef RT_USING_PIN
rt_hw_pin_init();
#endif
/ USART driver initialization is open by default /
#ifdef RT_USING_SERIAL
// rt_hw_usart_init();
#endif
/ Set the shell console output device /
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
/ Board underlying hardware initialization */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
}
rtconfig.h
這里面只需要改一個地方, 將原來的uart9改成空即可
#define RT_CONSOLE_DEVICE_NAME ""
hal_entry.c
這里只是編寫演示代碼!!
void hal_entry(void)
{
while (1)
{
rt_kprintf("hal_entry 1n");
rt_thread_mdelay(1000);
rt_kprintf("hal_entry 2n");
rt_thread_mdelay(1000);
}
}
修改完成后直接編譯下載,同時打開J-LINK RTT Viewer,通過下圖配置好直接點擊ok,軟件會自動連接。
正常來說會在黑框中打印LOG
3.答疑
上面的文件修改可能有一些人會問為什么不去注冊一個rt_device,因為那樣屬實麻煩了(其實是懶)。
我們在修改rtconfig.h里的RT_CONSOLE_DEVICE_NAME為空字符串時,已經把打印的函數對接到了void rt_hw_console_output(const char *str), 所以我們只需要對接這一個函數就可以完成printf重定向,至于為什么改一個空字串就可以不用device,看一下rt_kprintf的實現原理大概你就懂了,就是把_console_device的值識別成了NULL。
4.總結
使用segger rtt打印速度快還不占用io,快去試試吧。
-
UART接口
+關注
關注
0文章
124瀏覽量
15294 -
J-Link
+關注
關注
0文章
84瀏覽量
22144 -
SEGGER
+關注
關注
0文章
39瀏覽量
14127 -
RTThread
+關注
關注
8文章
132瀏覽量
40875 -
swd接口
+關注
關注
0文章
11瀏覽量
2841
發布評論請先 登錄
相關推薦
【RA-Eco-RA2E1-48PIN-V1.0開發板試用】使用Jlink RTT完成printf打印功能
移植一下SEGGER的RTT日志打印功能
RT-Thread與Renesas RA2L1實現1.8寸TFT屏幕顯示的步驟
華大移植SEGGER_RTT 打印
![華大<b class='flag-5'>移植</b><b class='flag-5'>SEGGER_RTT</b> <b class='flag-5'>打印</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RA2L1 組 Capacitive Touch Evaluation System 用戶手冊
![<b class='flag-5'>RA2L1</b> 組 Capacitive Touch Evaluation System 用戶手冊](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RA2L1上手優化BSP占用
![<b class='flag-5'>RA2L1</b>上手優化BSP占用](https://file1.elecfans.com/web2/M00/A9/96/wKgZomUnZRaAW7YcAAGJBbCEmTo046.jpg)
評論