trac#29: Cleanup timer on demo exit
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Sun, 10 Aug 2008 13:38:02 +0000 (13:38 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Sun, 10 Aug 2008 13:38:02 +0000 (13:38 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1598 38d2e660-2303-0410-9eaa-f027e97ec537

app/demo/demo.c
bertos/drv/timer.h
bertos/emul/timer_qt.c

index 2853f01a16b50c46416fb23137dee761af15963d..ed64a12d404f78ac6ef3e2703955d8da9c5e18fc 100644 (file)
@@ -302,6 +302,7 @@ int main(int argc, char *argv[])
 
        menu_handle(&main_menu);
 
+       timer_cleanup();
        emul_cleanup();
        return 0;
 }
index f251ff82e697c0645db73962850a84a73922e2fb..a71dfb68a852e5dd2eaabec288347299472b2849 100644 (file)
@@ -178,13 +178,15 @@ INLINE utime_t hptime_to_us(hptime_t hpticks)
 #endif /* TIMER_HW_HPTICKS_PER_SEC < 100000UL */
 }
 
-
-void timer_init(void);
 void timer_delayTicks(ticks_t delay);
 INLINE void timer_delay(mtime_t delay)
 {
        timer_delayTicks(ms_to_ticks(delay));
 }
+
+void timer_init(void);
+void timer_cleanup(void);
+
 int timer_testSetup(void);
 int timer_testRun(void);
 int timer_testTearDown(void);
index 204b22dc40e2e4796da19a15ec325af1713e14a1..7c2a0c34d23cd9345c6b11a11b633f1ac551c878 100644 (file)
@@ -88,12 +88,23 @@ public:
                system_time.start();
 
                // Activate timer interrupt
-               timer.connect(&timer, SIGNAL(timeout()), this, SLOT(timerInterrupt()));
+               connect(&timer, SIGNAL(timeout()), SLOT(timerInterrupt()));
                timer.start(1000 / TIMER_TICKS_PER_SEC);
 
                initialized = true;
        }
 
+       void cleanup()
+       {
+               // Timer cleaned twice?
+               ASSERT(initialized);
+
+               timer.stop();
+               timer.disconnect();
+
+               initialized = false;
+       }
+
        /// Return current time in high-precision format.
        hptime_t hpread()
        {
@@ -116,10 +127,14 @@ public slots:
 /// HW dependent timer initialization.
 static void timer_hw_init(void)
 {
-       // Kick EmulTimer initialization
        EmulTimer::instance().init();
 }
 
+static void timer_hw_cleanup(void)
+{
+       EmulTimer::instance().cleanup();
+}
+
 INLINE hptime_t timer_hw_hpread(void)
 {
        return EmulTimer::instance().hpread();