前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >程序卡死在void HardFault_Handler的解决办法

程序卡死在void HardFault_Handler的解决办法

作者头像
嵌入式与Linux那些事
发布2021-05-20 15:05:42
1.6K0
发布2021-05-20 15:05:42
举报

  上午调试程序,把UWB的时间戳都转换成标准时间打出来了,但是发现,程串口输出一会之后就会停止,板子的灯也熄灭了。

  时间戳转换标准时间代码如下:

代码语言:javascript
复制
u8 TestBuff[150];
int OutCounter = 0;
double TxTimeStamp_Trans=0;

TxTimeStamp_Trans= (uint64_t)(((uint64_t)TxTimeStamp[4] << 32)
                  + (TxTimeStamp[3] << 24) + (TxTimeStamp[2] << 16) 
				  + (TxTimeStamp[1] << 8) + TxTimeStamp[0]);
OutCounter += sprintf((char*)&TestBuff[OutCounter], "发送时间戳为:%.9lf\r\n", TxTimeStamp_Trans*DWT_TIME_UNITS); 
USB_TxWrite(TestBuff,OutCounter);

  在主函数中,我也调用了USB_TxWrite来输出测距的信息。在发送回调函数中也调用了USB_TxWrite来输出信息。所以串口输出有点乱。刚开始我猜测是两个USB_TxWrite输出干扰导致的程序卡死。后来我在发送回调函数中把USB_TxWrite改成printf输出。程序还是会卡死。所以不是上述想法不成立。

在这里插入图片描述
在这里插入图片描述

  手动单步调试,发现代码在如下位置停了下来。程序进入未定义异常中断。

代码语言:javascript
复制
void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

  看注释是硬件错误。查看了我的LR寄存器,发现是一个未知的地址:0xfffffffe,这个地址明显不存在。后来猜测应该是错误访问了硬件的空间。 下午回来继续分析代码,看了下自己写的代码,发现TestBuff的大小为定值。而OutCounter 大小返回的是打印到字符缓冲区中的字符数目。这个值是一直改变的。所以程序有个发生数组越界。   为了很快能看到是否发生了数组越界,将TestBuff的大小设置成50,然后使用printf输出OutCounter 的大小。最终发现在OutCounter 为60的时候程序停了下来,进入了HardFault_Handler。验证我们的猜测是正确的。   下面是修改代码,利用指针和calloc动态申请数组的大小就好了。

代码语言:javascript
复制
u8 *TestBuff;
int OutCounter = 0;
double TxTimeStamp_Trans=0;
TxTimeStamp_Trans= (uint64_t)(((uint64_t)TxTimeStamp[4] << 32)
				  + (TxTimeStamp[3] << 24) + (TxTimeStamp[2] << 16) 
                  + (TxTimeStamp[1] << 8)  + TxTimeStamp[0]);
TestBuff = (u8*)calloc(sizeof(TxTimeStamp_Trans*DWT_TIME_UNITS)+14,sizeof(u8));
OutCounter += sprintf((char*)&TestBuff[OutCounter], "接收时间戳为:%.9lf\r\n", TxTimeStamp_Trans*DWT_TIME_UNITS); 
USB_TxWrite(TestBuff,OutCounter);
free(TestBuff);/*一定记得释放申请的空间*/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档