注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

tiankai001的个人空间 http://home.eeworld.com.cn/space-uid-139222.html [收藏] [复制] [分享] [RSS]

日志

msp430单片机开发实录(22)

已有 88 次阅读2018-12-25 17:55 |个人分类:Proteus for msp 430




此内容由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,都能获得正确的值。
备注:
这种问题其实很常见,主要是粗心的错。

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-3-25 15:51 , Processed in 0.034762 second(s), 11 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2019 http://bbs.eeworld.com.cn/

返回顶部