调试程序遇到问题。 程序走到adcValue[mearChalNum+1] = GetAdcDate();这一步不往下走了。 后来将mearChalNum通过串口输出出来,发现不为0,是个比较大的数,而adcValue[4]只是个存放4个8位数的数组。 mearChalNum是通过函数的参数传递过来的。 void GetTemptValue(u8 mearChalNum) { ... adcValue[mearChalNum+1] = GetAdcDate(); ... } 而主函数是这样的: void main() { ... u8 ad7193ChalNum; ... while(1) { ... GetTemptValue(ad7193ChalNum); printf("\r\n\r\nad7193ChalNum: %d", ad7193ChalNum); ... } } 将主函数里u8 ad7193ChalNum;改成u8 ad7193ChalNum = 0;程序就可正常执行了。 ---------------------------------------------------------------- 印象中C语言的变量定义后默认是0吧? |
建议:不论外部全局、静态还是内部的变量都要初始化!
评分
查看全部评分
proceState: 1
ad7193ChalNum: 134242684
proceState: 2
ad7193ChalNum: 134242684/r/n waitMISOtoLow
未给ad7193ChalNum赋值时,串口输出的数。
---------------------------------------------------------
反复上电几次,串口输出的ad7193ChalNum的值都是134242684,转为16进制为800617C。
程序里有让ad7193ChalNum不断增1的地方,但一旦大于3就将其清零。其余的地方暂时还没想到有其他地方对其赋值。
ad7193ChalNum是u8类型的,值最大为255,你看到的不对。
另外串口输出的可能是uint32位的,你可以直接输出&ad7193ChalNum处1个字节的值,此处串口输出不准确。建议直接调试,不用串口输出。调试是直接解决问题的快速方式。
对于未定义的行为(即:对于未初始化的变量查看其值是什么)你还是不要在这种地方上浪费时间,它的值是随机的(尽管每次串口输出一样没准你重启后的系统就不同了)。
感谢回复。