DSP

ccs中的数据类型强制转换问题

2019-07-13 11:33发布

          下面是我的一段LED显示的代码,要求为显示数码管共8个,显示浮点型数据前五个是整数部分,后三个显示小数部分,因为考虑是8个数码管,用int型数据有溢出,故选用long型数据,程序开始为: void LED(float ttime)
{
long int t,p;
void Led_init(void);
delay10ms(10);
ttime=ttime*1000;               // line 241t=ttime/10000000;
p=ttime%10000000;             //line 244Write7279(DECODE1,t);
t=p/1000000;
p=p%1000000;
Write7279(DECODE1+1,t);
delay10ms(10);
t=p/100000;
p=p%100000;
Write7279(DECODE1+2,t);
delay10ms(10);
t=p/10000;
p=p%10000;
Write7279(DECODE1+3,t);
delay10ms(10);
t=p/1000;
p=p%1000;
Write7279(DECODE1+4,t|0x80);
delay10ms(10);
t=p/100;
p=p%100;
Write7279(DECODE1+5,t);
delay10ms(10);
t=p/10;
p=p%10;
Write7279(DECODE1+6,t);
delay10ms(10);
t=p;
Write7279(DECODE1+7,t);
delay10ms(10);
}  编译后有一处错误,错误为:line 244: error: expression must have integral type于是我强制转换ttime在241行,用的是(long)ttime=ttime*1000;结果不可以。花了我几小时,查谭浩强的书,上网找答案,最后在一个qq群有个好心的哥们给解决了:下面是我们的qq对话:巴克 9:31:59 
你那个是数据类型不对吧。
Will 9:32:12 
是啊,但我找不到原因
Will 9:32:18 
用了long int
Will 9:32:31 
是32位了应该不会溢出
巴克 9:32:43 
这个你得强制装换下就好啦
Will 9:33:20 
强制转换哪一个
Will 9:33:30 
ttime吗
巴克 9:33:35 

(long)ttime = ttime*1000
Will 9:33:44 
我试过了
Will 9:34:04 
不可以
巴克 9:34:25 
那你转换t、p呢?
Will 9:34:45 
expression has no effect
巴克 9:35:00 
t=(long)ttime/10000000;

巴克 9:35:28 
这样试过没?

Will 9:35:36 
我试一下
巴克 9:36:11 
直接转换这个就可以啦,上面那个ttime不用转换
Will 9:36:22 
成功了
Will 9:36:29 
这样可以
Will 9:36:47 
奇怪,为什么前面的转化不可以呢
巴克 9:38:37 
前面那个如果你再设置一个long型变量。
比如 ss=(long)ttime*1000;
这样也可以。
巴克 9:39:12 
t = ss/10000000;
.
.
.
.
Will 9:39:29 
恩,我了解了,谢了
Will 9:39:40 
困扰我几个小时,这个小问题
巴克 9:41:13 
一般语法和数据类型的问题比较好找。只要你仔细点儿。
巴克 9:43:05 
数码管的小数点完全可以不用float型。运算量太大。用long型完全可以代替。小数点儿你可以最后弄个位置变量。完后需要在哪里加就直接给数就好啦。祝你成功!
Will 9:45:45 
好的,谢谢
  后来就在243和244行ttime前加了(long)进行强制转换就可以了,编译后就没有错误了。非常感谢这个叫巴克的哥们,感谢这些无私的answer man。