From 5aaac70113a23a156be03a22f1e38987f820a972 Mon Sep 17 00:00:00 2001
From: Terraneo Federico <fede.tft@miosix.org>
Date: Thu, 9 Jun 2016 17:41:45 +0200
Subject: [PATCH] With the new high resolution timer, the tick is now
 incremented also when interrupts are enabled. Fixing some tests in the
 testsuite that relied on the old behaviour

---
 miosix/_tools/testsuite/testsuite.cpp | 35 ++++++++++++++++++---------
 miosix/kernel/kernel.cpp              |  2 +-
 2 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/miosix/_tools/testsuite/testsuite.cpp b/miosix/_tools/testsuite/testsuite.cpp
index d53486d0..061470b5 100644
--- a/miosix/_tools/testsuite/testsuite.cpp
+++ b/miosix/_tools/testsuite/testsuite.cpp
@@ -961,7 +961,7 @@ static void test_4()
     for(int i=0;i<4;i++)
     {
         delayMs(100);
-        if((t4_v1==true)||(tick!=getTick()))
+        if(t4_v1)
         {
             enableInterrupts();//
             fail("disableInterrupts");
@@ -983,7 +983,7 @@ static void test_4()
     for(int i=0;i<4;i++)
     {
         delayMs(100);
-        if((t4_v1==true)||(tick!=getTick()))
+        if(t4_v1)
         {
             fastEnableInterrupts();//
             fail("disableInterrupts");
@@ -1900,8 +1900,23 @@ isKernelRunning()
 areInterruptsEnabled()
 */
 
+static volatile bool t9_v1;
+
+void t9_p1(void*)
+{
+    for(;;)
+    {
+        if(Thread::testTerminate()) break;
+        t9_v1=true;
+        #ifdef SCHED_TYPE_EDF
+        Thread::sleep(1);
+        #endif //SCHED_TYPE_EDF
+    }
+}
+
 static void test_9()
 {
+    Thread *p=Thread::create(t9_p1,STACK_SMALL,0,NULL,Thread::JOINABLE);
     test_name("isKernelRunning and save/restore interrupts");
     //Testing kernel_running with nested pause_kernel()
     if(isKernelRunning()==false) fail("isKernelRunning() (1)");
@@ -1927,12 +1942,11 @@ static void test_9()
     restartKernel();//1
     if(isKernelRunning()==false) fail("isKernelRunning() (5)");
     //Testing nesting of disableInterrupts()
-    long long i;
     if(areInterruptsEnabled()==false) fail("areInterruptsEnabled() (1)");
     disableInterrupts();//Now interrupts should be disabled
-    i=getTick();
+    t9_v1=false;
     delayMs(100);
-    if(i!=getTick())
+    if(t9_v1)
     {
         enableInterrupts();
         fail("disableInterrups() nesting (1)");
@@ -1943,9 +1957,8 @@ static void test_9()
         fail("areInterruptsEnabled() (2)");
     }
     disableInterrupts();//Interrupts already disabled
-    i=getTick();
     delayMs(100);
-    if(i!=getTick())
+    if(t9_v1)
     {
         enableInterrupts();
         fail("disableInterrups() nesting (2)");
@@ -1956,9 +1969,8 @@ static void test_9()
         fail("areInterruptsEnabled() (3)");
     }
     enableInterrupts();//Now interrupts should remain disabled
-    i=getTick();
     delayMs(100);
-    if(i!=getTick())
+    if(t9_v1)
     {
         enableInterrupts();
         fail("enableInterrupts() nesting (1)");
@@ -1969,14 +1981,15 @@ static void test_9()
         fail("areInterruptsEnabled() (4)");
     }
     enableInterrupts();//Now interrupts should be enabled
-    i=getTick();
     delayMs(100);
-    if(i==getTick())
+    if(t9_v1==false)
     {
         enableInterrupts();
         fail("enableInterrupts() nesting (2)");
     }
     if(areInterruptsEnabled()==false) fail("areInterruptsEnabled() (5)");
+    p->terminate();
+    p->join();
     pass();
 }
 
diff --git a/miosix/kernel/kernel.cpp b/miosix/kernel/kernel.cpp
index 6a940657..139f97d5 100644
--- a/miosix/kernel/kernel.cpp
+++ b/miosix/kernel/kernel.cpp
@@ -254,7 +254,7 @@ long long getTick()
         if(a==b) return a;
     }
     #else //USE_CSTIMER
-    return timer->getCurrentTick();
+    return timer->getCurrentTick()/CSQUANTUM;
     #endif //USE_CSTIMER
 }
 
-- 
GitLab