PSDK3.1.0抛出hardfault错误
Completed当前freeRTOS环境,PSDK版本V3.1.0,当调试信息输出如下信息时大概率会触发芯片硬件报错hardfault
-
我没有debug,直接串口打印输出,打断点可能会影响精准定位功能。您debug不是调试这个问题吗?所以不打断点调试不会出现异常错误? ![](https://djisdksupport.zendesk.com/attachments/token/bTLBd5LvENXGkosTe8M6VOUgr/?name=image.png) -
[33m[19.283][channel]-[Warn]-[DjiHighSpeedDataChannel_Init:175) Socket handler is null. Probably because socket handler is not be registered. Some functions may not be available. [0m
[11:52:49.500]收←◆[32m[19.934][time_sync]-[Info]-[DjiTimeSync_ApplyPpsAsyncCallback:564) apply pps success. [0m
在这句LOG之后触发了hardfault
-
我现在手边没有407 192K的板子,用的是429的板子,RAM:256K测试验证。 STM32F429,PSDK 3.2(release分支版本,非master)sample功能全开没有问题,可以正常运行,可以先参考一下。 ![](https://djisdksupport.zendesk.com/attachments/token/XbjFFv5saTCpaeKQNfMDzcy3H/?name=image.png) -
您好,我问题解决了,根源在于我的底层串口驱动在接收数据时有漏数据的情况,导致带入错误的数据给PSDK时,PSDK解析有错误(内存泄漏)。现在我重新修改了串口驱动的情况下,可以正常运行所需要的模组了。
不知道对于数据检查这一块是否可以做压力测试呢,我已发现如下现象:
1、开机给PSDK上传1000+个数据“0”会直接导致解析崩溃
2、正常运行起来之后数据包缺失部分数据,某些模组解析会崩溃(封包不可见具体位置)
可否在新版本中增强数据的校验工作,因为正常工程环境中串口数据出错是难免的,直接造成系统崩溃非常影响产品的使用。
同一个串口的工程我也移植了PSDK2.2.1版本,221版本会报大量校验错误,但不会直接导致系统崩溃,功能是可以持续运行的,希望V3.x能做到同样的数据保护强度
-
另外就是我发现只要一次性给PSDK上传一大包数据就会导致PSDK直接内存溢出,复现场景如下
1、串口驱动使用DMA进行传送
2、在程序正常跑起来之后,使用JLINK调试器暂停程序运行(这时飞机给MCU发送的数据经过DMA仍然继续传输)
3、继续运行程序,这时在串口缓冲区累积了前几包的数据
4、触发hardfault硬件错误
这种情况会引起应用上很多问题。比如我工程中有使用到FatFS进行文件写入(SD卡),在写入大文件的时候,FatFS底层驱动会调用vSuspendAll来阻塞所有线程运行以保护文件的写入。这样会造成释放所有运行权限的时候又累积了一大包串口数据需要解析,然后一解析就触发内存溢出的错误。改FatFS的底层驱动是不现实的。这点您那边是否能确认复现一下呢?
(demo串口接收方式是中断+FIFO,没有使用串口中断来接收而是使用DMA的原因是项目中有6个串口同时工作,频繁进出中断会导致更多的数据遗漏且影响主逻辑运行)
Please sign in to leave a comment.
Comments
26 comments