0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RA2L1移植SEGGER RTT日志打印功能

冬至子 来源:dreamcmi 作者:dreamcmi 2023-10-12 11:30 次阅读

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,正常来说应该和下图文件一样

1.jpg

接下来修改文件

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,软件会自动连接。

1.jpg

正常来说会在黑框中打印LOG

1.jpg

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

    浏览量

    15268
  • J-Link
    +关注

    关注

    0

    文章

    83

    浏览量

    22118
  • SEGGER
    +关注

    关注

    0

    文章

    38

    浏览量

    14102
  • RTThread
    +关注

    关注

    8

    文章

    132

    浏览量

    40811
  • swd接口
    +关注

    关注

    0

    文章

    11

    浏览量

    2820
收藏 人收藏

    评论

    相关推荐

    RA-Eco-RA2E1-48PIN-V1.0开发板试用】使用Jlink RTT完成printf打印功能

    很荣幸收到瑞萨的RA2E1超低功耗开发板,现在开始写第一篇相关的试用报告,看到别人已经用RA2E1的串口实现了printf打印功能,我就不重复了,下面我就使用Jlink自带的
    发表于 10-31 21:00

    移植一下SEGGERRTT日志打印功能

      0. 前言  因为RA2L1开发板板载了JLINK-OB,那么我们完全可以通过SWD调试口去打印日志,从而不去用物理串口,这样不仅省了硬件串口资源占用,而且可以很快速的打印log,
    发表于 03-06 10:38

    RT-Thread与Renesas RA2L1实现1.8寸TFT屏幕显示的步骤

    使用过,本次借着RTT和本次参与RT-Thread与Renesas RA2L1的学习大挑战更深入的去学习RTT和Renesas。  计划使用RA2L1实现
    发表于 04-03 16:45

    华大移植SEGGER_RTT 打印

    华大移植SEGGER_RTT 打印一、目的1.在单片机开发中,串口是我们最好的‘伙伴’,没有什么BUG是串口打印无法解决的。如果有就debu
    发表于 11-23 18:07 14次下载
    华大<b class='flag-5'>移植</b><b class='flag-5'>SEGGER_RTT</b> <b class='flag-5'>打印</b>

    RA2L1硬件用户手册(中英)

    RA2L1硬件用户手册(中英)
    发表于 11-07 19:49 6次下载
    <b class='flag-5'>RA2L1</b>硬件用户手册(中英)

    RA2L1开发板资料

    RA2L1开发板资料
    发表于 11-07 19:50 18次下载
    <b class='flag-5'>RA2L1</b>开发板资料

    基于RA2L1的串口及J-Link的烧写说明

    本节介绍使用串口工具对RA2L1进行程序的烧写。采用CPK-RA2L1开发板,硬件如下图所示。
    的头像 发表于 11-25 13:55 1694次阅读

    RA2L1 组用户手册:硬件

    RA2L1 组用户手册:硬件
    发表于 01-09 19:06 5次下载
    <b class='flag-5'>RA2L1</b> 组用户手册:硬件

    RA2L1 组数据表

    RA2L1 组数据表
    发表于 01-09 19:06 0次下载
    <b class='flag-5'>RA2L1</b> 组数据表

    RA2L1 组用户手册:硬件

    RA2L1 组用户手册:硬件
    发表于 06-30 18:50 1次下载
    <b class='flag-5'>RA2L1</b> 组用户手册:硬件

    RA2L1 组数据表

    RA2L1 组数据表
    发表于 06-30 18:50 0次下载
    <b class='flag-5'>RA2L1</b> 组数据表

    RA2L1 组 Capacitive Touch Evaluation System 用户手册

    RA2L1 组 Capacitive Touch Evaluation System 用户手册
    发表于 07-04 20:38 0次下载
    <b class='flag-5'>RA2L1</b> 组 Capacitive Touch Evaluation System 用户手册

    RA2L1上手优化BSP占用

    在上手RA2L1开发板的时候,使用RTT Studio给的BSP进行开发时发现默认占用太大了,所以今天就来说一下如何优化掉不是很必要的部分(当然芯片资源很大且不在乎的可以不做)。
    的头像 发表于 10-12 11:18 603次阅读
    <b class='flag-5'>RA2L1</b>上手优化BSP占用

    基于RA2L1实现串口DTC数据接收

    基于RA2L1实现串口DTC数据接收
    的头像 发表于 10-10 09:34 490次阅读
    基于<b class='flag-5'>RA2L1</b>实现串口DTC数据接收

    瑞萨RA2L1系列CAN通信应用

    瑞萨RA2L1系列CAN通信应用
    的头像 发表于 06-26 08:06 561次阅读
    瑞萨<b class='flag-5'>RA2L1</b>系列CAN通信应用