野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23389|回复: 3

中断问题

[复制链接]
发表于 2015-4-10 10:01:46 | 显示全部楼层 |阅读模式
PC13优先级比PA0高,进入PA0中断后流水灯死循环,如果按键2按下进入PC13中断,可以看到LED3翻转一次,然后继续按键1的中断。如果想要按键2按下以后进入中断反转LED3以后,返回时能跳出按键1的死循环,应该怎么修改?程序如下:
void EXTI0_IRQHandler(void)                                                //按键1中断
{
        if(EXTI_GetITStatus(EXTI_Line0) != RESET)  
        {
                // LED1 ??       
    while(1)       
                {       
                        LED1_TOGGLE;
                  LED2_TOGGLE;
                        Delay(0x0FFFFF);
    }
                EXTI_ClearITPendingBit(EXTI_Line0);     
        }  
}

void EXTI15_10_IRQHandler(void)                                    //按键2中断
{
        if(EXTI_GetITStatus(EXTI_Line13) != RESET)
        {
           LED3_TOGGLE;       
        }
          EXTI_ClearITPendingBit(EXTI_Line13);   
}
回复

使用道具 举报

发表于 2015-4-10 12:54:17 | 显示全部楼层
在中断程序中使用死循环是很危险,建议程序中定义全局变量的标志位,初始化为0;在PA0中断中,设置标志位为1,在PC13中断中设置标志位为0;
在main函数中的while(1)函数里边判断标志位状态,执行原本在PA0中断中的程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-10 13:47:25 | 显示全部楼层
本帖最后由 拽拽暧 于 2015-4-10 14:01 编辑
亽亼 发表于 2015-4-10 12:54
在中断程序中使用死循环是很危险,建议程序中定义全局变量的标志位,初始化为0;在PA0中断中,设置标志位为 ...

定义全局变量时使用volatile int i =0;语句怎么总是提示错误?
error:  #147: declaration is incompatible with "int i" (declared at line 12 of "..\..\User\led\bsp_led.h")
其他都没有问题,为何定义时没办法定义?难道还要用#define?科普下~
刚刚又调试了下,直接使用int i ;就解决了。。。那为何很多人都说在中断时候要用volatile,这个怎么正确使用捏?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-10 14:33:56 | 显示全部楼层
已经在论坛里找到科普知识了,谢谢~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-6 22:14 , Processed in 0.054404 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表