完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的项目中有多个任务在运行,使用了I2C,WIFI,ADC,PWM等外设,但是偶尔会出现Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU故障,通过dump分析,问题位置出现在ADC采集任务ADC采集接口调用的函数中,最终定位到如下位置,
void IRAM_ATTR regi2c_ctrl_write_reg_mask(uint8_t block, uint8_t host_id, uint8_t reg_add, uint8_t msb, uint8_t lsb, uint8_t data) { portENTER_CRITICAL_ISR(&mux); i2c_write_reg_mask_raw(block, host_id, reg_add, msb, lsb, data); portEXIT_CRITICAL_ISR(&mux); } 异常信息如附件。 |
|
相关推荐
1个回答
|
|
从您的描述来看,问题可能是由于中断服务程序(ISR)中的代码执行时间过长,导致中断看门狗超时。以下是一些建议和解决方案:
1. **优化代码**:检查中断服务程序中的代码,看看是否有可以优化的地方。例如,减少循环次数、使用更快的算法等。 2. **使用中断标志**:在中断服务程序中,可以使用中断标志来通知主程序处理任务,而不是在中断服务程序中直接处理。这样可以减少中断服务程序的执行时间。 3. **中断优先级**:检查中断优先级设置,确保高优先级的中断能够及时响应。如果可能,降低ADC采集任务的优先级,以减少对其他任务的影响。 4. **中断看门狗配置**:检查中断看门狗的配置,确保其超时时间足够长,以适应中断服务程序的执行时间。如果可能,增加中断看门狗的超时时间。 5. **避免在中断服务程序中使用I2C通信**:在中断服务程序中使用I2C通信可能会导致执行时间过长。尝试将I2C通信移至主程序中,以减少中断服务程序的执行时间。 6. **使用DMA**:如果可能,使用DMA(Direct Memory Access)来处理数据传输,以减少CPU的负担。 7. **检查硬件问题**:检查硬件连接和配置,确保没有硬件故障或配置错误。 8. **使用调试工具**:使用调试工具(如GDB或ESP-IDF的调试器)来分析程序的执行情况,找出可能的问题所在。 9. **更新固件和库**:确保使用的固件和库是最新版本,以避免已知的问题。 10. **寻求社区帮助**:如果问题仍然无法解决,可以在相关社区(如ESP32的论坛或GitHub仓库)寻求帮助,看看是否有其他人遇到过类似的问题。 通过以上方法,您可以尝试解决ADC采集任务中的中断看门狗超时问题。希望这些建议对您有所帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
313浏览 6评论
270浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
259浏览 5评论
265浏览 4评论
241浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-26 22:41 , Processed in 0.562448 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191