Skip to content

Reuse graph expressions #19

Description

@usbalbin

I would argue that this is less than ideal in a number of ways.

// 10k NTC with 10k pullup converted to degrees Celsius
let temp_metric = probe_plotter::make_metric!(
    TEMP: u16 = 0,
    "(1.0 / ((ln((10000 * (TEMP * 3.3 / 4095.0)) / (3.3 - (TEMP * 3.3 / 4095.0)) / 10000) / 4100) + 1.0 / (273.15 + 25))) - 273.15"
);

let other_temp_metric = probe_plotter::make_metric!(
    OTHER_TEMP: u16 = 0,
    "(1.0 / ((ln((10000 * (OTHER_TEMP * 3.3 / 4095.0)) / (3.3 - (OTHER_TEMP * 3.3 / 4095.0)) / 10000) / 4100) + 1.0 / (273.15 + 25))) - 273.15"
);
  • Hardcoded constants
  • Duplication of code
  • Lots of code

Is there any way to have const evaluated things end up in an elf, preferably without taking any real space in flash?

If not then plan B would be some sort of make_const.

make_const!(R_PULL_UP = "10000");
make_const!(VCC = "3.3");
make_const!(ADC_MAX = "2^12 - 1");
make_const!(NTC_BETA = "4100");
make_const!(NTC_R0 = "ZERO_CELCIUS_AS_KELVIN + 25");
make_const!(ZERO_CELCIUS_AS_KELVIN = "273.15");

let other_temp_metric = probe_plotter::make_metric!(
    TEMP: u16 = 0,
    "(1.0 / ((ln((R_PULL_UP * (TEMP * VCC / ADC_MAX)) / (VCC - (TEMP * VCC / ADC_MAX)) / NTC_R0) / NTC_BETA) + 1.0 / NTC_R0)) - ZERO_CELCIUS_AS_KELVIN"
);

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions