【前言】我使用的RA6M4开发板只接了jlink-ob没有接串口,因此打印日志可以通过SEGGER_RTT来实现,本篇将介绍如何移植SEGGER_RTT,并通过rtt-view来验证。
【代码移植】
复制一份在其他开发板的SEGGER_RTT文件夹到工程src中:

同时还需要移植common_utils.h到工程中,其内容为:
/***********************************************************************************************************************
* File Name : common_utils.h
* Description : Contains macros, data structures and functions used common to the EP
***********************************************************************************************************************/
/***********************************************************************************************************************
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
***********************************************************************************************************************/
#ifndef COMMON_UTILS_H_
#define COMMON_UTILS_H_
/* generic headers */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "hal_data.h"
/* SEGGER RTT and error related headers */
#include "SEGGER_RTT/SEGGER_RTT.h"
#define BIT_SHIFT_8 (8u)
#define SIZE_64 (64u)
#define LVL_ERR (1u) /* error conditions */
#define RESET_VALUE (0x00)
#define EP_VERSION ("1.0")
#define MODULE_NAME "FreeRTOS Message Queue & Semaphore"
#define BANNER_INFO "\r\n********************************************************************************"\
"\r\n* Renesas FSP Example Project for "MODULE_NAME" Module *"\
"\r\n* Example Project Version %s *"\
"\r\n* Flex Software Pack Version %d.%d.%d *"\
"\r\n********************************************************************************"\
"\r\nRefer to readme.txt file for more details on Example Project and" \
"\r\nFSP User's Manual for more information about "MODULE_NAME" driver\r\n"
#define SEGGER_INDEX (0)
#define APP_PRINT(fn_, ...) (SEGGER_RTT_printf (SEGGER_INDEX,(fn_), ##__VA_ARGS__))
#define APP_ERR_PRINT(fn_, ...) ({\
if(LVL_ERR)\
SEGGER_RTT_printf (SEGGER_INDEX, "[ERR] In Function: %s(), %s",__FUNCTION__,(fn_),##__VA_ARGS__);\
})
#define APP_ERR_TRAP(err) ({\
if((err)) {\
SEGGER_RTT_printf(SEGGER_INDEX, "\r\nReturned Error Code: 0x%x \r\n", (err));\
__asm("BKPT #0\n");} /* trap upon the error */\
})
#define APP_READ(read_data) (SEGGER_RTT_Read (SEGGER_INDEX, (read_data), sizeof(read_data)))
#define APP_CHECK_DATA (SEGGER_RTT_HasKey())
#endif /* COMMON_UTILS_H_ */
代码移植后好,在hal_entry中添加初始化与测试函数:
voidhal_entry(void)
{
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
SEGGER_RTT_Init();
APP_PRINT(BANNER_INFO);
while(1)
{
R_BSP_PinAccessEnable();
APP_PRINT ("\r\n EEPW SEGGER JLINK TEST\r\n");
R_BSP_SoftwareDelay(500,BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_06,BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(500,BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl,BSP_IO_PORT_01_PIN_06,BSP_IO_LEVEL_LOW);
}
}
编译后下载到开发板中。
【RTT_view的配置】
打开RTT-View后,配置如下:

其中Address的地址获取优为重要,需要打开map后找到 .bss._SEGGER_RTT所在的地址,我这个工程如下图所示:

连接上后,就可以看到打印的信息了:

【总结】
使用RTT-View打印日志可以减少接口数量,移植的代码也比较少,调试比较方便。
|