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不应该在这个地方