尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

一则Keil运行时跳转到HardFault_Handler错误处理中断的问题与解决

一则Keil运行时跳转到HardFault_Handler错误处理中断的问题与解决
📅 发布时间:2026/7/3 10:41:38

这两天在调试Keil时,发现前两天跑得好好的代码突然不能运行的。一运行就会跑到HardFault_Handler错误处理中断中去。

程序代码比较简单,就是向Uart口发送一串数据。按道理来说,即使这些数据是乱码,也不应该跳转到错误处理呀。

在HardFault_Handler中加入断点,运行到此,打开CallStack+Local监测窗口,在HardFault_Handler项上点击右键,选择“Show Caller code”。发现在Disassembly界面最终的跳转的不是正常的函数,而是“0x3030302C 0000 MOVS r0,r0"这段代码。这就有点奇怪了,按说正常的函数调用入栈出栈不会出现这种无函数的入口错误的。难道是分配的堆栈长度不够了?

打开starup_stm32f10x_md.s,最上面Stack_Size 值为0x400,Heap_Size为0x200,调大堆栈长度,将Stack_Size 值修改为0x800,Heap_Size修改为0x400。再次运行,仍然是同样的问题。

逐一在主函数中加断点,找到运行就会出错的主要函数,再在这个函数内部逐行加断点,一步步调试寻找子函数,最终发现是一个向串口写数据的子函数运行后就会跳转到错误中断处理函数。

在此函数中,乍一看并未发现错误:

uint16_t ShowMainPage(){ uint8_t *ToSendBuf=&TmpBuf[0]; uint8_t *OldPtr=ToSendBuf; uint8_t *LenPtr; char aStr[50]; uint16_t FrameLen; sprintf(aStr,"%f",DistFlux); ToSendBuf+=ShowLcd_Str(lcdvarFlux ,ToSendBuf,aStr); sprintf(aStr,"%d",RunTime) ; ToSendBuf+=ShowLcd_Str(lcdvarRunTime ,ToSendBuf,aStr); sprintf(aStr,"%d",RevAngle); ToSendBuf+=ShowLcd_Str(lcdvarRevAngle,ToSendBuf,aStr); sprintf(aStr,"%d",StopTime); ToSendBuf+=ShowLcd_Str(lcdvarStopTime,ToSendBuf,aStr); FrameLen=ToSendBuf-OldPtr; SendOut(&TmpBuf[0],FrameLen); return(FrameLen);//返回字节数 }

这个函数也可以运行到函数末尾,而不是在中间就跳转到错误中断处。

仔细检查发现,第一个sprintf函数中,使用的是”%f"格式化字符,但实际上DistFlux是个整数,将%f改为%d后,运行恢复正常。

结论:sprintf函数不匹配的格式化字符和数据,会导致系统堆栈在返回函数时错误。推测与此相关的函数,比如printf函数也可能会出现此类问题。

相关新闻

  • 2026年7月2日需求总结
  • TPA3128D2与PIC18F46K80构建高效音频系统
  • 大模型发布时间线:四维坐标系下的技术选型决策地图

最新新闻

  • 微信聊天记录永久保存指南:3个步骤轻松备份你的珍贵回忆
  • Tanuki+GPT-4构建轻量级客服决策引擎
  • 更多的 bash shell 命令
  • 3PEAK思瑞浦 TL331Q-S5TR-S SOT23-5 比较器
  • ThinkPad风扇终极控制指南:TPFanCtrl2实现静音与性能完美平衡
  • OpenSSH高危漏洞CVE-2025-26465/26466:原理、影响与安全加固实战

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号