中断和任务、定时器中断和任务的关系



我正在使用stm32计时器中断。

文件1:(中断功能(

static int flag = 50;
void timer_inter_handler(){    
//...
flag = some changes integer;// not 0, it is changed     
#if 0 // **** note    
printf("%drn", flag);    
#endif
}
int get_flag(){    
return flag;    
}

文件2:(其他文件(

int task1(){    
static int fccount = 0;    
while(1){    
fccount++;
if ( fccount%50000 == 0 )   
{    
printf("%drn", get_flag());
// ... 
}    
}//while(1)    
}

注意:

如果启用此选项,task1可以打印正确的标志数据更改。但如果关闭,task1在系统初始化期间只能打印默认的50值一段时间。则打印的所有标志数据都是0

我不知道为什么会发生这种事。没有其他地方更新var标志。有线索吗?

您需要的是:

volatile static int flag = 50;

volatile关键字告诉编译器flag变量可以在中断中更改。如果关键字不存在,则flag变量将不能更改。这就是为什么你看不到它在改变。#if 0 printf(...)可能正在强制编译器访问该变量。

我发现了问题。问题出在定时器中断hal_adc_start(读取和停止(内部,通过读取adc值,定时器中断例程保持不变。

一旦我移动hal_adc_read,它就可以正常工作。

最新更新