这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 【EK-RA6M5开发板】实现JLINKRTTView

共2条 1/1 1 跳转至

【EK-RA6M5开发板】实现JLINKRTTView

助工
2024-10-29 16:43:23     打赏

SEGGER J - Link View是一款与SEGGER J - Link调试器相关的工具,以下是关于它的一些详细介绍:

程序执行跟踪    SEGGER J - Link View支持跟踪程序的执行流程。通过与目标设备的连接,可以查看程序在不同函数之间的跳转、循环执行的次数等信息。     能够帮助开发者确定程序是否按照预期的流程执行,特别是在处理复杂的状态机、多任务系统或中断处理程序时,对于分析程序逻辑错误非常有帮助。

系统状态监测     可以用于监测目标设备的一些系统状态信息,如CPU寄存器的值。这些寄存器包含了有关程序运行状态的关键信息,如程序计数器(PC)指示当前执行指令的地址,状态寄存器反映了当前的处理器状态(如溢出标志、进位标志等)。     对分析程序运行时的异常情况(如程序跑飞、进入死循环等)很有帮助,开发者可以通过查看寄存器的值来推断可能的原因。

2. 应用场景嵌入式软件开发调试    -在开发基于ARM Cortex - M等内核的微控制器应用程序时,J - Link View配合J - Link调试器,可以为开发者提供直观的调试界面。例如,在开发智能家居设备中的温度传感器数据采集程序,通过J - Link View实时查看传感器数据存储的内存区域,以及采集程序中循环执行的次数和时间间隔等信息,从而优化程序的性能。     对于调试操作系统移植项目也非常有用。例如在将FreeRTOS移植到新的微控制器平台时,通过观察任务切换时的内存数据和寄存器状态,确保任务切换机制的正常运行。

硬件和软件联合调试    当遇到硬件和软件交互问题时,如外设(如SPI、I2C、USB等接口设备)无法正常工作,J - Link View可以协助排查问题。开发者可以查看与外设通信相关的寄存器和内存区域,确定是软件配置错误还是硬件故障导致的问题。    在开发具有复杂通信协议的设备(如CAN总线通信设备)时,通过查看通信缓冲区的内存数据和协议相关寄存器,有助于分析通信错误的原因。 3. 与其他工具的比较与传统调试器的比较    传统的调试器可能仅提供基本的断点调试和单步执行功能。而J - Link View在此基础上增加了强大的实时数据查看和系统状态监测能力。例如,在一些简单的调试器中,只能在程序暂停时查看局部变量的值,而J - Link View可以在程序运行过程中实时观察多个变量和内存区域的变化。     对于复杂的嵌入式系统,传统调试器可能无法提供全面的系统视图,而J - Link View能够从多个角度(内存、寄存器、程序流程)来展示系统的运行情况,帮助开发者更快地定位问题。与示波器和逻辑分析仪的比较    示波器和逻辑分析仪主要用于硬件信号的监测,如电压波形、脉冲宽度、信号频率等。而J - Link View侧重于软件层面的数据和执行流程。虽然它们都可以用于调试,但作用的层面不同。    在硬件开发初期,示波器和逻辑分析仪可用于验证硬件电路的基本功能。但在软件开始运行后,J - Link View对于分析软件与硬件的交互问题、程序逻辑问题等更为有效,并且可以深入到软件的内部数据结构和执行机制中。

4. 使用流程

瑞萨的全系列开发板如FPB、EK等都板载了JlinkOB,这也是瑞萨评估版非常贵的原因,本篇使用EK-RA6M5开发来示例如何使用。

1、创建好工程后,我们在官方的示例程序复制一份SEGGER_RTT以及一个common_utils.h到工程的src文件夹下面

image.png

image.png

其中SEGGER_RTT中有四个文件,在瑞萨用RASC生成的工程,我们不需要手工添加路径(注,如果添加了,会报错)。如果是其他的如STM32的,需要手工添加进工程,并指定路径。

image.png

2、在工程中的使用,我们只需要添加common_utils.h的引用就行了,在此文件中,重新封装的pritnf,其代码如下:

/***********************************************************************************************************************
 * 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_ */


当然我们也可以定做我们自己的独特打印方式。

【测试】

在主程序中的while循环中添加一个条测试命令:

 APP_PRINT ("\r\n EEPW SEGGER JLINK TEST\r\n");
        /* Update all board LEDs */

编译下载到开发板,打开jlink RTT View:

image.png

如上图所示,按照图示设置,特别是2的MCU型号选择,一定要选对,要不然会出现错误。第5那里,输入范围更加方便,让他自己查找。

【实现结果】

image.png

这样就实现的RTT的调试输出了。

【总结】

如上述所说的,移植非常简单,就是需要有jlink来支持。盯比st-link,dap-link还是有非常大的性价比的。






关键词: 瑞萨     单片机     连载    

助工
2024-11-14 20:12:35     打赏
2楼

进来学习的。谢谢分享。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]