2716|0

6366

帖子

4917

TA的资源

版主

楼主
 

msp430单片机开发实录(22) [复制链接]




此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处





msp430单片机开发实录(22)


现象:
程序调试中,有一个变量使用了从函数返回的值,结果有时数值出错。例如函数返回值是409,但是赋给这个变量后,这个变量的值却是153。
被调用的函数举例如下
  1. unsigned int CalMaxValue(unsigned int uiData[6])
  2. {
  3.   unsigned int uiMaxV=0x000;
  4.   int iTemp;
  5.   
  6.   for (iTemp=0;iTemp<6;iTemp++)
  7.   {
  8.     if (uiData[iTemp]>uiMaxV) uiMaxV=uiData[iTemp];   
  9.   }
  10.   return uiMaxV;
  11. }
复制代码



取值程序如下
  1. unsigned char ucGetData=0;
  2. unsigned char uiCalDta[6]={356,158,236,95,336,742};
  3. ucGetData=CalMaxValue(uiCalDta);
复制代码


试验:
首先,检查被调用的函数,没有发现任何问题,看函数的返回值也是完全正确,那被调用的函数肯定不用考虑了。再看取指的那句程序。发现有个规律,就是取得值不大于255时,值是正确的,一旦超过255,就会出错并且出错的值很有规律,就是错的值正好是原值的16进制的低字节。
于是结果很明确了,函数返回的值被“砍”掉了高字节,原因是:函数返回值是整型,而取值的变量是字符型。

验证:

将取值的变量也改为整型,那么取得的值无论是小于255,还是大于255,都能获得正确的值。
备注:
这种问题其实很常见,主要是粗心的错。
 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表