typedef unsigned char uint8_t;
typedef struct { uint8_t dat; int temp; }Tempsave;
void Test_Transform_temp(void){ int temp; uint8_t dat1,dat2; uint8_t dat[10]; Tempsave tem; tem.dat=50; tem.temp=110; dat1=tem.dat; temp=tem.temp; sprintf(dat,"%d,%05d\n",dat1,temp);
//sprintf(dat,"%d,%05d\n",tem.dat,tem.temp);//j结果一样
// printf(dat);//电脑上输出正确 USART_SendStr("transform test: "); USART_SendStr(dat);//单片机输出就不对 }
这么一段代码,STVD编译的STM8L单片机中就是输出不对,为12800,25600,改变赋值,输出也改变。特意在电脑用软件编译运行了一下,没错啊,电脑上输出结果正确。又换了个单片机,用keil,运行也是这样。
debug 查看数据tem.dat=50,和tem.temp=110数据对,dat1=tem.dat; 这一步,dat1 是0,temp=tem.temp;后面的temp是138。就算直接将tem.dat 赋值到sprintf中,也错。以前用也没觉得有啥问题,突然出现这么个错误,我又去查了下结构体的使用,没错啊。
tem.dat=50,和tem.temp=110数据对,dat1=tem.dat; 这一步,dat1 是0,temp=tem.temp;后面的temp是138。就算直接将tem.dat 赋值到sprintf中,也错。以前用也没觉得有啥问题,突然出现这么个错误,我又去查了下结构体的使用,没错啊。
dat1=tem.dat; 这一步,dat1 是0,temp=tem.temp;后面的temp是138。就算直接将tem.dat 赋值到sprintf中,也错。以前用也没觉得有啥问题,突然出现这么个错误,我又去查了下结构体的使用,没错啊。
总感觉和正确结果就那么一道窗户纸的距离,但是找了半天,捅到的都是墙。求指点,谢谢。
你这个结构体没有定义结构体名称,至申明了一个结构体变量Tempsave,所以
它只能使用一次,不能再定义其他结构体,也即是说不能Tempsave tem;这样定义。
改正:
typedef struct Tempsave{ uint8_t dat; int temp;};
printf(dat); 这句输出对不?