关于Keil5在线编译无法进入主函数的解决方法

关于Keil5在线调试无法进入主函数的解决办法

问题描述

拿到一个别人编写好的一组源码,进行简单的配置以后,编译和烧录都没有问题,偏偏在进行在线调试的时候,程序直接跑飞,左侧两个箭头都看不见,上方汇编程序显示代码卡在
0x08000188 4809 LDR R0[PC,#36]; @0x080001B0;
在startup_stm32f103xb.s中 LDR R0,=SystemInit 处打断点,程序依旧跑飞,也就是说不单单是主函数进不去,连启动文件都进不去。因为博主也是个小白,所以研究了好久,解决方法也百度了好久,最后都没有找到适合我这个问题的方法。
经过一番折腾终于找到了在网上尚未找到的方法。额,如果有那就是我眼神不好使了。现在直接说解决方法。

解决方法

在这里插入图片描述
将蓝色划线部分改成0x8000000,再重新编译一遍,问题解决

补充说明

我采用的芯片是STM32F103C8T6,看了官方给的Memory Map,Flash memory的起始地址为0x8000000,各位还要具体问题具体分析一下,还有,改完以后,一定要重新编译,我因为这个走了不少弯路。希望对刚入坑的各位有点帮助吧
stm32F103C8 memory map

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil5中,当你在调试你的程序时,你可能会遇到一个问题,即Call Stack窗口不显示主函数。通常情况下,主函数在程序执行时作为调用堆栈的顶级函数,但有时它可能不会正确地显示在Call Stack窗口中。 这个问题的原因可能是以下几种情况之一: 1. 编译器优化:在对程序编译时,编译器会行一些优化操作以提高代码的执行效率。其中之一是将主函数内的部分代码直接嵌入到启动代码中,这可能导致Call Stack窗口不显示主函数。 2. 链接器设置:另一个可能的原因是链接器的设置。你可能需要检查链接脚本文件(.ld文件)中的设置,查看是否有对主函数的偏移或导出行了特殊处理。这可能会导致主函数不正确地显示在Call Stack窗口中。 针对这个问题,你可以尝试以下解决方案: 1. 禁用编译器优化:你可以尝试在编译选项中禁用某些优化选项,以确保主函数不会被编译器优化。在Keil5中,你可以通过导航到“Options for Target”>“C/C++”>“Optimizations”来行设置。 2. 检查链接器设置:你可以仔细检查链接脚本文件以及Keil5中的链接器设置,确保主函数没有被特殊处理或偏移。 3. 手动调试:如果以上方法没有解决问题,你可以尝试手动行调试。在程序执行时,你可以通过逐步调试、查看寄存器值等方式来确定主函数的执行情况。 总之,当Keil5调试中Call Stack窗口不显示主函数时,很可能是编译器优化或链接器设置的问题。通过禁用优化、检查设置或手动调试等方法,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值