]> code.bitgloo.com Git - clyne/stmdsp.git/commitdiff
dynamic code time measurement
authorClyne Sullivan <clyne@bitgloo.com>
Sun, 22 May 2022 13:54:31 +0000 (09:54 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Sun, 22 May 2022 13:54:31 +0000 (09:54 -0400)
source/communication.cpp
source/conversion.cpp
source/conversion.hpp
source/error.hpp

index b5ee28e2985ed2e854afc3f4a9f59ced23913dc6..e85828bb8ce471607351863016dc0db78b919d14 100644 (file)
@@ -32,7 +32,7 @@ static void setBufferSize(unsigned char *);
 static void updateGenerator(unsigned char *);
 static void loadAlgorithm(unsigned char *);
 static void readStatus(unsigned char *);
-static void startConversionMeasure(unsigned char *);
+static void measureConversion(unsigned char *);
 static void startConversion(unsigned char *);
 static void stopConversion(unsigned char *);
 static void startGenerator(unsigned char *);
@@ -53,7 +53,7 @@ static const std::array<std::pair<char, void (*)(unsigned char *)>, 19> commandT
     {'D', updateGenerator},
     {'E', loadAlgorithm},
     {'I', readStatus},
-    {'M', startConversionMeasure},
+    {'M', measureConversion},
     {'R', startConversion},
     {'S', stopConversion},
     {'W', startGenerator},
@@ -159,12 +159,10 @@ void readStatus(unsigned char *)
     USBSerial::write(buf, sizeof(buf));
 }
 
-void startConversionMeasure(unsigned char *)
+void measureConversion(unsigned char *)
 {
-    if (EM.assert(run_status == RunStatus::Idle, Error::NotIdle)) {
-        run_status = RunStatus::Running;
-        ConversionManager::startMeasured();
-    }
+    if (EM.assert(run_status == RunStatus::Running, Error::NotRunning))
+        ConversionManager::startMeasurement();
 }
 
 void startConversion(unsigned char *)
@@ -177,7 +175,7 @@ void startConversion(unsigned char *)
 
 void stopConversion(unsigned char *)
 {
-    if (run_status == RunStatus::Running) {
+    if (EM.assert(run_status == RunStatus::Running, Error::NotRunning)) {
         ConversionManager::stop();
         run_status = RunStatus::Idle;
     }
index 6fdea0778c97d43ea58301bfce39cfb9a87f5927..56a689eb22a6616c2256c75ac7f1df84895cc9bf 100644 (file)
@@ -65,11 +65,9 @@ void ConversionManager::start()
     DAC::start(0, Samples::Out.data(), Samples::Out.size());
 }
 
-void ConversionManager::startMeasured()
+void ConversionManager::startMeasurement()
 {
-    Samples::Out.clear();
-    ADC::start(Samples::In.data(), Samples::In.size(), adcReadHandlerMeasure);
-    DAC::start(0, Samples::Out.data(), Samples::Out.size());
+    ADC::setOperation(adcReadHandlerMeasure);
 }
 
 void ConversionManager::stop()
@@ -157,12 +155,14 @@ void ConversionManager::threadRunner(void *)
                     asm("mov %0, sp" : "=r" (sp));
                     samples = entry(samples, size);
                     asm("mov sp, %0" :: "r" (sp));
+                    volatile auto testRead = *samples;
                 } else {
                     // Start execution timer:
                     asm("mov %0, sp; eor r0, r0; svc 2" : "=r" (sp));
                     samples = entry(samples, size);
                     // Stop execution timer:
                     asm("mov r0, #1; svc 2; mov sp, %0" :: "r" (sp));
+                    volatile auto testRead = *samples;
                 } 
             }
 
index a26dd199515bf033c25f69912ebf0d7014bbe177..ca0054a2d79d7473c1c16cb83f0be02c94a81599 100644 (file)
@@ -31,8 +31,8 @@ public:
 
     // Begins sample conversion.
     static void start();
-    // Begins conversion with execution time measured.
-    static void startMeasured();
+    // Prepare to measure execution time of next conversion.
+    static void startMeasurement();
     // Stops conversion.
     static void stop();
 
index 9bbbe2c02a4f2873f14b8b56e87965954ff09a32..c6a7f5c45f277e18448510fbdd4bd6403dd20b77 100644 (file)
@@ -22,7 +22,8 @@ enum class Error : char
     BadUserCodeLoad,
     BadUserCodeSize,
     NotIdle,
-    ConversionAborted
+    ConversionAborted,
+    NotRunning
 };
 
 class ErrorManager