首页 >> 知识 >> 程序卡死在void HardFault

程序卡死在void HardFault

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

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

u8 TestBuff[150];int OutCounter = 0;double TxTimeStamp_Trans=0;TxTimeStamp_Trans= (uint64_t)(((uint64_t)TxTimeStamp[4] }}

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

u8 *TestBuff;int OutCounter = 0;double TxTimeStamp_Trans=0;TxTimeStamp_Trans= (uint64_t)(((uint64_t)TxTimeStamp[4]
网站地图