你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

中断服务程序清除标志的顺序问题

[复制链接]
bucker 提问时间:2018-11-17 20:47 /
阅读主题, 点击返回1楼
收藏 评论16 发布时间:2018-11-17 20:47
16个回答
stm1024 回答时间:2018-11-20 08:02:08

另外一种可能是,中断是抢占式的,我猜你一进入中断处理函数后清除标志,效果不是你预期的那样?那极有可能是这个中断还没有处理完成后,另一个同等级的中断又触发了,然后中断再入?你把中断的优先级调到最高,关闭其他所有中断试试?
bucker 回答时间:2018-11-20 20:40:57
stm1024 发表于 2018-11-20 08:02
另外一种可能是,中断是抢占式的,我猜你一进入中断处理函数后清除标志,效果不是你预期的那样?那极有可 ...

实际上此刻的中断只有一个,我也认为是中断时间过于频繁造成的。
党国特派员 回答时间:2018-12-3 17:46:29
中断的使用需要技巧,要和你的业务接合在一起使用。
如果你的业务要求每一次中断都不能漏掉,那么进入中断就要先清标志。而且中断处理要尽可能的短。
如果你的业务要求不是很严,漏掉几个中断也不影响,那可以在处理完再清标志。

一般情况都是要求中断尽可能短,先清中断
bucker 回答时间:2018-12-3 23:39:41
党国特派员 发表于 2018-12-3 17:46
中断的使用需要技巧,要和你的业务接合在一起使用。
如果你的业务要求每一次中断都不能漏掉,那么进入中断 ...

服务程序很短,也就是判断,然后改下变量的值,就退出了。
SaFang 回答时间:2020-2-4 10:50:25
同感, 查无资料, 最清晰的是, 在用TIM6做延时, 先清中断和后清中断, 会出现不可预计的情况, 而且延时时间刚好差一倍, ms和us都是, 差一倍, 想不明白,也没资料
lisd70 回答时间:2020-2-5 01:02:17
具体要看程序控制来定,如果中断程序运行时间过长,最好是先清,再做其他的。
hejun96 回答时间:2020-2-11 12:10:41
以STM32F4为例, EXTI外部中断的配置
                        EXTI_Init用来配置一个外部中断
                void EXTI_Init  ( EXTI_InitTypeDef *  EXTI_InitStruct )
                        参数结构体如下:
                        typedef struct
                        {
                          uint32_t EXTI_Line;   //指定要初始化 的外部中断的编号
                                                // EXTI_Line0  EXTI_Line1 .....
                                                //如果有多个需要指定,则可以用 '|'
                          EXTIMode_TypeDef EXTI_Mode;   //指定外部中断的模式
                                                //  EXTI_Mode_Interrupt   中断模式
                                                //  EXTI_Mode_Event       事件模式
                          EXTITrigger_TypeDef EXTI_Trigger; // 指定外部中断线的触发方式,选择上升/下降沿触发
                                                //EXTI_Trigger_Rising = 0x08,  上升沿
                                                //EXTI_Trigger_Falling = 0x0C,  下降沿
                                                //EXTI_Trigger_Rising_Falling = 0x10  双边沿触发
                                                // 上述三个任选一个
                          FunctionalState EXTI_LineCmd;  // 使能或禁止外部中断
                                                //ENABLE   使能
                                                //DISABLE  禁止
                          }EXTI_InitTypeDef;

       
                ----------------------------
                        EXTI_ClearFlag 用来清除掉EXTI_Line 指定的中断 pending为,这个函数一般是在中断处理完后调用
                void EXTI_ClearFlag  ( uint32_t  EXTI_Line )  

12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版