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文件夹下面
其中SEGGER_RTT中有四个文件,在瑞萨用RASC生成的工程,我们不需要手工添加路径(注,如果添加了,会报错)。如果是其他的如STM32的,需要手工添加进工程,并指定路径。
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:
如上图所示,按照图示设置,特别是2的MCU型号选择,一定要选对,要不然会出现错误。第5那里,输入范围更加方便,让他自己查找。
【实现结果】
这样就实现的RTT的调试输出了。
【总结】
如上述所说的,移植非常简单,就是需要有jlink来支持。盯比st-link,dap-link还是有非常大的性价比的。