乐鑫技术交流
直播中

那些年儿ing

11年用户 1269经验值
擅长:84784
私信 关注
[问答]

初始化GPIO使用gpio_install_isr_service创建中断服务函数,调用ADF的API时发生install错误怎么解决?

1.初始化GPIO时候使用过一次gpio_install_isr_service创建中断服务函数
调用ADF的API时发生install错误...是不是只能单独用gpio_isr_register创建中断

2.使用queue时发生报错...但是单独使用时是正常的(发送和接收都在同一个c文件里)
请问,发送和接收在不同的c文件时就不能使用吗?


  • [/
  • E (498) gpio: gpio_install_isr_service(394): GPIO isr service already installed
  • /home/yejianhui/esp/esp-idf/components/freertos/queue.c:1157 (xQueueGenericSendFromISR)- assert failed!
  • abort() was called at PC 0x4008617c on core 1
  • 0x4008617c: xQueueGenericSendFromISR at /home/yejianhui/esp/esp-idf/components/freertos/queue.c:1996


  • Backtrace: 0x400895ac:0x3ffbace0 0x400897d9:0x3ffbad00 0x4008617c:0x3ffbad20 0x400e6903:0x3ffbad40 0x400e7265:0x3ffbad70 0x40086695:0x3ffbadb0
  • 0x400895ac: invoke_abort at /home/yejianhui/esp/esp-idf/components/esp32/panic.c:707

  • 0x400897d9: abort at /home/yejianhui/esp/esp-idf/components/esp32/panic.c:707

  • 0x4008617c: xQueueGenericSendFromISR at /home/yejianhui/esp/esp-idf/components/freertos/queue.c:1996

  • 0x400e6903: report_music_num at /home/yejianhui/esp/DaXia/components/daxia_main.c:357

  • 0x400e7265: daxia_main at /home/yejianhui/esp/DaXia/components/daxia_main.c:397

  • 0x40086695: vPortTaskWrapper at /home/yejianhui/esp/esp-idf/components/freertos/port.c:403


回帖(1)

王飞云

2024-6-26 17:42:02
根据您提供的错误信息,这里有两个问题需要解决:

1. gpio_install_isr_service安装中断服务函数时发生错误。
2. 使用queue时发生报错。

针对第一个问题,错误信息显示:“GPIO isr service already installed”,这意味着中断服务已经安装过了。在ESP32中,您只需要调用一次`gpio_install_isr_service()`来初始化中断服务。如果您在调用ADF的API时遇到安装错误,建议您检查代码,确保只调用一次`gpio_install_isr_service()`。

针对第二个问题,错误信息显示:“assert failed!”和“abort() was called”,这意味着在使用队列时发生了断言失败。这可能是由于以下几个原因:

1. 队列已满:在使用`xQueueGenericSendFromISR()`发送数据时,如果队列已满,将导致断言失败。请确保队列有足够的空间来接收新数据。

2. 队列未初始化:在使用队列之前,请确保已正确初始化队列。例如,使用`xQueueCreate()`或`xQueueCreateMutex()`创建队列。

3. 不同的C文件中的队列使用:发送和接收在不同的C文件中使用队列是没有问题的。请确保在发送和接收的C文件中都包含了队列的头文件,并正确地初始化和使用队列。

为了解决这些问题,您可以尝试以下步骤:

1. 确保`gpio_install_isr_service()`只调用一次。
2. 检查队列是否已满,并确保有足够的空间接收新数据。
3. 确保队列在使用前已正确初始化。
4. 在发送和接收的C文件中都包含队列的头文件,并确保正确使用队列。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分