接下来修改文件
segger_rtt_register.c加入以下代码
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Iden
tifier: 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,快去试试吧。
原作者:dreamcmi