Merge from kseries.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 6 Feb 2008 15:25:01 +0000 (15:25 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 6 Feb 2008 15:25:01 +0000 (15:25 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1094 38d2e660-2303-0410-9eaa-f027e97ec537

mware/mean.h [new file with mode: 0644]

diff --git a/mware/mean.h b/mware/mean.h
new file mode 100644 (file)
index 0000000..893241e
--- /dev/null
@@ -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)
+