Jlink 软件断点和硬件断点

发布时间:2024-08-01  

调试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,你下过软件断点后就只能下一个硬件断点了。


 


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    有好的方法?有的,就是软件断点!你可以在需要停止CPU运行的代码中加入这条语句: __breakpoint(0);  //后面的立即数不怎么重要 这样,当你的程序断言失败了之后,如果运行到这条语句,在线调试......
    电子等领域。 STM32单片机的调试方式: 1.使用JTAG调试器:JTAG调试器是一种常用的调试工具,可以用于单步执行、断点调试等操作。在STM32单片机中,可以使用ST-Link......
    选项 4. 在 Debug 时,用上述配置好的调试配置,即可同样实现不复位的调试 06 总结 利用上述不复位 MCU 继续调试的方法,能够保全现场的运行状态,重新接上即可对程序进行断点调试......
    ,我们可以进行断点调试、单步执行、监视变量等操作,完成调试后,可以进行程序烧录、擦除操作,以及读取和写入单片机的FLASH和RAM等操作。 以上是ST-Link驱动安装教程及设置流程的详细步骤。通过......
    和开发板连接好,并上电后,log信息里面会出现JLINK连接处理器的信息,如下图所示: 3、调试 添加JLINK并配置完成后,即可开始调试。 开始调试后,一旦我们单步或者设置断点调试,我们......
    在FL2440上使用kei MDK 调试程序(J-link);新建一个工程     单击Project ->New µVision Project...菜单项 选择CPU 这里......
    人员需要注意各种设置项的正确性和选择,小心谨慎的通过嵌入式调试软件进行断点调试程序输出、查看变量等操作。 综上所述,GD32单片机和STM32单片机的概念、工作原理及内部结构相似,并且在调试......
    添加到窗口中,观察程序运行中变量的变化,方便调试程序) 这三个图标对应的的窗口已经在图中表示出来了,watch窗口可以观察放入的变量,在程序运行停止后会刷新,运行中不会刷新,memory是通过输入地址,观察......
    ) 编辑器:用于编写源代码,支持代码高亮和自动完成等功能。 (2) 汇编器:用于将源代码转换为机器指令,生成目标文件或可执行文件。 (3) 调试器:用于调试和验证程序运行效果,支持单步调试断点调试......
    同步,类似于仿真程序的时候的“全速运行”,然而通过添加断点,便可查看程序具体的运行状态,内存等等信息,让bug闻风丧胆。很多朋友可能也只是想想,毕竟大家都比较专注程序中的应用逻辑,而忽略了调试......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>