此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处
msp430单片机开发实录(22)
现象:
程序调试中,有一个变量使用了从函数返回的值,结果有时数值出错。例如函数返回值是409,但是赋给这个变量后,这个变量的值却是153。
被调用的函数举例如下
- unsigned int CalMaxValue(unsigned int uiData[6])
- {
- unsigned int uiMaxV=0x000;
- int iTemp;
-
- for (iTemp=0;iTemp<6;iTemp++)
- {
- if (uiData[iTemp]>uiMaxV) uiMaxV=uiData[iTemp];
- }
- return uiMaxV;
- }
复制代码
取值程序如下
- unsigned char ucGetData=0;
- unsigned char uiCalDta[6]={356,158,236,95,336,742};
- ucGetData=CalMaxValue(uiCalDta);
复制代码
试验:
首先,检查被调用的函数,没有发现任何问题,看函数的返回值也是完全正确,那被调用的函数肯定不用考虑了。再看取指的那句程序。发现有个规律,就是取得值不大于255时,值是正确的,一旦超过255,就会出错并且出错的值很有规律,就是错的值正好是原值的16进制的低字节。
于是结果很明确了,函数返回的值被“砍”掉了高字节,原因是:函数返回值是整型,而取值的变量是字符型。
验证:
将取值的变量也改为整型,那么取得的值无论是小于255,还是大于255,都能获得正确的值。
备注:
这种问题其实很常见,主要是粗心的错。