STM32
直播中

杜喜喜

7年用户 1492经验值
私信 关注
[问答]

STM32CubeIDE printf浮点数,浮点数丢失数值的原因?

1、芯片:STM32F103C8T62、环境:STM32CubeIDE3、问题:printf浮点数,浮点数数值丢失如 float A=25.6666;float B=24.7777;实际打印出来:第一种情况:A=2.0000;B=0.0000;第二种情况:A=-2.0000; B=-26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192.000000偶尔会出现以上情况,除此之外正常打印浮点数。4、已开启STM32CubeIDE打印浮点数,也加了Flag。打印整数不会出现问题尝试double A;double B;也会出现上述问题以下是代码
void HAL_tiM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
double Printf_T_Set,Printf_T_Act;
Printf_T_Set = T_Set;
Printf_T_Act = T_Act;
if(htim->Instance == htim2.Instance)
{
if(printSoftwareVersion==1){    printSoftwareVersion=0;    printf("Software Version: M01_40mA_V03 rn");}if(printEnabled==1){//          printf("T-Set:%.4f rn",Printf_T_Set);
//          printf("T-Act:%.4f rn",Printf_T_Act);
    printf("T-Set:%lf rn",Printf_T_Set);    printf("T-Act:%lf rn",Printf_T_Act);}}}
ifdef GNUC

define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

else

define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

endif

PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit( huart1,(uint8_t *) ch,1,0xFFFF);//阻塞方式打印,串口1
return ch;
}



回帖(1)

1653339509.516700

2024-6-3 16:50:13
在使用STM32CubeIDE进行浮点数打印时,可能会遇到浮点数数值丢失的问题。这种情况可能是由以下几个原因导致的:

1. **浮点数精度问题**:浮点数在计算机中是以二进制形式表示的,这可能导致某些十进制小数无法精确表示。当这些无法精确表示的浮点数被转换为字符串时,可能会出现精度丢失的情况。

2. **缓冲区溢出**:如果printf函数的缓冲区大小不足以容纳要打印的浮点数字符串,可能会导致部分字符被截断,从而丢失数值。

3. **浮点数异常**:在某些情况下,浮点数可能会遇到异常情况,如除以零、溢出或下溢等。这可能导致浮点数的值变为无穷大或NaN(Not a Number),从而导致打印结果异常。

4. **编译器优化**:编译器可能会对代码进行优化,以提高性能。在某些情况下,这种优化可能会导致浮点数的精度降低或丢失。

为了解决这个问题,你可以尝试以下方法:

1. **使用更高精度的浮点类型**:尝试使用`double`类型代替`float`类型,因为`double`类型的精度更高。

2. **调整printf函数的格式化字符串**:确保格式化字符串能够正确地表示浮点数的精度。例如,使用`%f`代替`%lf`,或者使用`%.3f`来限制小数点后的位数。

3. **检查缓冲区大小**:确保printf函数的缓冲区足够大,以容纳要打印的浮点数字符串。

4. **禁用编译器优化**:在某些情况下,禁用编译器优化可能会解决浮点数丢失的问题。你可以尝试在编译器设置中禁用优化选项。

5. **使用第三方库**:如果问题仍然存在,你可以考虑使用第三方库,如`printf`库,来替代STM32CubeIDE自带的printf函数。

6. **检查硬件问题**:确保STM32F103C8T6芯片和相关硬件没有故障,因为硬件问题也可能导致浮点数丢失。

通过尝试以上方法,你应该能够找到导致浮点数丢失的原因,并采取相应的措施来解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分