if比较大小,不转换类型,会影响其它不相干的变量计算

2019-12-16 22:40发布


在STVD里,编写STM8L052单片机程序,
我在头文件里面是这样定义的:
typedef struct
{  
        u32 Flow;
       u16 SetDelaySec;        
        SType_SaveData SaveData;
}SType_Metering;



调试的时候,无意中发现:
if(Metering.SetDelaySec>65000) 会影响其它函数里面不相干的变量Metering.Flow,即Metering.SetDelaySec与Metering.Flow是完全不相干的。

只有进行转换if(Metering.SetDelaySec>(u16)65000)  ,程序才能够正常运行。


然后查看编译器生成的汇编如下:

转换2.png (166.8 KB, 下载次数: 0) 下载附件 2018-10-18 17:42 上传
  

  

完全是不一样的,
有前辈知道原因吗?
恳请赐教。

(另外有个问题,我目前程序里if (Metering.Flow > 9999999)还没有出现问题,现在心里有点怕,不知道要不要把所有的if比较,全部都进行转换)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。