Jlink 软件断点和硬件断点

发布者:温柔之风最新更新时间:2024-08-01 来源: cnblogs关键字:Jlink  软件断点 手机看文章 扫描二维码
随时随地手机看文章

调试2440 RAM拷贝至SDRAM遇到的问题  


汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行,由于代码未正常跑起来,于是使用JLinkExe来调试。JLinkExe指定了一个命令文件: JLinkExe -commandfile ./cmd.jlink ,cmd.jlink文件内容如下:


1 r

2 loadbin /home/thomas/learn/armasm/addresses/main.bin 0x0

3 setbp 0x0 a s

4 setpc 0x0


运行至内存拷贝代码时发现了问题:


 1 copy_steppingstone2sdram:

 2     ldr r0,=0x30000000                 @sdram start addr

 3     ldr r1,=(0x30000000+4*1024)        @steppingstone length + sdram start addr

 4     mov r2,#0x0                            @steppingstone start addr

 5 copy_cycle:

 6     ldr r3,[r2],#4

 7     str r3,[r0],#4

 8     cmp r0,r1

 9     bne copy_cycle

10     mov pc,lr


代码反复分析,没发现问题,但是诡异的是:单步至第六行汇编指令时,按道理r3里面值应该是我的main.bin文件的前4个字节,输入:regs 查看各寄存器值,发现r3居然是0xDEEEDEEE,继续下一个字节的拷贝,这下r3的值又正常了。于是怀疑难道是flash这个点坏了?但是 flash不是有坏块标识机制吗?然后进一步确认下,使用命令:mem32 0x0 1,发现输出值又是对的,并不是0xDEEEDEEE。突然觉得0xDEEEDEEE这个值比较有特点,于是直接百度这个值,这下搜到了ARM官方文档,Using EmbeddedICE,这下才明白怎么回事了。主要是由于的cmd.jlink文件里面设置了一个软件断点。一般断点分为2种,1.软件断点 2.硬件断点。


1.硬件断点

硬件断点通过使用一个被称为EmbeddedICE的宏单元来监视写往地址线上的数据,如果地址匹配上则停止执行。这个宏单元是可以配置的,配置为breakpoint或者watchpoint,它会占据这个硬件单元,一般一个芯片上的EmbeddedICE宏单元数量不会太多,比如ARMv5的ARM9只有2个。也就是说至多设置2个硬件断点,如果要设置第三个,那么必须覆盖其中一个。


2.软件断点

软件断点也是通过使用EmbeddedICE宏单元来监测取指时指令是否符合一个特殊的bit-pattern,位模式,就是说取出的指令是否是个特定值,或者指令某几个位是否匹配上。这个bit-pattern会预先存储到下软件断点的位置,也就是说把在内存中哪个位置的值替换为这个bit-pattern,而原来这个位置的指令会被暂存到调试器的存储单元中。因此自修改代码,或者位于ROM中的代码是不能使用这种断点的。ROM中的很好理解,下软件断点必须往里面写bit-pattern,而ROM只读,显然不行了,自修改代码可能出现代码拷贝的动作,从源地址拷贝至目标地址,如果这个时候你在源地址某处下个软件断点,那么你拷贝到目的地址的这条指令变成了bit-paterrn了。


我遇到的问题正是由于在零地址下了个软件断点导致。软件断点个数是没限制的,所有的软件断点占据一个EmbeddedICE宏单元,也就是说对于只有2个宏单元的ARM9,你下过软件断点后就只能下一个硬件断点了。


 


关键字:Jlink  软件断点 引用地址:Jlink 软件断点和硬件断点

上一篇:arm汇编进入C函数分析,C函数压栈,出栈,传参,返回值
下一篇:使用jlink直接烧norflash或者nandflash不借助uboot的猜想

推荐阅读最新更新时间:2026-03-24 10:17

VSCode与JLink极简配置方案,STM32开发指南
动机 keil软件的功能强大,但代码编辑却又显得古板和不方便。vscode作为专业的轻量级代码编辑工具,汇集了大量插件辅助。因此试着考虑将stm32的开发往vscode上进行迁移。 前期调研和测试了多种插件方案,包括Keil Assistant, EIDE, stm32-for-vscode等。也尝试过自己搭建工具链,包括arm-none-eabi,make,openocd等。配合st-link和jlink可以完成编译,下载和调试。最后选择了对自己而言最轻量化的方案,具有极简的配置过程。 由于细致讲解内容太长,因此简化过程,将整体思路带过一下。 概览 所需工具 硬件调试器 jlink 代码编辑器 vscode stm3
[单片机]
VSCode与<font color='red'>JLink</font>极简配置方案,STM32开发指南
Windows环境下用Jlink调试ESP32
Windows环境下用Jlink调试ESP32 本文记录了我在 Windows 环境下用 Jlink 调试 ESP32 时遇到的问题,以及相应的解决办法,并在文章末尾处附加了解决问题时查找的资料。 调试之前首先需要将 Jlink 与 ESP32 相连,接口图如下: ESP32 pin JTAG probe pin 3.3V Pin 1(VTref) GPIO 9 (EN) Pin 3 (nTRST) GND Pin 4 (GND) GPIO 12 (TDI) Pin 5 (TDI) GPIO 14 (TMS) Pin 7 (TMS) GPIO 13 (TCK) Pin 9 (TCK) GPIO 15 (TDO)
[单片机]
Ubuntu下Jlink的配置
安装环境:Win7 + VirsualBox + Ubuntu 12.04(32bit)+ ok6410 一,下载Jlink for linux 1,网址:http://www.segger.com/jlink-software.html,下载对应的版本,我这里下载的是JLink_Linux_V480_i386.tgz 二,安装Jlink 1,解压JLink_Linux_V480_i386.tgz tar zxvf JLink_Linux_V480_i386.tgz 2,进入JLink_Linux_V480_i386目录,查看README.txt,这里最新版本的配置和老版本可能不同,直接按照README上介绍的来。
[单片机]
记录ok6410 jlink 命令行调试uboot
1启动ok6410 进入uboot命令行 2\启动JLinkGDBServer -device ARM11 3arm-none-eabi-gdb u-boot 初始化脚本 # Connect to the J-Link GDBServer target remote localhost:2331 # Set JTAG speed to 30 kHz monitor endian little monitor speed 30 # Reset the target monitor reset monitor sleep 10 # # CPU core initialization # # Set the processor to s
[单片机]
jlink烧写Nor Flash时出错正确解决方法汇总
成都国嵌的课程:国嵌体验入门班-2-1(开发板系统安装-Jlink方式).rar毒害了不少人,那种直接烧写nor flash,不进行任何配置的方法,能够成功纯属偶然,他自己在视频中烧写时也出现了两次错误,可却没有意识到他的操作有问题,误认为是jlink不稳定,先将此文贴出,将其错误方法纠正。 如果你用国嵌的方法直接烧写nor flash,会出现下面的错误: 如果你按照国嵌的说法认为这是jlink不稳定,多试几遍就好了,你就会发现这个错误像魔鬼一样跟着你,对你不离不弃,这个方案我验证了几十次,没有一次是成功的,于是我开始寻找错误的根源。后面问题得到解决,现将方案总结如下: 方案1. 如果你有mini2440或者是你板子对应
[单片机]
<font color='red'>jlink</font>烧写Nor Flash时出错正确解决方法汇总
STM32学习之路-MDK4.7(JLINk问题)+VIM
主机环境:win7 开发板:STM32F103VE 问题一:MDK4.7a对部分用户的JLINK(当然是山寨版的)存在问题.. 问题描述: 当setting的时候会出现问题,它会叫你升级你的JLINK,这对于我们用山寨版的JLINK用户来说是不可能的,一旦升级就玩完了 所以不能升级。不过有些用户就没有出现这样的问题,不知道是什么回事,连软件都会鄙视人,没法活了.. 解决方案: (1)购买正版的JLINK,然后升级(貌似是废话) (2)下载JLinkARM_V440(我以前的是V410版本的),将改安装目录下的JLinkARM.dll 文件 替换掉keil安装目录下的ARMSegger下的JLin
[单片机]
STM32学习之路-MDK4.7(<font color='red'>JLINk</font>问题)+VIM
* JLink Info: Could not measure total IR len. TDO is constant high.
keil编译Jlink烧写时提示* JLink Info: Could not measure total IR len. TDO is constant high.。无法烧写成功。。我的问题是是Jlink方式烧写时电压太低,检测不到。把Jlink烧写方式换成SW烧写。就OK了
[单片机]
* <font color='red'>JLink</font> Info: Could not measure total IR len. TDO is constant high.
使用JLINK下载uboot到MINI2440的NORFASH该如何配置?
注意:以下设置适用于使用JLINK下载空板(即芯片内无程序),并且是下载到NORFALSH。 1.Target Interface (如下图): 2.CPU设置: CPU设置包括3部分内容: 2.1选择CPU(S3C2440A为ARM920T核) 2.2设置RAM地址和大小(S3C2440片内自带RAM) 使用片内RAM辅助下载代码会下得很快,否则下载速度会非常慢。 2.3Init steps(此处是对CPU的内部寄存器进行设置,不初设置内部寄存器下载会失败) 如上图所示,文本档内有多条数据,是对CPU内部寄存器进行写操作,给寄存器设置初值。点击下方的“ADD”添加命令。一 共需要添加17
[单片机]
使用<font color='red'>JLINK</font>下载uboot到MINI2440的NORFASH该如何配置?
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved