Mercurial > ecos-v2_0-branch
diff packages/kernel/current/tests/tm_basic.cxx @ 60:3836136e7743 ecos-sw-1999-12-17
Merge from eCos master repository on 1999-12-17-19:44:58-GMT
| author | jlarmour |
|---|---|
| date | Fri, 17 Dec 1999 20:15:45 +0000 |
| parents | 755351606154 |
| children | c38311975d4f |
line wrap: on
line diff
--- a/packages/kernel/current/tests/tm_basic.cxx +++ b/packages/kernel/current/tests/tm_basic.cxx @@ -1150,6 +1150,17 @@ alarm_cb2(cyg_handle_t alarm, cyg_addrwo } } +static void +alarm_cb3(cyg_handle_t alarm, cyg_addrword_t indx) +{ + if (alarm_cnt == nscheds) { + cyg_semaphore_post(&synchro); + } else { + sched_ft[alarm_cnt].start = 0; + cyg_thread_resume((cyg_handle_t)indx); + } +} + // Null thread, used to keep scheduler busy void alarm_test(cyg_uint32 id) @@ -1159,6 +1170,17 @@ alarm_test(cyg_uint32 id) } } +// Thread that suspends itself at the first opportunity +void +alarm_test2(cyg_uint32 id) +{ + cyg_handle_t me = cyg_thread_self(); + while (true) { + HAL_CLOCK_READ(&sched_ft[alarm_cnt++].end); + cyg_thread_suspend(me); + } +} + void run_alarm_tests(void) { @@ -1360,6 +1382,33 @@ run_alarm_tests(void) cyg_thread_suspend(threads[i]); cyg_thread_delete(threads[i]); } + + // Set my priority higher than any I plan to create + cyg_thread_set_priority(cyg_thread_self(), 2); + cyg_thread_create(10, // Priority - just a number + alarm_test2, // entry + i, // index + thread_name("thread", 0), // Name + &stacks[0][0], // Stack + STACK_SIZE, // Size + &threads[0], // Handle + &test_threads[0] // Thread data structure + ); + wait_for_tick(); // Wait until the next clock tick to minimize aberations + cyg_clock_to_counter(cyg_real_time_clock(), &rtc_handle); + cyg_alarm_create(rtc_handle, alarm_cb3, threads[0], &alarms[0], + &test_alarms[0]); + init_val = 5; step_val = 5; alarm_cnt = 0; + cyg_alarm_initialize(alarms[0], init_val, step_val); + cyg_semaphore_init(&synchro, 0); + cyg_alarm_enable(alarms[0]); + cyg_semaphore_wait(&synchro); + cyg_alarm_disable(alarms[0]); + cyg_alarm_delete(alarms[0]); + show_times(sched_ft, nscheds, "Alarm -> thread resume latency"); + cyg_thread_suspend(threads[0]); + cyg_thread_delete(threads[0]); + end_of_test_group(); }
