完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
对于中断,先执行中断服务函数还是先清理中断标志?开始学习固件库的时候,差不多是先进入服务函数在清理中断标志。最近在用CubeMX,是先清理中断标志再进入回调函数。想请教一个哪一个好
void HAL_GPIO_EXti_IRQHandler(uint16_t GPIO_Pin){ /* EXTI line interrupt detected */ if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) { __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); HAL_GPIO_EXTI_Callback(GPIO_Pin); }} |
|
相关推荐
2个回答
|
|
|
|
|
|
在中断处理中,先执行中断服务函数还是先清理中断标志取决于具体的应用场景和硬件设计。然而,在大多数情况下,推荐的做法是先清理中断标志,然后再执行中断服务函数。这样做的原因有以下几点:
1. **防止重复触发**:在某些情况下,如果中断标志没有及时清除,可能会导致中断服务函数重复执行,从而引发不必要的处理。 2. **确保中断状态正确**:在执行中断服务函数之前清理中断标志,可以确保在处理中断时,中断标志的状态是正确的,避免因为中断标志的状态错误而导致的处理逻辑错误。 3. **提高中断响应速度**:在某些高性能应用中,快速地清除中断标志可以减少中断处理的延迟,从而提高系统的响应速度。 在你提供的CubeMX示例中,代码首先检查中断标志,然后清除中断标志,最后执行回调函数。这是一个典型的中断处理流程,可以确保中断处理的正确性和效率。 ```c void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin){ /* EXTI line interrupt detected */ if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u){ __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin); HAL_GPIO_EXTI_Callback(GPIO_Pin); } } ``` 在这个示例中,`__HAL_GPIO_EXTI_GET_IT(GPIO_Pin)` 用于检查指定的GPIO引脚是否触发了中断。如果触发了中断(返回值不为0),则执行以下步骤: 1. `__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin)`:清除中断标志,确保中断服务函数不会被重复执行。 2. `HAL_GPIO_EXTI_Callback(GPIO_Pin)`:执行中断服务函数,处理中断事件。 总之,先清理中断标志再执行中断服务函数是一种更安全、更可靠的中断处理方式。然而,在某些特定场景下,如果确定中断标志会在中断服务函数中被正确处理,也可以先执行中断服务函数再清理中断标志。但在大多数情况下,推荐按照先清理中断标志再执行中断服务函数的顺序进行处理。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1877 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1145 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
760 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
789浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
612浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 21:18 , Processed in 0.649101 second(s), Total 50, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号