Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
瑞萨-RTT活动
RA2L1移植SEGGER RTT日志打印
发布于 2023-02-24 18:34:20 浏览:863
订阅该版
[tocm] # 0. 前言 因为RA2L1开发板板载了JLINK-OB,那么我们完全可以通过SWD调试口去打印日志,从而不去用物理串口,这样不仅省了硬件串口资源占用,而且可以很快速的打印log,对系统整体运行效率也得到了一定程度的提高。接下来就来移植一下SEGGER的RTT日志打印功能。 # 1. 准备 一个由RTT Studio新建好的BSP工程 SEGGER RTT源码(在jlink上位机按照目录里,例如`C:\Program Files\SEGGER\JLink\Samples\RTT`) # 2. 移植 首先把四个基础文件加到工程目录(推荐单独建一个文件夹放源码实现模块化,这里仅做演示没有新建) `SEGGER_RTT.c` `SEGGER_RTT.h` `SEGGER_RTT_printf.c` `SEGGER_RTT_Conf.h` 然后新建一个注册文件,这里命名为`segger_rtt_register.c` 刷新ide,正常来说应该和下图文件一样 ![Snipaste_2023-02-24_18-18-34.png](https://oss-club.rt-thread.org/uploads/20230224/344fd5d24da3916611a9780632751e11.png) ------ 接下来修改文件 `segger_rtt_register.c`加入以下代码 ```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` (此文件可以暂时不修改) 主要看以下两个地方 ```c #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();`(原因后面说) ```c 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改成空即可 ```c #define RT_CONSOLE_DEVICE_NAME "" ``` `hal_entry.c` 这里只是编写演示代码!! ```c void hal_entry(void) { while (1) { rt_kprintf("hal_entry 1\n"); rt_thread_mdelay(1000); rt_kprintf("hal_entry 2\n"); rt_thread_mdelay(1000); } } ``` ------ 修改完成后直接编译下载,同时打开`J-LINK RTT Viewer`,通过下图配置好直接点击ok,软件会自动连接。 ![Snipaste_2023-02-24_18-25-34.png](https://oss-club.rt-thread.org/uploads/20230224/ce5026f17e21dc002731810f2899bd1f.png) 正常来说会在黑框中打印LOG ![Snipaste_2023-02-24_18-33-28.png](https://oss-club.rt-thread.org/uploads/20230224/4b2c6d8d877376d92f01dd1ff0b10362.png.webp) # 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,快去试试吧。
4
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
dreamcmi
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
7
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部