stm32幂指数运算时的错误显示与解决方案

本文记录了我在stm32里面对一个整数进行适当的四则运算后,作为10的指数次幂进行幂指数运算时,遇到的问题,以及最终解决问题的方法。上传于此,用于记录,也为了给大家参考。

背景

因为要用到RSSI转距离(公式如下)
d = 1 0 ∣ R S S I ∣ − A 0 10 × n d=10^{\frac{|RSSI|-A_0}{10\times n}} d=1010×nRSSIA0
原有RSSI因为存在int型里面了,所以不能直接减去 A 0 A_0 A0后直接除以10n,而是要转成float或double。

问题

用代码将int转成double后:

juli=(double) distance[num];
juli=pow(10,((juli-30)/20))*10;
distance[num]=(int)juli;  //距离,单位是分米

用以下代码进行显示:

printf("\r\ndistance为:(单位是分米)\r\n\r\n");
			{
				USART_SendData(USART1, distance[num]/100+0x30);//向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
				USART_RX_STA=0;
				USART_SendData(USART1, distance[num]/10%10+0x30);//向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
				USART_RX_STA=0;
				USART_SendData(USART1, distance[num]%10+0x30);//向串口1发送数据
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
				USART_RX_STA=0;
			}

十进制按照百位、十位、个位分别存储,并由串口输出,但是用串口查看,发现计算结果是乱码:

在这里插入图片描述
手动计算一下,RSSI为71时,按照公式 d = 10 × 1 0 ∣ R S S I ∣ − 30 10 × 2 d=10\times10^{\frac{|RSSI|-30}{10\times 2}} d=10×1010×2RSSI30计算的距离应该是1122分米,也就是一百多米,因为没有考虑到会出现四位数,所以最高位出现乱码。

解决方法

既然位数不对,那么如果添加到四位数显示,可以吗?
也不行,调成四位数,也就是加上模1000的结果,还是计算错误。其实最大的问题是int位数不够,要把它改成长整型。如下:

juli=(double) distance[num];
juli=pow(10,((juli-30)/20))*10;
distance[num]=(long)juli;  //计算距离,单位是分米。这里long为juli转成long型
//同理,在开头定义变量类型时,distance的定义也要从int改成long。

测试一下,成功
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值