完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问我在中断中关闭中断使能,在应用中开启中断使能。但是开始会响应。才是多按几次按钮中断就不响应呢怎么办呢?中断代码和线程
代码如下: static void IRAM_ATTR gpio_isr_handle(void* arg) { uint32_t gpio_num = (uint32_t)arg; xQueueSendFromISR(gpio_pen_queue,&gpio_num,NULL); GPIO.pin[GPIO_PEN_SDA_IO].int_ena = 0; ///关闭中断 } static void gpio_task_example(void* arg) { uint32_t io_num; for(;;) { if(xQueueReceive(gpio_pen_queue, &io_num, portMAX_DELAY)) { printf(“GPIO[%d] intr, val: %dn”, io_num, gpio_get_level(io_num)); // GPIO.status_w1tc=1《《GPIO_PEN_SDA_IO; // GPIO.pin[GPIO_PEN_SDA_IO].int_type = GPIO_INTR_NEGEDGE; // GPIO.pin[GPIO_PEN_SDA_IO].int_ena = 1; ///开启中断 gpio_set_intr_type(GPIO_PEN_SDA_IO, GPIO_INTR_NEGEDGE); gpio_intr_enable(GPIO_PEN_SDA_IO); } } } |
|
相关推荐
1个回答
|
|
从您提供的代码片段来看,您在中断服务程序(ISR)中关闭了中断使能,然后在应用线程中重新开启中断使能。这种情况可能导致中断响应不稳定,原因如下:
1. 中断服务程序(ISR)的执行时间可能较长,导致中断响应不及时。在ISR中关闭中断使能后,如果ISR执行时间过长,可能会导致在这段时间内发生的中断事件被忽略。 2. 在应用线程中重新开启中断使能可能存在竞争条件。如果在ISR执行过程中,应用线程尝试重新开启中断使能,可能会导致中断使能标志位被错误地设置。 为了解决这个问题,您可以尝试以下方法: 1. 优化ISR的执行时间。确保ISR尽可能简洁,避免执行耗时的操作。这样可以减少中断响应的延迟。 2. 在ISR中使用标志位来通知应用线程中断事件的发生,而不是直接在ISR中关闭中断使能。例如: ```c static volatile bool gpio_interrupt_flag = false; static void IRAM_ATTR gpio_isr_handle(void* arg) { uint32_t gpio_num = (uint32_t)arg; gpio_interrupt_flag = true; xQueueSendFromISR(gpio_pen_queue, &gpio_num, NULL); } static void gpio_task_example(void* arg) { uint32_t io_num; for (;;) { if (xQueueReceive(gpio_pen_queue, &io_num, portMAX_DELAY)) { printf("GPIO interrupt occurred on GPIO number %un", io_num); } if (gpio_interrupt_flag) { // 处理中断事件 gpio_interrupt_flag = false; GPIO.pin[GPIO_PEN_SDA_IO].int_ena = 1; // 重新开启中断使能 } } } ``` 3. 确保在应用线程中重新开启中断使能的操作是安全的,避免竞争条件。可以通过使用互斥锁或其他同步机制来确保操作的原子性。 通过以上方法,您应该能够提高中断响应的稳定性。 |
|
|
|
只有小组成员才能发言,加入小组>>
540浏览 6评论
451浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
433浏览 5评论
435浏览 4评论
406浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 10:03 , Processed in 1.732085 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号