首页 > 其他分享 >gd32f4xx在IAR环境下创建工程后无法正常运行问题排查

gd32f4xx在IAR环境下创建工程后无法正常运行问题排查

时间:2023-12-21 10:36:59浏览次数:36  
标签:中断向量 于是 代码 gd32f4xx 排查 地址 断点 IAR

        在创建移植工程时,我发现我需要创建一个基础环境,于是就顺手搭建了一个小的工程,简单到只有一个功能,就是运行systick,然后维护一个变量自加。结果发现,这个程序居然怎么都无法正常运行。

       中断中的断点无法触发,变量不发生变化,我整个人都无语了,在网上查了很多资料,排除了debug的问题,boot引脚的问题,然后我做了一个尝试,将之前测试通过的源码拿回来,重新编译调试,这个时候出现了另一个奇怪的现象,中断中的断点依然无法触发,但是中断维护的变量居然开始正常自加了。

       我开始怀疑是跟工程配置有关,于是将自己的源码完全拷贝到这个新的工程下,然后注释掉原有的代码,发现也无法工作。

       这个时候我开始去检查中断向量表,发现地址0x08000000开始的地址上确实有一些地址,而且我在这些地址上打下的断点也确实会被触发,说明整个中断向量表的机制是正常的,但是很奇怪的是这些中断向量表中的地址都不是我创建的函数的地址。于是我怀疑是否是IAR编译器的问题,是否它在识别weak标识的时候出现了问题呢?于是我又试着卸载了IAR软件并重装,然而问题依旧。

       这个时候我已经无奈了,于是我打算对中断向量表的地址创建过程进行详细的了解,在《cotex_m3 m4权威指南》里,看到了这么一段话:
     

    于是我打开了IAR的option-linker选项,发现里面有一份.icf的文件,打开这个文件所在的文件夹以后,发现这个文件路径下,还存在另一个GD32F405的文件,我对比了两个文件的区别,发现他们的中断向量表的地址和ROM区域的起始地址是不同的,我瞬间意识到我可能知道问题的根因了。

       于是我试着加载了一下另一个icf文件,程序立即运行正常了,断点也正常触发了,重要的是我在flash地址区域上明显看到一个标志:vector-table,而之前我从来没有看到过。

       在错误的配置文件中,我的中断向量表和flash的起始地址都修改成了0x0802000,而这个地址的修改需要与vtor中的偏移匹配起来的,但是我却没有在程序中去做这个偏移,于是就导致了,程序依然是从0x08000000的位置去获取中断向量表。

       同时由于我从别人那里拷贝过来的代码里包含了之前的flash地址空间的二进制代码,IAR在编译的时候,没有去修改这部分的代码。在这份代码中,运行的是对中断调用函数的汇编代码,其中变量是通过PC偏移来实现的,而当代码的修改不涉及到变量地址的变化时,那段代码的汇编指令运行过程中会产生将内存地址修改的效果。于是就会产生,断点打不进去,但是却可以看到变量生效的现象。

 

标签:中断向量,于是,代码,gd32f4xx,排查,地址,断点,IAR
From: https://www.cnblogs.com/digtalrevolution/p/17918405.html

相关文章

  • 微服务调用链的排查,请求日志排查超时时间,锁定超时的原因
    微服务调用链的排查,请求日志排查超时时间,锁定超时的原因A微服务>>B微服务>>C微服务论日志的请求开始时间和结束时间的重要性。完整的日志格式:另外接口的入参,出参也需要加上,日志需要根据参数的关键字来搜索,比如会员号,ID等唯一标识。A服务 logger.info("调用B服务httpParam......
  • spring eureka服务注册配置,排查服务注册上来了,但是请求没有过来。检查是否服务注册配
    springeureka服务注册配置,排查服务注册上来了,但是请求没有过来。检查是否服务注册配置错误解决方法:去掉该配置eureka.instance.hostname=client微服务的提供IP地址//微服务的提供IP地址,点开服务注册的http://xxx:1246,找到服务,点开的是client微服务:微服务端口号,检......
  • 深度探索Android ANR:监控、排查、优化全攻略
    背景问题1.什么是ANR?ANR是Android系统中的一种错误状态,全称为ApplicationNotResponding,中文翻译为“应用无响应”。当Android系统检测到应用程序在一段时间内未能响应用户输入或无法执行主要的UI线程操作时,就会触发ANR错误。ANR是一种系统保护机制,旨在确保应用的响应性,防止用户......
  • 【虹科分享】使用Allegro网络万用表进行网络故障排查
    文章速览:Allegro网络万用表在公用事业公司的应用领域Allegro网络万用表VS.WiresharkAllegro200和Allegro500:作为标准配置 传统企业成为互联网服务提供商,如何利用数字工具实现现代化转型?本期文章,我们分享一家国外的公共事业公司的现代化转型故事。StadtwerkeUnnaGmb......
  • 国标GB28181安防监控LiteCVR视频平台无法接入Ehome5.0的原因排查
    随着人工智能技术的迅速发展,未来的安防视频技术将更加智能化。通过深度学习和图像识别算法,安防摄像头可以自动识别异常行为、人脸识别、车辆识别等,从而提供更智能、自动化的安全监控。用户在现场使用LiteCVR平台接入ehome5.0,显示无法接入。针对这个情况我们来好好分析一下。......
  • GB28181视频平台LiteCVR接入音频无声的原因排查
    视频监控系统逐渐向着互联互通和可视化的方向发展。随着互联网技术的发展,视频监控系统可以联网进行数据传输,实现不同监控设备之间的互联互通。同时,可视化技术的应用也使得视频监控数据可以以更加直观的方式呈现,使得人们更加容易理解和应用。GB28181视频平台LiteCVR拓展性强,视频能力......
  • 国标GB28181安防视频平台LiteCVR接入国标设备时,注册不上线的原因排查
    随着社会经济的快速发展和科技的持续进步,安防监控行业在近年来取得了显著的进步。从城市安全到家庭监控,从工厂管理系统到交通管理,安防监控系统已经深入到各个领域,为人们的生活和工作提供了强大的安全保障。有用户在使用视频监控安防平台LiteCVR时,出现了国标GB28181设备注册不上线的......
  • RTSP流媒体视频平台LiteNVR播放HLS流,出现中断且无法自动恢复的原因排查
    有用户反映,在使用安防视频LiteNVR平台时,取平台分发的hls地址在移动端播放一段时间就会停止,且无法自动恢复播放。今天我们来介绍下该问题的排查与解决方法。LiteNVR是基于RTSP/Onvif协议推出的安防视频监控管理平台,它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发......
  • 使用jvm工具排查系统问题
    java-jvm-toolJstatd远程连接(推荐)不用重启项目远程机配置[demo@localhost jvmtest]$ vi jstatd.all.policy# 内容grant codebase "file:/home/demo/jdk1.8.0_171/lib/tools.jar" {permission java.security.AllPermission;};#IP为远程机外网IP(必须配置ip地址)[demo@l......
  • 避坑合集|芝麻免押失败排查思路超详细总结(小程序场景)
    在使用小程序对接芝麻免押时,遇到了一些报错,估计把这个接口的坑都踩了个遍,这篇汇总一下我在芝麻免押上遇到的免押失败问题合集,大家注意避坑~对接流程......