单片机编程求帮助

[复制链接]
 楼主| cshij2009 发表于 2012-7-28 14:46 | 显示全部楼层 |阅读模式
我在程序中有下面一条语句,把值送显示程序,运行时感觉比较卡
long  V;
V =0.0002442*3.3*1540;
dqyubsh 发表于 2012-7-28 16:20 | 显示全部楼层
如果是运算花费时间较长,可以把能算的数先算好,再去和变量做乘法。要知道,任何浮点运算都是单片机的软肋,能回避尽量回避。如果用IAR编译器还好点,如果是KEIL、GCC之类的编译器,代码冗长,效率低下,慢是必然的。

一般先把固定数据算好,放大,再去乘以变量,整数×整数=长整数,最终显示和输出时再把结果等比例缩小,或者结果一直保存为长整数,不过在对应位置硬生生地填个小数点占位。
liang7143 发表于 2012-7-28 16:36 | 显示全部楼层
LZ查查程序吧
这二句代码,编译器优化以后,应该就只是一个赋值。
dlyt_test001 发表于 2012-7-30 10:42 | 显示全部楼层
LZ查查程序吧
这二句代码,编译器优化以后,应该就只是一个赋值。
liang7143 发表于 2012-7-28 16:36

楼主是不是写错了。如等号后面的第一个值其实是一个变量!
ayb_ice 发表于 2012-7-30 11:08 | 显示全部楼层
如果是运算花费时间较长,可以把能算的数先算好,再去和变量做乘法。要知道,任何浮点运算都是单片机的软肋,能回避尽量回避。如果用IAR编译器还好点,如果是KEIL、GCC之类的编译器,代码冗长,效率低下,慢是必然的 ...
dqyubsh 发表于 2012-7-28 16:20


IAR还好是何道理,就算IAR的效率高点,那也应该是稍强点,不可能成倍的强吧
shell.albert 发表于 2012-7-30 11:12 | 显示全部楼层
使用移位来处理吧。
misra 发表于 2012-7-30 11:33 | 显示全部楼层
楼主若是高人


我在程序中有下面一条语句,把值送显示程序,运行时感觉比较卡
long  V;
V =0.0002442*3.3*1540;

如果像我这样水平一般

就 UNSIGNED LONG X;
UNSIGNED LONG LONG LONG  Y;

X = 1540 * 33 /10;
Y = X * 2442 / 1000000;
misra 发表于 2012-7-30 11:35 | 显示全部楼层
我担心  是溢出啥的, 就是程序错了。而不是说 运行速度太慢。
现在的单片机 一般速度还行。

如果真是速度问题,那就看看汇编是啥?  换个形式写 看哪个能让汇编短点
yiucing 发表于 2012-7-30 11:54 | 显示全部楼层
数值都知道了
就不需要程序来计算了
自己算就行了
mcustudypeace 发表于 2012-7-30 12:49 | 显示全部楼层
直接赋值,单片机很不擅长浮点运算。
ayb_ice 发表于 2012-7-30 13:31 | 显示全部楼层
"V =0.0002442*3.3*1540;"

这条语句,是个直接赋值语句,编译器直接计算出来了,不存在效率的问题
fjzzclc 发表于 2012-7-30 13:42 | 显示全部楼层
学习了
sinonion 发表于 2012-7-30 14:17 | 显示全部楼层
比较卡是什么意思?
szxy06dq 发表于 2012-7-31 10:54 | 显示全部楼层
没弄明白
V =0.0002442*3.3*1540;
为什么不直接算出来再赋值,而且单片机好像不太擅长算小数
悠然科技 发表于 2012-8-1 09:15 | 显示全部楼层
有些单片机没有硬件乘法器,再加上小数,太难为了
qiujiahongde 发表于 2012-8-3 08:19 | 显示全部楼层
是什么编译器?一般编译器遇到常量相乘都会自动弄成常量的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

73

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部