本帖最后由 一切会如旧 于 2015-3-3 18:43 编辑
文件rtc.c
各种#include....
u8 volatile ConverFlag; //变量定义的位置</font>
其他变量、函数定义或声明....
void RTC_IRQHandler(void) //时钟中断函数</font>
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)//秒中断</font>
{
其他不涉及ConverFlag的语句....
ConverFlag=~ConverFlag; //这里改变了ConverFlag这个变量的值</font>
其他不涉及ConverFlag的语句....
}
清中断语句...
}
文件main.c:
各种#include....
extern u8 volatile ConverFlag; //变量声明的位置
其他变量及函数的定义或声明....
int main()
{ while(RTC_Init()); //时钟初始化
ConverFlag=ON; //变量初始化
while(1)
{
if(ConverFlag==ON)
显示语句.... // 1
if(ConverFlag==OFF)
显示语句.... // 2
}
}
变量 ConverFlag是用来作为一个标志,使1、2程序定时交替执行(实际是显示语句,交替显示不同的内容)。
我把程序简化为上述的情况了,其他地方没有涉及到 ConverFlag变量的读或者写。中断在初始化函数RTC_Init()里已经使能。
程序执行的效果是:
只看到 1 语句的效果,因为此变量初始化为ON,如果初始化改为OFF,就只能看到 2 语句的效果。也就是说中断里对此变量的操作无效了一样。
可以肯定的是,中断是执行了的,因为中断中进行的其他操作,在运行时能观察到对应的现象。
不知道是什么原因?
不好意思,不知道这里编辑的时候什么原因,贴出的main函数代码在保存后老是少一部分,所以重新编辑了一下。
|