From c373a3557886edba0e9c5b6ef7735ca03a1453ba Mon Sep 17 00:00:00 2001
From: Andrea Milluzzo <andrea.milluzzo@skywarder.eu>
Date: Wed, 1 Apr 2020 21:42:29 +0200
Subject: [PATCH] [IMU] lsm9ds1 added logger at "test-lsm9ds1-fifo" due to lack
 of RAM: reduced stack dimension - SkywardStack.h reduced logger buffers
 dimension - logger.h

---
 sbs.conf                                |  4 +-
 src/shared/diagnostic/SkywardStack.h    |  2 +-
 src/shared/logger/Logger.h              | 11 +++--
 src/tests/drivers/test-lsm9ds1-fifo.cpp | 59 ++++++++-----------------
 4 files changed, 26 insertions(+), 50 deletions(-)

diff --git a/sbs.conf b/sbs.conf
index dda21f77f..6fb11ea4a 100644
--- a/sbs.conf
+++ b/sbs.conf
@@ -517,7 +517,7 @@ Main:       test-rls
 Type:       test
 BoardId:    stm32f407vg_skyward_tortellino
 BinName:    test-lsm9ds1-fifo
-Include:    %shared %spi
+Include:    %shared %spi %logger
 Defines:    -DDEBUG
 Main:       drivers/test-lsm9ds1-fifo
 
@@ -525,6 +525,6 @@ Main:       drivers/test-lsm9ds1-fifo
 Type:       test
 BoardId:    stm32f407vg_skyward_tortellino
 BinName:    test-lis3dsh
-Include:    %shared %spi
+Include:    %shared %spi 
 Defines:
 Main:       drivers/test-lis3dsh
diff --git a/src/shared/diagnostic/SkywardStack.h b/src/shared/diagnostic/SkywardStack.h
index 11134a161..fa6205dc8 100644
--- a/src/shared/diagnostic/SkywardStack.h
+++ b/src/shared/diagnostic/SkywardStack.h
@@ -25,7 +25,7 @@
 
 #include <algorithm>
 
-static const unsigned int STACK_MIN_FOR_SKYWARD = 16*1024;
+static const unsigned int STACK_MIN_FOR_SKYWARD = 4*1024;
 
 inline unsigned int skywardStack(unsigned int stack)
 {
diff --git a/src/shared/logger/Logger.h b/src/shared/logger/Logger.h
index 0794e0fa6..cfbcea6ed 100644
--- a/src/shared/logger/Logger.h
+++ b/src/shared/logger/Logger.h
@@ -174,12 +174,11 @@ private:
         log(s);
     }
 
-    static const unsigned int filenameMaxRetry =
-        100;                                         ///< Limit on new filename
-    static const unsigned int maxRecordSize = 256;   ///< Limit on logged data
-    static const unsigned int numRecords    = 1024;  ///< Size of record queues
-    static const unsigned int bufferSize = 64 * 1024;  ///< Size of each buffer
-    static const unsigned int numBuffers = 8;          ///< Number of buffers
+    static const unsigned int filenameMaxRetry = 100; ///< Limit on new filename
+    static const unsigned int maxRecordSize = 64;   ///< Limit on logged data
+    static const unsigned int numRecords    = 256;  ///< Size of record queues
+    static const unsigned int bufferSize = 16 * 256;  ///< Size of each buffer
+    static const unsigned int numBuffers = 4;          ///< Number of buffers
 
     /**
      * A record is a single serialized logged class. Records are used to
diff --git a/src/tests/drivers/test-lsm9ds1-fifo.cpp b/src/tests/drivers/test-lsm9ds1-fifo.cpp
index 48c1e4e71..96b420f88 100644
--- a/src/tests/drivers/test-lsm9ds1-fifo.cpp
+++ b/src/tests/drivers/test-lsm9ds1-fifo.cpp
@@ -26,6 +26,7 @@
 #include "drivers/HardwareTimer.h"
 #include "drivers/spi/SPIDriver.h"
 #include "sensors/LSM9DS1/LSM9DS1_AxelGyro.h"
+#include "diagnostic/CpuMeter.h"
 #include "logger/Logger.h"
 
 using namespace miosix;
@@ -64,6 +65,13 @@ volatile uint32_t delta;
 // LSM9DS1 obj
 LSM9DS1_XLG* lsm9ds1 = nullptr;
 
+//struct for the logger
+struct IMUSample
+{
+    lsm9ds1XLGSample sample;
+    int avgCPU;
+};
+
 // Interrupt handlers
 void __attribute__((naked)) EXTI13_IRQHandler()
 {
@@ -92,8 +100,6 @@ void __attribute__((used)) EXTI13_IRQHandlerImpl()
 void gpioConfig();
 void timer5Config();
 void EXTI1Config();
-void fakeLogger(lsm9ds1XLGSample sample); 
-void printLogger();
 
 int main()
 {
@@ -102,9 +108,10 @@ int main()
     uint32_t dt;
     uint64_t timestamp = 0;
 
+    Logger& logger = Logger::instance();
+    logger.start();
+
     gpioConfig();
-    Thread::sleep(5000);
-    return 0;
     timer5Config();
     EXTI1Config();
 
@@ -120,7 +127,6 @@ int main()
     //start sampling
     for (;;)
     {
-        //printf("%d\n", GpioINT1::value());
         if (flagSPIReadRequest && fifo_counter < FIFO_SAMPLES)
         {
             flagSPIReadRequest = false;
@@ -128,10 +134,12 @@ int main()
             lsm9ds1->onSimpleUpdate();
             for(int i=0 ; i < FIFO_WATERMARK; i++)
             {
-                lsm9ds1XLGSample sample = lsm9ds1->getLsm9ds1FIFO()[i];
+                IMUSample s; 
+                s.sample = lsm9ds1->getLsm9ds1FIFO()[i];
                 timestamp += dt; 
-                sample.timestamp = timestamp; 
-                fakeLogger(sample);
+                s.sample.timestamp = timestamp; 
+                s.avgCPU = averageCpuUtilization();
+                logger.log(s);
             }
             LED1.low();
             fifo_counter++;
@@ -143,7 +151,8 @@ int main()
         }
     }
 
-    printLogger();
+    logger.stop();
+
     LED1.low();
     LED2.low();
 
@@ -222,36 +231,4 @@ void EXTI1Config()  // PC13
     // Enable the interrupt in the interrupt controller
     NVIC_EnableIRQ(IRQn_Type::EXTI15_10_IRQn);
     NVIC_SetPriority(IRQn_Type::EXTI15_10_IRQn, 47);
-}
-
-uint16_t counter = 0;
-float   ax[FIFO_WATERMARK*FIFO_SAMPLES],
-        ay[FIFO_WATERMARK*FIFO_SAMPLES],
-        az[FIFO_WATERMARK*FIFO_SAMPLES],
-        gx[FIFO_WATERMARK*FIFO_SAMPLES],
-        gy[FIFO_WATERMARK*FIFO_SAMPLES],
-        gz[FIFO_WATERMARK*FIFO_SAMPLES];
-
-uint64_t t[FIFO_WATERMARK*FIFO_SAMPLES];
-
-void fakeLogger(lsm9ds1XLGSample sample)
-{
-    ax[counter] = sample.axelData.getX();
-    ay[counter] = sample.axelData.getY();
-    az[counter] = sample.axelData.getZ();
-    gx[counter] = sample.gyroData.getX();
-    gy[counter] = sample.gyroData.getY();
-    gz[counter] = sample.gyroData.getZ();
-    t[counter]  = sample.timestamp;
-    counter++;    
-}
-
-void printLogger()
-{
-    for(int i = 0; i < counter; i++)
-    {
-        printf("%lld>>%.3f,%.3f,%.3f,%.3f,%.3f,%.3f\n", t[i],ax[i],ay[i],az[i],
-                                                            gx[i],gy[i],gz[i]);
-                                                    
-    }
 }
\ No newline at end of file
-- 
GitLab