|
本帖最后由 SUPER_CRJ 于 2022-9-12 11:32 编辑
RT。
最终的问题:lfs_mount(&ofd_lfs,&ofd_cfg); 为什么会进入HardFault_Handler中。
尝试把堆栈放大,改ofd_cfg配置,而且之前也已开发很长时间了。里面的配置应该没什么问题!
具体情况如下:
这次比较恶心,之前已用LittleFS开发了一段时间,也没有发现问题。
批量的时候,下载程序,发现运行了一下,直接死机了。用之前开发板测试又没有问题。
最后定位问题是:
1:需要挂载文件系统: u32 err = lfs_mount(&ofd_lfs,&ofd_cfg); 这一句之后:直接死机了,问题是:KEIL中调试模式下,直接停下,但是不知道停在哪里了,不像之前代码,会停在:HardFault_Handler中。
2:为什么我判断停在:HardFault_Handler中,因为我写了个HardFault_Handler函数,在不进行调试模式,而是直接下载程序运行时候:运行的是HardFault_Handler里面程序。
3:还有一个不解地方:下载程序运行的时候,第一次时候:不是运行到HardFault_Handler中,需要再断电一次。这样根本查不到具体哪一句引起的问题。
解决的方法也行简单:
先格式化一下:lfs_format(&ofd_lfs, &ofd_cfg);,但是不能一上电就格式化,否则之前存储的文件就没有了。
官方给的例程就是:先挂载,如果再挂载失败,再格式化。但是问题是:挂载直接进入HardFault_Handler,进入死循环了。
u32 err = lfs_mount(&ofd_lfs,&ofd_cfg); // 挂载文件系统。
if( err ){
lfs_format(&ofd_lfs, &ofd_cfg);
lfs_mount(&ofd_lfs, &ofd_cfg);
}
进入死循环就麻烦了,晚点要批量生产,现在就是定位不了具体问题。
现在采用特殊的解决方法:在HardFault_Handler格式化文件系统。但是不是最终解决方案,只能临时用用而已。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|