stvd+cosmic 编译问题,运算结果不正确

2019-12-12 18:19发布

typedef  unsigned long  u32;
typedef  unsigned char  u16;
typedef  unsigned char  u8;



#warning cpstm8 ..ds1302.c:702(44) truncating assignment
#warning cpstm8 ..ds1302.c:703(44) truncating assignment
#warning cpstm8 ..ds1302.c:704(43) truncating assignment
#warning cpstm8 ..ds1302.c:705(47) truncating assignment
     
              出现上述警告,使用cosmic +stvd

进入调适 ,查看变量 不是我要的,但在 keil arm compiler ok!!

u8  a,b,c,d;
u8   dat_arr [4];
u16 tmp,tmp1;
u32  cnt,result;
                cnt=0x33200532;

               
          dat_arr [0] =(cnt>>24);
         dat_arr [1] =(cnt>>16);
          dat_arr [2]=(cnt>>8);
          dat_arr [3]=(cnt& 0xFF);         


得到 dat_arr [0]=0x03;   dat_arr [1]=0x32;  dat_arr [2]=0x05;  dat_arr [3]=0x32;
我希望得到如下:
dat_arr [0]=0x33;
dat_arr [1]=0x20;
dat_arr [2]=0x05;
dat_arr [3]=0x32;

//=============================================
我需要将 4各字节分别组合起来成32bit,4各字节这个程序在keil arm ok,用在stvd+cosmic 如何可以让转换正常

    a =0x33;
    b=0x20;
   c=0x05;
    d=0x32;
   
   tmp=(u16)   (a<<8)+b;
    tmp1=(u16) (c<<8)+d;
   result=(tmp<<16) | tmp1;








友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
jyrpxj
1楼-- · 2019-12-12 23:11
cnt=0x33200532L;  加个L
jxchen
2楼-- · 2019-12-13 04:21

typedef  unsigned long  u32;
typedef  unsigned char  u16;
typedef  unsigned char  u8;



#warning cpstm8 ..ds1302.c:702(44) truncating assignment
#warning cpstm8 ..ds1302.c:703(44) truncating assignment
#warning cpstm8 ..ds1302.c:704(43) truncating assignment
#warning cpstm8 ..ds1302.c:705(47) truncating assignment
     
              出现上述警告,使用cosmic +stvd

进入调适 ,查看变量 不是我要的,但在 keil arm compiler ok!!

u8  a,b,c,d;
u8   dat_arr [4];
u32 volatile tmp;
u32  cnt=0x3320532;
               
      
dat_arr [0]=(u8)((u32)cnt>>(u32)24)
dat_arr [0]=(u8)((u32)cnt>>(u32)24)
dat_arr [0]=(u8)((u32)cnt>>(u32)24)
dat_arr [0]=(u8)((u32)cnt>>(u32)24)

重新build 得到 dat_arr [0]=0x03;   dat_arr [1]=0x32;  dat_arr [2]=0x05;  dat_arr [3]=0x32;


//=============================================
我需要将 4各字节分别组合起来成32bit,4各字节这个程序在keil arm ok,用在stvd+cosmic 如何可以让转换正常

    a =0x03;
    b=0x20;
   c=0x05;
    d=0x32;

      tmp= (u32) a [0];
      tmp= (u32) tmp<<8;
      tmp+=(u32) b[1];
      tmp= (u32) tmp<<8;
      tmp+=(u32)c[2];
      tmp= (u32) tmp<<8;   
      tmp+=(u32) d[3]

眼花导致问题产生,重新修改程序已验证ok

一周热门 更多>