This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] F28377D-SEP:在 F28379D 上打印浮点值(使用%f 时程序挂起)

Guru**** 2826195 points

Other Parts Discussed in Thread: ADS8638

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1602122/f28377d-sep-issue-printing-floating-point-values-on-f28379d-program-hangs-when-using-f

器件型号: F28377D-SEP
主题中讨论的其他器件: ADS8638

您好、

我当前正在使用 TI F28379D 与连接的 PoE 电路板 ADS8638 ADC
我能够正确读取 ADC 数据并进行打印 整数值 使用。 uart_printf

不过、在我修改要使用的代码时 浮点计算 并使用打印值 %f格式说明符 和程序 卡住并停止执行

工作代码(基于整数–正常工作)

void ads8638_raw_to_voltage (uint16_t raw)

  uint8_t channel =(原始>> 12)& 0x07;
  uint16_t ADC_RAW = RAW 和 0x0FFF;

  int32_t MV_AT_ADC_PIN = 0;
  int32_t final_hw_voltage = 0;

  const float HW_GAIN_FACTOR = 5.0f;

  IF(通道== 2 ||通道=3)
  {
    int16_t SIGNED_val;

    UART_printf(“CH%u【双极】原始:0x%03x |“、通道、ADC_RAW);

    IF (ADC_RAW 和 0x800)
    {
      signed _val =(int16_t)(ADC_RAW | 0xF000);
      UART_printf(“Sign:NEG |“);
    }
    暴露
    {
      signed val =(int16_t) ADC_RAW;
      UART_printf(“Sign:POS |“);
    }

    MV_AT_ADC_pin =((int32_t) signed _val * 10000)/2048;
    final_hw_voltage =(int32_t)((float) MV_AT_ADC_pin * HW_GAIN_FACTOR);

    UART_printf(“Pin_mV:%ld | HW_Voltage:%ld mV\r\n“、
          MV_AT_ADC_pin、final_HW_VOLTAGE);
  }
  暴露
  {
    MV_AT_ADC_pin =((int32_t) ADC_RAW * 10000)/ 4095;
    UART_printf(“CH%u【单极性】原始:0x%03x | mV:%ld\r\n“、
          通道、ADC_RAW、MV_AT_ADC_PIN);
  }
}
RX = 0x3000
CH3【双极】原始值:0x000 |符号:POS | PIN_mV:0 | HW_Voltage:0mV
RX = 0x4000
CH4【单极性】原始:0x000 | mV:0
RX = 0x5000
通道 5【单极性】原始值:0x000 | mV:0
RX = 0x6CC7
通道 6【单极性】原始值:0xCC7 | mV:7987
RX = 0x7089
CH7【单极】原始值:0x089 | mV:334
RX = 0x0C0B
CH0【单极】原始值:0xC0B | mV:7528
RX = 0x1BCC
CH1【单极性】原始值:0xBCC | mV:7374
RX = 0x2000
CH2【双极性】原始:0x000 |符号:POS | PIN_mV:0 | HW_Voltage:0mV

有问题的代码(浮点–程序被卡住

void ads8638_raw_to_voltage (uint16_t raw)

  uint8_t channel =(原始>> 12)& 0x07;
  uint16_t ADC_RAW = RAW 和 0x0FFF;

  悬空 float_MV_pin = 0.0f;
  悬空 float_hw_volts = 0.0f;

  const float HW_GAIN_FACTOR = 10.0f;

  IF(通道== 2 ||通道=3)
  {
    int16_t SIGNED_val;

    IF (ADC_RAW 和 0x800)
      signed _val =(int16_t)(ADC_RAW | 0xF000);
    暴露
      signed val =(int16_t) ADC_RAW;

    float_MV_pin =((float) signed _val * 10000.0f)/ 2048.0f;
    float_hw_volts =(float_MV_pin * HW_GAIN_FACTOR)/1000.0f;

    UART_printf(“CH%u【双极】原始:0x%03x |引脚:%.2f mV |硬件:%.3f V\r\n“、
          通道、ADC_RAW、float_MV_pin、float_hw_volts);
  }
  暴露
  {
    float_hw_volts =((float) ADC_raw * 10.0f)/4095.0f;
    UART_printf(“CH%u【单极性】原始:0x%03x | HW:%.3f V\r\n“、
          通道、ADC_RAW、float_hw_volts);
  }
}

请指导我解决问题