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