模块文件
int a=0
void abc(void)
{
while(a)
{
...
}
}
主函数
if(command==0x0f)
{
a=~a
if(a)
{
abc()
}
}
command是接收的红外遥控的指令
变量a是模块文件中的变量在.h文件中用extern声明了
在第一次接收到红外后能正常到模块文件中,再次按下遥控器没有反应,是不是卡在了abc函数中的循环里了?我原本想到达按下遥控器变量a取反为1,运行函数abc 再次按下遥控器变量a取反为0那么abc函数中的while循环判断就不成立了
为什么红外遥控不能再次改变变量a的值从而影响函数中的循环?
你这代码问题很多
1.单片机是单线程的,进入死循环之后,a的值就再也不会变了,除非给a赋值是在中断程序里
2.应该写a=!a,或者a=1-a,~a是按位取反,0会变-1,1会变-2
除了上面说的,还有一点很多人没有注意到的, 在中断里改变的全局变量,定义和声明的时候都要加上volatile
while(1)无限循环,while(0)是一次都不执行。