eCos provides testing facility which can automaticky test your design for features which you turn on. Here page provides the test results.
*_install/tests
foldereCos Kernel Timings Notes: all times are in microseconds (.000001) unless otherwise stated Reading the hardware clock takes 32 'ticks' overhead ... this value will be factored out of all other measurements Clock interrupt took 122.96 microseconds (6148 raw clock ticks) Testing parameters: Clock samples: 32 Threads: 16 Thread switches: 128 Mutexes: 32 Mailboxes: 32 Semaphores: 32 Scheduler operations: 128 Timers: 32 Confidence Ave Min Max Var Ave Min Function ====== ====== ====== ====== ========== ======== 81.72 76.20 135.02 6.66 93% 93% Create thread 5.80 5.44 10.02 0.55 93% 87% Yield thread [all lower priority] 33.21 29.98 66.12 4.11 93% 93% Set priority 19.09 17.30 38.06 2.37 93% 93% Get priority 50.70 42.34 81.32 5.75 75% 43% Join exited thread 5.13 4.80 8.82 0.51 93% 87% Yield [no other] thread 27.74 26.20 41.78 1.75 93% 93% Cancel [running] thread 63.16 54.62 94.48 6.31 68% 50% Join [cancelled] thread 929.66 879.90 1156.46 63.53 81% 81% Create [high priority] thread 14.70 14.38 24.36 0.20 96% 50% Thread switch 1.58 1.42 6.54 0.31 96% 96% Init mutex 4.72 4.08 13.56 0.71 96% 75% Lock [unlocked] mutex 4.35 4.00 10.42 0.43 96% 71% Unlock [locked] mutex 5.02 4.58 13.80 0.56 96% 93% Trylock [unlocked] mutex 0.56 0.36 2.76 0.26 90% 65% Trylock [locked] mutex 0.79 0.66 4.22 0.24 93% 93% Destroy mutex 47.22 46.74 48.18 0.26 46% 28% Unlock/Lock mutex 0.64 0.52 4.22 0.22 96% 96% Init semaphore 4.49 4.02 11.78 0.47 53% 87% Post [0] semaphore 7.68 7.24 15.20 0.57 96% 87% Wait [1] semaphore 4.21 3.94 10.14 0.42 96% 87% Trywait [0] semaphore 3.81 3.66 7.18 0.23 96% 93% Trywait [1] semaphore 0.59 0.46 3.28 0.23 87% 87% Get value of semaphore 4.14 3.90 8.22 0.31 96% 87% Destroy semaphore 57.00 56.42 64.88 0.56 87% 87% Post/Wait semaphore 20.47 19.40 37.80 1.16 96% 90% Create timer 23.25 22.26 42.76 1.22 96% 96% Initialize timer to zero 260.92 259.44 279.06 1.29 84% 78% Initialize timer to 1.25 sec 28.50 27.60 45.60 1.09 96% 93% Disable timer 19.84 19.10 33.86 0.99 93% 90% Delete timer 293.40 285.78 467.92 10.94 95% 95% Timer latency [0 threads] 317.38 300.22 488.56 11.40 74% 45% Timer latency [2 threads] 326.31 304.78 489.00 12.73 76% 39% Timer latency [many threads] 85629.72 394.90 669.02 0.00 0% 2% Timer -> thread post latency All done : Idlethread stack used 728 size 3612 Timing complete - 35780 ms total PASS:<Basic timing OK> EXIT:<done>
INFO:<Main: calling sem_waiINFO:<Thread 1 running> INFO:<Thread1: INFO:<Thread 2 running> INFO:<Thread2:t()> INFO:<Main: calling sem_wait() againcalling sigsetjmp()> INFO:<Thread1: cal calling sigsetjmp()> INFO:<Thread2: c> INFO:<Main: calling pthread_join(threadling pause()> alling pause()> 1)> INFO:<Thread1: pause() returned> INFO:<INFO:<sigusr2() handler called> INFO:<sThread1: calling sigsetjmp()> INFO:<Thigusr2() handler calling siglongjmp()> read1: calling pause()> INFO:<Thread2: sigsetjINFO:<sigusr2() handler called> INFO:<sigusr2() handler calling siglongjmp()> INFO:<Thread2: sigsetjmp() returned non-zero> INFO:<Thread2: calling pause()> INFO:<Thread1: pause() returned> INFO:<Thread1: calling sigsetjmp()> INFO:<Thread1: calling pause()> INFO:<Thread2: pause() returned> INFO:<Thread2: calling sigsetjmp()> INFO:<Thread2: calling pause()> INFO:<sigusr1() handler INFO:<sigusr2() handler called> INFO:<sigusr2() handler calling siglongjmp()> INFO:<Thread2: sigsetjmp() returned non-zero> INFO:<Thread2: calling pause()> called> INFO:<sigusr1() handler calling siglongjmp()> INFO:<Thread1: sigsetjmp() returned non-zero> INFO:<Thread1: calling pthread_exit()> INFO:<Main: calling pthread_join(threadINFO:<sigusr2() handler called> INFO:<sigusr2() handler calling siglongjmp()> INFO:<Thread2: sigsetjmp() returned non-zero> INFO:<Thread2: calling pause()> 2)> INFO:<sigusr2() handler called> INFO:<sigusr2() handler calling siglongjmp()> INFO:<Thread2: sigsetjmp() returned non-zero> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<sigusr2() handler calling siglongjmp()> INFO:<Thread2: sigsetjmp() returned non-zero> INFO:<Thread2: calling pthread_exit()> INFO:<Main: calling timer_delete(timer1)> INFO:<Main: calling timer_delete(timer2)> PASS:<sigsetjmp> EXIT:<done>
INFO:<Main: calling sem_waiINFO:<Thread 1 running> INFO:<Thread1: calINFO:<Thread 2 running> INFO:<Thread2: cat()> ling pause()>alling sem_wait() again> lling pause()> INFO:<Main: calling pthread_join(thread1)> INFO:<Thread1: calling pause()> INFO:<sigusr2() handler called> INFINFO:<Thread1: calling pause()> O:<Thread2: calling pause()> INFO:<Thread1: calling pause()> INFO:<sigusr2() handler called> INFINFO:<Thread1: calling pause()> O:<Thread2: calling pause()> INFO:<sigusr1() handler called> INFO:<ThreINFO:<sigusr2() handler called> INFO:<Thread1: calling pthread_exit()> ad2: calling pause()> INFO:<Main: calling pthread_join(thread2)> INFO:<sigusr2() handler called> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<Thread2: calling pthread_exit()> INFO:<Main: calling timer_delete(timer1)> INFO:<Main: calling timer_delete(timer2)> PASS:<timer1> EXIT:<done>
INFO:<Main: calling sem_waiINFO:<Thread 1 running> INFO:<Thread1: calINFO:<Thread 2 running> INFO:<Thread2: cat()> ling pause()>alling sem_wait() again> lling pause()> INFO:<Main: calling pthread_join(thread1)> INFO:<Thread1: calling pause()> INFO:<sigusr2() handler called> INFINFO:<Thread1: calling pause()> O:<Thread2: calling pause()> INFO:<Thread1: calling pause()> INFO:<sigusr2() handler called> INFINFO:<Thread1: calling pause()> O:<Thread2: calling pause()> INFO:<sigusr1() handler called> INFO:<ThreINFO:<sigusr2() handler called> INFO:<Thread1: calling pthread_exit()> ad2: calling pause()> INFO:<Main: calling pthread_join(thread2)> INFO:<sigusr2() handler called> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<Thread2: calling pthread_exit()> INFO:<Main: calling timer_delete(timer1)> INFO:<Main: calling timer_delete(timer2)> PASS:<timer1> EXIT:<done>
INFO:<Main: calling sem_waiINFO:<Thread 1 running> INFO:<Thread1: calINFO:<Thread 2 running> INFO:<Thread2: cat()> ling pause()>alling sem_wait() again> lling pause()> INFO:<Main: calling pthread_join(thread1)> INFO:<Thread1: calling pause()> INFO:<sigusr2() handler called> INFINFO:<Thread1: calling pause()> O:<Thread2: calling pause()> INFO:<Thread1: calling pause()> INFO:<sigusr2() handler called> INFINFO:<Thread1: calling pause()> O:<Thread2: calling pause()> INFO:<sigusr1() handler called> INFO:<ThreINFO:<sigusr2() handler called> INFO:<Thread1: calling pthread_exit()> ad2: calling pause()> INFO:<Main: calling pthread_join(thread2)> INFO:<sigusr2() handler called> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<Thread2: calling pause()> INFO:<sigusr2() handler called> INFO:<Thread2: calling pthread_exit()> INFO:<Main: calling timer_delete(timer1)> INFO:<Main: calling timer_delete(timer2)> PASS:<timer1> EXIT:<done>