当前位置: 代码迷 >> 单片机 >> S3C2440.为何小弟我的if判断放在主函数中的死循环就不执行,而放在中断中却可以
  详细解决方案

S3C2440.为何小弟我的if判断放在主函数中的死循环就不执行,而放在中断中却可以

热度:249   发布时间:2016-04-28 15:14:39.0
S3C2440...为何我的if判断放在主函数中的死循环就不执行,而放在中断中却可以。
我的程序的目的就是通过Timer0来做1秒钟的定时器中断,通过在中断中改变flag标志来使led灯闪烁。

主函数:
#include"2440addr.h"
#include"led.h"
#include"isrservice.h"
#include"interrupt.h"
#include"timer.h"

void IO_Init(void);
extern unsigned int flag = 0;

int Main()
{

IO_Init();
Led4_On();
while(1)
{
/* if(flag == 1)                //假如被注释的这一段放在定时器中断处理函数中
{                            //则可以使Led2闪烁,但如果把这段放在主函数的
Led2_On();           //的while当中则不行。
}
else
{
Led2_Off();
}*/
}
return 0;
}

void IO_Init(void)
{
Led_Init();
Timer0_Init();
Timer0_Interrupt_Init();
Isr_Init();
}


中断处理函数:
#include"config.h"
#include"isrservice.h"
#include"2440addr.h"
#include"led.h"

extern unsigned int flag;

void Isr_Init(void)
{
pISR_TIMER0 = (unsigned int)Timer0_Isr;
}

void __irq Timer0_Isr(void)
{
if(flag == 1)
{
Led2_On();
}
else
{
Led2_Off();
}
flag = !flag;
rSRCPND |= 1<<10;
rINTPND |= 1<<10;
}



假如在主函数中被注释的这一段放在定时器中断处理函数中
则可以使Led2闪烁,但如果把这段放在主函数的的while当中则不行。
为什么,跪求大神指导!!!谢谢啦!

程序在主函数中不执行,而在中断中可以

------解决方案--------------------
extern unsigned int flag = 0;
改成
extern volatile int flag;
看看,flag的初始化0不应该在这个地方
  相关解决方案