如何通过Jlink查看GD32芯片跑飞后程序死在哪里?

发布者:MysticJourney最新更新时间:2024-11-06 来源: elecfans关键字:Jlink  GD32芯片  跑飞 手机看文章 扫描二维码
随时随地手机看文章

相信小伙伴们都会遇到这样的场景:芯片程序跑着跑着就异常了,这个时候又不能仿真,因为一旦仿真程序就会重新download,异常现象就消失了。现在就来教大家如何使用Jlink仿真器去查看GD32芯片跑飞后程序死在哪里。


首先,我们需要将目标板和Jlink进行连接,只需要接三根线:SWDIO(PA13)、SWCLK(PA14)和GND,切记,一定不能接NRST脚,否则连接的时候就可能把芯片复位了,当然,也一定要保证连接过程中芯片不要断电。


然后在Jlink驱动安装目录中找到Jlink.exe,双击打开:

wKgZomWzDyGAIbNHAACo7X793CI604.png?imageView2/2/w/1000


打开后是这个界面:

wKgZomWzDyaAUr9EAAAotmr2haM333.png?imageView2/2/w/1000


键盘输入:usb,点击回车:

wKgaomWzDyuAU3F1AAAz_zbt1_A023.png?imageView2/2/w/1000


提示连接到Jlink,然后输入:s,并回车

wKgZomWzDzCALjWNAABmpQei-AU947.png?imageView2/2/w/1000


这里会有一个默认芯片型号,如果和目标板上的型号不一致可以输入:?,并回车,如果一致则直接回车。

因为小编用的是GD32F303ZGT6,所以输入了“?”,将会弹出选择芯片的列表,找到目标芯片并双击:

wKgZomWzDzWAAz0-AAA1tJM4F1Q505.png?imageView2/2/w/1000


回到Jlink.exe界面:

wKgaomWzDzqAGGPOAABEASNVLrw268.png?imageView2/2/w/1000


因为我们是用SWD接口,所以输入:s,并回车:

wKgZomWzDz-AJ9HuAABDKkFHppM278.png?imageView2/2/w/1000


这里会让你选择Jlink的通信速度,默认是4000KHz,如果你的目标板和Jlink之间的线比较长的话,可以适当降低速度,比如需要1000KHz,则键盘输入:1000,并回车,将会出现下面这个界面:

wKgaomWzD0SASwhCAABRnLMvkFc601.png?imageView2/2/w/1000


我们看到红色框线内已经提示找到芯片ID了,这时候在输入:h,并回车,将看到以下界面:

wKgaomWzD0iARFpNAABbJQo4bJU613.png?imageView2/2/w/1000


红色方框内的PC值就代表了程序当前执行的位置,我们可以通过查看程序工程中的map文件,就可以找到程序正在运行哪个函数了,如小编这里的PC值是0x08000AAA,map文件中符合这个地址的是delay_1ms函数。

wKgaomWzD36ABdqrAABQBxd2Qgs781.png?imageView2/2/w/1000


是不是特别简单?

以后小编还会教大家如何通过Jlink.exe来进行芯片的调试,敬请期待哦。


关键字:Jlink  GD32芯片  跑飞 引用地址:如何通过Jlink查看GD32芯片跑飞后程序死在哪里?

上一篇:GD32 MCU进入低功耗模式导致无法再进行程序下载怎么办?
下一篇:【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(7)I2C 模块介绍

推荐阅读最新更新时间:2026-03-25 07:46

MSP430 数组填充越界引起的栈溢出 导致程序
一、预备知识 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 (这是一个前辈写的,非常详细) //main.cpp inta=0;全局初始化区 char*p1;全局未初始化区 main() { intb;栈 chars = abc ;栈 char*p2;栈 char*p3= 123456 ;123456在常量区,p3在栈上。 staticintc=0;全局(静态)初始化区 p1=(char*)malloc(1
[单片机]
msp430程序之解决方法
1.中断或主函数中有死循环,现象是程序停在某处。 2.堆栈溢出。现象是程序跑飞。 解决办法: A.看中断有没有用 _EINT(),引起中断嵌套. B.Project--Options--General Options---Stack/Heap 将Stack size设置大一些。 3.中断耗时太长,刚出中断又进去了.这时的现象是程序一直在中断中执行,回不到主函数。 4.检查CPU的电源是不是稳定,msp430在要保证程序正常运行,需保证Vcc大于1.8V。当电压低至0.8V时,程序仍有可能执行。这时的现象是PC指针乱飞,有复位,死机,停在中断,时钟频率发生变化等现象。 5.程序编译没问题,下载程序后上电不断复位
[单片机]
天上的地上的机器人都有了,但水里游的你见过吗?
在机器人和昆虫的结合上,科学家和工程师们从来都没让我们失望过。 2015年,德国费斯托公司(Festo)展示出一只仿生机械蝴蝶,除了外观神似真正的蝴蝶,它真正神奇的地方在于能扇动翅膀翩翩起舞,凭借机身中搭载的微型电池和电机,能完成蝴蝶轻盈的飞行动作。 但蝴蝶并不是科学家们唯一感兴趣的仿生主题,自然界有很多昆虫存在神奇的特质,蚂蚁、蜘蛛、蜜蜂甚至蟑螂,都被科学家视作机器人的研究方向。哈佛大学甚至有一个专门的项目HAMR(Harvard Ambulatory MicroRobot)做出过一只蟑螂仿生机器人,能够探索地面并且运动。 不过最近,这只蟑螂机器人拥有了一项新的技能,它从地面运动变成了水陆两栖,学会了“水上漂”的技能,这种新的技
[机器人]
AI创业者说:概念还在天上 想赚钱产品要在地上
人工智能从概念到爆发应用,只用了短短几年的时间,在资本的加持下,诞生了大批量的AI初创企业,据亿欧智库AI创投数据库统计,“从2014年人工智能开始成为资本关注的方向,至今有超过500家投资机构,累计投入600多亿真金白银。”(烧了600多亿,人工智能的“商业大门”已为谁开?丨亿欧智库),在这巨大的资本投入背后,AI的商业落地之路仍面临研发、落地场景、人才等多方困境和挑战。 6月14日,“2018全球智能+新商业——AI国际峰会”聚合了来自人工智能各细分领域的7位创业代表,分享他们在热潮背后的冷静思考,探讨AI落地的下一个发力点在哪。 作为预热,亿欧邀请了7位创业者就“AI企业现阶段面临的困境及未来的应对”分享了观点和看法,供业
[机器人]
单片机程序死机查错指南
1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象; 2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。 3. 地址溢出,常见错误为指针操作错误。我要着重说的是数组下标使用循环函数中循环变量,如果循环变量没控制好则会出现数组下标越界,意外修改系统的寄存器造成死机,这种情况下如果死机说明运气好,否则后面不知道发生什么头疼的事。 4. 无条件的死循环;比如使用whi
[单片机]
STM32+ucosll程序问题解决办法
STM32单片机移植ucosll程序,运行几个小时之后跑飞。 ucsll创建4个任务,OSQPend()消息队列任务,1s定时任务,2s定时任务,按键扫描任务。其中OSQPend()消息队列任务优先级最高,用于接收各中断消息,由于消息队列在没有消息时会将任务挂起,所有没有添加延时函数。 一开始怀疑堆栈溢出,将单片机栈区扩大,各任务堆栈也扩大,仍然无效。 多次测试发现,程序跑飞后OSQPend()消息队列任务仍然能够接受中断消息,怀疑优先级有问题,将消息队列任务的优先级调至最低,再未遇到程序跑飞情况。 只是仍然不解为何会停留在消息队列任务中!!
[单片机]
STM32 jtag调试程序时程序
开发环境:keil MDK V5.10 操作系统:windows 7(32位) 目标硬件:STM32F103C8 问题描述:在使用jtag对某软件进行调试的时候,KEIL可以正常的进行软件下载,一旦使用F5全速运行时,立即发现程序跑飞了,暂停后汇编代码显示“MOVS R0 R0”。程序跑飞的时候可以看到目标设备程序执行过程正常(灯正常闪烁,串口调试信息正常输出)。 问题原因:芯片的JTAG引脚被复用,在程序初始化阶段将JTAG引脚remap为了普通的IO引脚导致。 PS:在使用JTAG进行程序调试的时候,如果程序中开了看门狗,调试程序进行了单步调试的情况也可能导致JTAG无法正常使用,因为目标设备的看门狗不能因为单步执行
[单片机]
程序原因分析
通常我们程序跑飞的原因有以下几个方面: 1 memset/ memcpy使用错误 错误代码 aucCpyLength=NAME_DATA_LENGTH- ((wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo+1)*TAG_PAGE_LENGTH); memset(pucCpyDestAdress + TAG_PAGE_LENGTH,0x00,aucCpyLength) 其中:NAME_DATA_LENGTH 为64 TAG_PAGE_LENGTH 为10 错误原因 由于变量 wucCdTextCmdBufferPara.stTagCmdPara.ucPageNo 为6 ,导致auc
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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