benchmark: context switch testcase improvement.
authorarighi <arighi@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 19 May 2010 09:32:53 +0000 (09:32 +0000)
committerarighi <arighi@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 19 May 2010 09:32:53 +0000 (09:32 +0000)
Move LED_ON()/LED_OFF() just after sig_wait(). Since they represent a C
language barrier they basically disables optimizations around it,
causing time measurements to be more determistic.

Moreover, be sure to not start child processes before we set the right
priority.

git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3714 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/benchmark/context_switch.c

index a09a61461853157777267fead2660ef49f58f8b7..5ab77159d472cdc1b68db352e696c579d1d6314c 100644 (file)
@@ -68,12 +68,12 @@ static void NORETURN hp_process(void)
        while (1)
        {
                sig_wait(SIG_USER0);
-               #if CONFIG_USE_HP_TIMER
-                       end = timer_hw_hpread();
-               #endif
                #if CONFIG_USE_LED
                        LED_ON();
                #endif
+               #if CONFIG_USE_HP_TIMER
+                       end = timer_hw_hpread();
+               #endif
                sig_send(main_proc, SIG_USER0);
        }
 }
@@ -83,13 +83,13 @@ static void NORETURN lp_process(void)
        while (1)
        {
                sig_wait(SIG_USER0);
-               #if CONFIG_USE_HP_TIMER
-                       start = timer_hw_hpread();
-               #endif
                #if CONFIG_USE_LED
                        LED_ON();
                        LED_OFF();
                #endif
+               #if CONFIG_USE_HP_TIMER
+                       start = timer_hw_hpread();
+               #endif
                sig_send(hp_proc, SIG_USER0);
        }
 }
@@ -108,15 +108,18 @@ void NORETURN context_switch(void)
                LED_INIT();
        #endif
 
+       proc_forbid();
        hp_proc = proc_new(hp_process, NULL, PROC_STACK_SIZE, hp_stack);
        lp_proc = proc_new(lp_process, NULL, PROC_STACK_SIZE, lp_stack);
        main_proc = proc_current();
-
        proc_setPri(hp_proc, 2);
        proc_setPri(lp_proc, 1);
+       proc_permit();
 
        while (1)
        {
+               timer_delay(100);
+
                sig_send(lp_proc, SIG_USER0);
                sig_wait(SIG_USER0);
 
@@ -126,7 +129,5 @@ void NORETURN context_switch(void)
                                hptime_to_us((end - start)),
                                hptime_to_us((end - start) * 1000) % 1000);
                #endif
-               timer_delay(100);
        }
-
 }