具体是这样的:
被调用的函数是:void GetKey(void) {*********} 做矩阵键盘扫描
主函数是:
main()
{
********
GetKey();
switch(NUMCARS()/15)
{
case 0:{t=10;ewstate(t);break;}
case 1:{t=15;ewstate(t);break;}
case 2:
default:{t=20;ewstate(t);break;}
}
switch(NUMCARS()/15)
{
case 0:{t=10;nsstate(t);break;}
case 1:{t=15;nsstate(t);break;}
case 2:
default:{t=20;nsstate(t);break;}
}
}
在主函数中调用成功了,但是在void nsstate(unsigned char j)和void ewstate(unsigned char j)中调用都失败了,求解释怎么回事
声明过了,不行啊
声明过了,但是调用不成功啊
对,而且之前已经进行了函数声明
追答问题并没有那么简单,主函数中还有switch(NUMCARS()/15),调用GetKey的条件确定成立吗?怎样知道 nsstate和ewstate肯定有调用GetKey,仿真吗?NUMCARS()函数是什么,没把程序贴出来,调用GetKey的条件是否成立就无法分析了。
追问nsstate和ewstate是液晶屏模拟交通灯的不同状态,GetKey扫描矩阵键盘,一旦有按键按下后就从nsstate,ewstate中跳出,执行显示当前时间的程序。调用GetKey还要条件吗?不是直接用就行了吗?
追答nsstate和ewstate是在switch(NUMCARS()/15)下列的case里面的,如果switch的所有条件都不成立这两个函数怎么会被调用,如果这两个函数不被调用,GetKey又怎么被调用呢,你不是说在nsstate和ewstate调用GetKey不成功吗。
追问switch的条件肯定会进入nsstate或者ewstate,不然液晶屏根本不会显示内容。现在的问题是,我发现,在main,nsstate和ewstate中,若只有任意一个程序调用GetKey没问题,可以运行,但是如果有2个或2个以上程序调用GetKey就失败了,用keil编译却是可以通过的。
追答明白你的意思了,如体所述是不是声明太多的变量,又没有手动初始化过堆栈指针导致堆栈溢出,程序看不出有什么问题,只是不习惯case后面那些大括号。
本回答被提问者采纳