在一些单片机中因为资源受限官方提供的SDK中通常不提供浮点类型数据的打印。如需浮点打印功能可以参考如下做法:
前提条件
- 串口通信正常
- printf 函数已经移植完成
操作方法
- 添加以下函数到工程,以下函数的作用为将一个float类型函数转换为一个字符串。
- 将转换完成的字符串通过
printf("%s"); 进行输出打印。
uint8_t *float2str(double num, int n)
{
static uint8_t num_str[13] = {
'\0'};
uint8_t len = 0;
uint8_t n_max = 0;
uint32_t i = 0;
for (i = 0; i < 13; i++)
num_str[i] = '\0';
if (num > 0)
{
num_str[0] = '+';
}
else if (num < 0)
{
num_str[0] = '-';
num = -num;
}
if ((int)(num / 100000) != 0)
{
len = 7;
n_max = 4;
}
else if ((int)(num / 10000) != 0)
{
len = 6;
n_max = 5;
}
else if ((int)(num / 1000) != 0)
{
len = 5;
n_max = 6;
}
else if ((int)(num / 100) != 0)
{
len = 4;
n_max = 7;
}
else if ((int)(num / 10) != 0)
{
len = 3;
n_max = 8;
}
else
{
len = 2;
n_max = 9;
}
if (n > n_max)
n = n_max;
len += n;
i = n;
while (i--)
num = (num * 10);
while (n--)
{
num_str[len--] = (int)num % 10 + 0x30;
num = num / 10;
}
num_str[len] = '.';
while (len--)
{
num_str[len] = (int)num % 10 + 0x30;
num = num / 10;
if (len == 1)
break;
}
return num_str;
}
|