打印

单片机编程求帮助

[复制链接]
1626|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cshij2009|  楼主 | 2012-7-28 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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

楼主是不是写错了。如等号后面的第一个值其实是一个变量!

使用特权

评论回复
5
ayb_ice| | 2012-7-30 11:08 | 只看该作者
如果是运算花费时间较长,可以把能算的数先算好,再去和变量做乘法。要知道,任何浮点运算都是单片机的软肋,能回避尽量回避。如果用IAR编译器还好点,如果是KEIL、GCC之类的编译器,代码冗长,效率低下,慢是必然的 ...
dqyubsh 发表于 2012-7-28 16:20


IAR还好是何道理,就算IAR的效率高点,那也应该是稍强点,不可能成倍的强吧

使用特权

评论回复
6
shell.albert| | 2012-7-30 11:12 | 只看该作者
使用移位来处理吧。

使用特权

评论回复
7
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;

使用特权

评论回复
8
misra| | 2012-7-30 11:35 | 只看该作者
我担心  是溢出啥的, 就是程序错了。而不是说 运行速度太慢。
现在的单片机 一般速度还行。

如果真是速度问题,那就看看汇编是啥?  换个形式写 看哪个能让汇编短点

使用特权

评论回复
9
yiucing| | 2012-7-30 11:54 | 只看该作者
数值都知道了
就不需要程序来计算了
自己算就行了

使用特权

评论回复
10
mcustudypeace| | 2012-7-30 12:49 | 只看该作者
直接赋值,单片机很不擅长浮点运算。

使用特权

评论回复
11
ayb_ice| | 2012-7-30 13:31 | 只看该作者
"V =0.0002442*3.3*1540;"

这条语句,是个直接赋值语句,编译器直接计算出来了,不存在效率的问题

使用特权

评论回复
12
fjzzclc| | 2012-7-30 13:42 | 只看该作者
学习了

使用特权

评论回复
13
sinonion| | 2012-7-30 14:17 | 只看该作者
比较卡是什么意思?

使用特权

评论回复
14
szxy06dq| | 2012-7-31 10:54 | 只看该作者
没弄明白
V =0.0002442*3.3*1540;
为什么不直接算出来再赋值,而且单片机好像不太擅长算小数

使用特权

评论回复
15
悠然科技| | 2012-8-1 09:15 | 只看该作者
有些单片机没有硬件乘法器,再加上小数,太难为了

使用特权

评论回复
16
qiujiahongde| | 2012-8-3 08:19 | 只看该作者
是什么编译器?一般编译器遇到常量相乘都会自动弄成常量的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

73

帖子

0

粉丝