- FreeRTOS堆栈空间不够,运行一小会之后卡死,调大堆栈
- FreeRTOS任务资源上电的时候共用,比如数组共用,由于优先级问题争抢。比如说你GUI显示的数组还没初始化就要去定时器显示,被其他进程初始化抢占,这个比较玄学,反正就是也是运行一小会后卡死。此时还没出临界区。我的建议是有一些属于库里的,放main最前面初始化,不受抢占影响的再放任务while(1)前面去。
- 动态创建,比如链表,指针使用未释放。内存爆炸。用了就要释放。
- 混用函数调用,这个问题很严重,一开始就要规划好,不然重写也很麻烦。具体表现在在WiFi的任务里面调lv_xxx(),也就是LVGL的控件函数,会运行后触发卡死,原因是任务运行过程中抢占。LVGL相关的内容放LVGL定时器里面去,传递信息尽量通过队列。http://t.csdnimg.cn/Gtuv4
http://t.csdnimg.cn/Gtuv4
- 芯片时钟没有初始化,现象为卡死在LCD初始化刷屏Clear
- FreeRTOS的定时器Start位置不能在临界区,正确的位置应该在task的while(1)前面,我也不知道为什么,也有时候不能这样放,可能是抢占导致的。建议建一个简单的工程测试一下。
- RTOS的环境数组小了,不能太大不能太小(lv_conf.h)
单单一个卡死很难排查原因,可以打印串口、软件仿真查看程序停在了哪里,或者看代码变量数据的分布情况猜测
http://t.csdnimg.cn/PfF1Dhttp://t.csdnimg.cn/PfF1D可以在评论区提出你遇到的问题一起交流