- 1.空指针产生 nstrFetchProhibited
- 2.栈溢出问题
- 3.看门狗问题
- 总结
Guru Meditation Error: Core 0 panic’ed (InstrFetchProhibited). Exception was unhandled. Core 0 register dump: PC : 0xa5a5a5a5 PS : 0x00050033 A0 : 0xa5a5a5a5 A1 : 0x3ffb2e30 A2 : 0xa5a5a5a5 A3 : 0xa5a5a5a5 A4 : 0xa5a5a5a5 A5 : 0xa5a5a5a5 A6 : 0xa5a5a5a5 A7 : 0xa5a5a5a5 A8 : 0xa5a5a5a5 A9 : 0xa5a5a5a5 A10 : 0xa5a5a5a5 A11 : 0xa5a5a5a5 A12 : 0xa5a5a5a5 A13 : 0xa5a5a5a5 A14 : 0xa5a5a5a5 A15 : 0xa5a5a5a5 SAR : 0x00000025 EXCCAUSE: 0x00000014 EXCVADDR: 0xa5a5a5a4 LBEG : 0xa5a5a5a5 LEND : 0xa5a5a5a5 LCOUNT : 0xa5a5a5a5
在网上找了半天没有解决,最后在ESP编程指南找到这个问题 InstrFetchProhibited,此 CPU 异常表示 CPU 无法加载指令,因为指令的地址不在 IRAM 或者 IROM 中的有效区域中
通常这意味着代码中调用了并不指向有效代码块的函数指针。这种情况下,可以查看 PC (程序计数器)寄存器的值并做进一步判断:若为 0 或者其它非法值(即只要不是 0x4xxxxxxx 的情况),则证实确实是该原因
这就是可能你程序中存在着空指针!!!
2.栈溢出问题ERROR A stack overflow in task task1_task has been detected.
给每个任务函数所分配的栈空间比较小,一般试着将任务函数的栈空间改大一些,esp32不知道能不能查询freertos 统计任务状态和堆栈使用空间
堆栈使用情况和堆栈溢出检查 :堆栈使用和检测
3.看门狗问题E (10151) task_wdt: Task watchdog got triggered. The following tasks did not reset
ESP为空闲任务创建一个看门狗计时器,以及执行您工作的任何任务,它创建了两个额外的任务IDLE0和IDLE 1(每个内核一个),其唯一目的是什么都不做,即空闲。这些空闲任务只是在看门狗各自的内核空转时为其供电
每当ESP中的任何任务以及中断例程以比IDLE任务更高的优先级运行时,而不会延迟或阻止足够长/足够频繁(在紧密的while循环中执行时),它会触发监视程序,因为该内核现在完全繁忙,这意味着它不再经常空闲, 这意味着空闲的"任务"会挨饿,因此它们无法重置看门狗, loop() 以比 IDLE 任务更高的优先级运行
所以,必须进行一些调用,以足够的间隔阻止您的代码至少10mS
如果你希望任务看门狗触发之后进行重启可以试着调用panic handler :在 make menuconfig --> Component config --> ESP32-specific选中 Invoke panic handler on Task Watchdog timeout
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?