From: batt Date: Wed, 6 Feb 2008 15:25:01 +0000 (+0000) Subject: Merge from kseries. X-Git-Tag: 1.0.0~158 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=f1afe0bce11f8d2a5b739fdfb5e1a02d3dcd7d0a;hp=95653ebdc7081ad0c989e971fe4cab9bc8d1f945;p=bertos.git Merge from kseries. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1094 38d2e660-2303-0410-9eaa-f027e97ec537 --- diff --git a/mware/mean.h b/mware/mean.h new file mode 100644 index 00000000..893241e2 --- /dev/null +++ b/mware/mean.h @@ -0,0 +1,41 @@ +#warning revise me! + + +/** + * DECLARE_SMEAN(temperature, uint8_t, uint16_t); + * for (i = 0; i < TEMP_MEANS; ++i) + * SMEAN_ADD(temperature, adc_get(), TEMP_MEANS); + * printf("mean temperature = %d\n", SMEAN_GET(temperature)); + */ + +/** + * Instantiate a mean instance + */ +#define DECLARE_SMEAN(name, Type, SumType) \ + struct { \ + SumType sum; \ + Type result; \ + int count; \ + } name = { 0, 0, 0 } + +/** + * Insert a new sample into the mean. + * + * \note \a mean and \a max_samples are evaluated multiple times + */ +#define SMEAN_ADD(mean, sample, max_samples) \ + do { \ + (mean).sum += (sample); \ + if ((mean).count++ >= (max_samples)) \ + { \ + (mean).result = (mean).sum / (max_samples); \ + (mean).sum = 0; \ + (mean).count = 0; \ + } \ + } while (0) + +/** + * Return current mean value. + */ +#define SMEAN_GET(mean) ((mean).result) +