在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比较,全部都进行转换)
普通变量.png (16.96 KB, 下载次数: 0)
下载附件
2018-10-19 09:56 上传
以上改成普通变量u16 testSetDelaySec,还是有问题。
我的初步结论:
STVD的编译器COSMIC,如果大于INT_MAX 32767,则要进行 ui 转换为 L ,即 c_uitolx
写成65000u才是unsigned int类型。
一周热门 更多>