仿真工作正常,实际运行出现死机现象分析

文章讲述了开发者在调试华大4A0芯片时遇到的问题,发现是使用time(NULL)设置随机数种子导致的HardFault。通过静态创建任务和信号量、添加打印信息以及更换随机数生成方法,解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近调试华大4A0芯片时遇到一个很奇怪的问题,仿真时工作都是正常的,一但实际运行就死机,卡在HardFault_Handler函数里。还没办法调试,因为一仿真又工作正常了。
一开始我怀疑是FreeRTOS分配任务或者是创建信号量时选择的是动态创建,由于分配的空间不足造成的死机现象。我选择把任务创建修改了静态创建,采用的函数是xTaskCreateStatic()。信号量分配也改为静态创建。结果是没有效果。
然后在代码之间增加打印信息,用RTT打印的方式显示出来。最终确认屏蔽掉一段产生随机数的函数就可以正常运行。进一步查找确认是设置随机数种子时写法是srand(time(NULL)),这里如果给定数值则不会报错,采用这个time(NULL)会造成HardFault。最终我用另一个方法替换掉time(NULL),问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值