完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
由于我后面的课题需要涉及较多的浮点运算,只熟悉f103,它不带FPU,所以软件浮点算法就显得很重要了。这几天在做些小研究和测试。
今天又仔细研读了谭浩强的C语言书的数据类型章节,上面有说到c编译系统总将float类型转换成double类型来进行浮点运算,然而一般应用中7位有效数字的占32位的float类型已基本满足需求,若转为16位有效数字64位double类型岂不是没什么必要?速度岂不是会降低? 今天将原子哥的内部温度传感器实验的浮点运算的代码作了个小小的改动,却是大大的改善,结果如下: 温度计算公式原代码为: temp=(1.43-temp)/0.0043+25; // 这句产生的代码量为1584字节 改为单精度: temp=(1.43f-temp)/0.0043f+25; //这句产生的代码量仅为40字节! 代码量减为原来的1/40,单从这个角度来看的话意味着计算速度有接近40倍的提升!!!具体速度未测试,但数十倍的提升应该有的。 哦,尼玛!太兴奋了! 可能有些同学还不知道1.43f的用法,c语言书中说了这是将浮点常量指定为单精度,若不加后缀f,将作双精度来处理。 速度能提升这么多,我想部分原因是因为stm32是32位的MCU,32位及其以下的数据处理时间差别不大,但对于大于32位的64位double类型肯定慢很多了~ 欢迎验证~~~ 呵呵,不错,楼主一定收获很大吧,这种用法我都用了几年了,其实,C语言里面数据处理很重要的,但也是C语言基础,其实不仅仅是这些,还有很多细要注意的,我也分享一下曾经写过的一个函数,里面就有这样的方法: // ------------------------------------------------------------------------ // // void calcPTMS5541(float *pressure, float *temperature,u32 *p0, u32 *p1) { float dt, off, sens; *p0 = *p0 & 0xFFFF; **** = **** & 0xFFFF; dt = -10000.0f + **** - (8.0f * (*(p1+8))); off = 10000.0f + (*(p1+5)) + ( ( ( *(p1+7)-250.0f) * dt ) / 4096.0f); sens = 3000.0f + (*(p1+4) / 2.0f) + ( ( ( *(p1+6)+200.0f) * dt ) / 8192.0f); if(pressure!=NULL) *pressure = 1000.0f + (( sens * (*p0- off)) / 4096.0f); if(temperature!=NULL) { if(dt<0.0f) { dt=dt-(dt/128*dt/128)/2; } else { dt=dt-(dt/128*dt/128)/8; } *temperature = ( 200.0f + (( dt * ( *(p1+9)+100.0f) ) / 2048.0f)) / 10.0f; } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1848浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
611浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
504浏览 3评论
508浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
489浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 17:57 , Processed in 0.614435 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号