您当前的位置: 首页 > 

风间琉璃•

暂无认证

  • 2浏览

    0关注

    337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

nstrFetchProhibited,stack overflow,Task watchdog got triggered解决办法

风间琉璃• 发布时间:2021-11-23 19:06:49 ,浏览量:2

文章目录
    • 1.空指针产生 nstrFetchProhibited
    • 2.栈溢出问题
    • 3.看门狗问题
  • 总结

1.空指针产生 nstrFetchProhibited

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

关注
打赏
1665385461
查看更多评论
立即登录/注册

微信扫码登录

0.0353s