drivers: sensor: stm32_vbat: get rid of floating point computation
Instead of using floating point operations to compute the vbat voltage, it is possible to do the computation using 32-bit variables by reordering operations and using the sensor_value_from_milli() function. On a STM32G0, this saves 140 bytes of flash, excluding the FP library needed on a FPU less MCU. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
859cc2f1fe
commit
99804c77c4
1 changed files with 4 additions and 6 deletions
|
@ -77,18 +77,16 @@ static int stm32_vbat_channel_get(const struct device *dev, enum sensor_channel
|
||||||
{
|
{
|
||||||
struct stm32_vbat_data *data = dev->data;
|
struct stm32_vbat_data *data = dev->data;
|
||||||
const struct stm32_vbat_config *cfg = dev->config;
|
const struct stm32_vbat_config *cfg = dev->config;
|
||||||
float voltage;
|
int32_t voltage;
|
||||||
|
|
||||||
if (chan != SENSOR_CHAN_VOLTAGE) {
|
if (chan != SENSOR_CHAN_VOLTAGE) {
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sensor value in millivolts */
|
/* Sensor value in millivolts considering the vbat input through a resistor bridge */
|
||||||
voltage = data->raw * adc_ref_internal(data->adc) / 0x0FFF;
|
voltage = data->raw * adc_ref_internal(data->adc) * cfg->ratio / 0x0FFF;
|
||||||
/* considering the vbat input through a resistor bridge */
|
|
||||||
voltage = voltage * cfg->ratio / 1000; /* value of SENSOR_CHAN_VOLTAGE in Volt */
|
|
||||||
|
|
||||||
return sensor_value_from_double(val, voltage);
|
return sensor_value_from_milli(val, voltage);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct sensor_driver_api stm32_vbat_driver_api = {
|
static const struct sensor_driver_api stm32_vbat_driver_api = {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue