📄 tm_basic.cxx
字号:
voidrun_counter_tests(void){ int i; cyg_tick_count_t val=0; wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_create(&counters[i], &test_counters[i]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Create counter"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); val = cyg_counter_current_value(counters[i]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Get counter value"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_set_value(counters[i], val); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Set counter value"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_tick(counters[i]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick counter"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_delete(counters[i]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Delete counter"); end_of_test_group();}voidrun_flag_tests(void){ int i; cyg_flag_value_t val; wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_init(&test_flags[i]); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Init flag"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_destroy(&test_flags[i]); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Destroy flag"); // Recreate the flags - reused in the remaining tests for (i = 0; i < nflags; i++) { cyg_flag_init(&test_flags[i]); } wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_maskbits(&test_flags[i], 0); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Mask bits in flag"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_setbits(&test_flags[i], 0x11); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Set bits in flag [no waiters]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_AND); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [AND]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_OR); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [OR]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_AND|CYG_FLAG_WAITMODE_CLR); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [AND/CLR]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); HAL_CLOCK_READ(&flag_ft[i].start); cyg_flag_wait(&test_flags[i], 0x11, CYG_FLAG_WAITMODE_OR|CYG_FLAG_WAITMODE_CLR); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Wait for flag [OR/CLR]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nflags; i++) { cyg_flag_setbits(&test_flags[i], 0x11); HAL_CLOCK_READ(&flag_ft[i].start); val = cyg_flag_peek(&test_flags[i]); HAL_CLOCK_READ(&flag_ft[i].end); } show_times(flag_ft, nflags, "Peek on flag"); // Destroy flags - no longer needed for (i = 0; i < nflags; i++) { cyg_flag_destroy(&test_flags[i]); } end_of_test_group();}// Alarm callback functionvoidalarm_cb(cyg_handle_t alarm, cyg_addrword_t val){ // empty call back}// Callback used to test determinancystatic volatile int alarm_cnt;voidalarm_cb2(cyg_handle_t alarm, cyg_addrword_t indx){ if (alarm_cnt == nscheds) return; sched_ft[alarm_cnt].start = 0; HAL_CLOCK_READ(&sched_ft[alarm_cnt++].end); if (alarm_cnt == nscheds) { cyg_semaphore_post(&synchro); }}static voidalarm_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 busyvoidalarm_test(cyg_uint32 id){ while (true) { cyg_thread_yield(); }}// Thread that suspends itself at the first opportunityvoidalarm_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); }}voidrun_alarm_tests(void){ int i; cyg_tick_count_t init_val, step_val; cyg_handle_t rtc_handle; wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < ncounters; i++) { cyg_counter_create(&counters[i], &test_counters[i]); } for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_alarm_create(counters[0], alarm_cb, 0, &alarms[i], &test_alarms[i]); HAL_CLOCK_READ(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Create alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations init_val = 0; step_val = 0; for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_alarm_initialize(alarms[i], init_val, step_val); HAL_CLOCK_READ(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Initialize alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations init_val = 0; step_val = 0; for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_alarm_disable(alarms[i]); HAL_CLOCK_READ(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Disable alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations init_val = 0; step_val = 0; for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_alarm_enable(alarms[i]); HAL_CLOCK_READ(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Enable alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_alarm_delete(alarms[i]); HAL_CLOCK_READ(&alarm_ft[i].end); } show_times(alarm_ft, nalarms, "Delete alarm"); wait_for_tick(); // Wait until the next clock tick to minimize aberations cyg_counter_create(&counters[0], &test_counters[0]); cyg_alarm_create(counters[0], alarm_cb, 0, &alarms[0], &test_alarms[0]); init_val = 9999; step_val = 9999; cyg_alarm_initialize(alarms[0], init_val, step_val); cyg_alarm_enable(alarms[0]); for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_tick(counters[0]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick counter [1 alarm]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations cyg_counter_create(&counters[0], &test_counters[0]); for (i = 0; i < nalarms; i++) { cyg_alarm_create(counters[0], alarm_cb, 0, &alarms[i], &test_alarms[i]); init_val = 9999; step_val = 9999; cyg_alarm_initialize(alarms[i], init_val, step_val); cyg_alarm_enable(alarms[i]); } for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_tick(counters[0]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick counter [many alarms]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations cyg_counter_create(&counters[0], &test_counters[0]); cyg_alarm_create(counters[0], alarm_cb, 0, &alarms[0], &test_alarms[0]); init_val = 1; step_val = 1; cyg_alarm_initialize(alarms[0], init_val, step_val); cyg_alarm_enable(alarms[0]); for (i = 0; i < ncounters; i++) { HAL_CLOCK_READ(&counter_ft[i].start); cyg_counter_tick(counters[0]); HAL_CLOCK_READ(&counter_ft[i].end); } show_times(counter_ft, ncounters, "Tick & fire counter [1 alarm]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations cyg_counter_create(&counters[0], &test_counters[0]); for (i = 0; i < nalarms; i++) { cyg_alarm_create(counters[0], alarm_cb, i, &alarms[i], &test_alarms[i]); init_val = 1; step_val = 1; cyg_alarm_initialize(alarms[i], init_val, step_val); cyg_alarm_enable(alarms[i]); } for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_counter_tick(counters[0]); HAL_CLOCK_READ(&alarm_ft[i].end); } for (i = 0; i < nalarms; i++) { cyg_alarm_delete(alarms[i]); } show_times(alarm_ft, nalarms, "Tick & fire counters [>1 together]"); wait_for_tick(); // Wait until the next clock tick to minimize aberations cyg_counter_create(&counters[0], &test_counters[0]); for (i = 0; i < nalarms; i++) { cyg_alarm_create(counters[0], alarm_cb, i, &alarms[i], &test_alarms[i]); init_val = i+1; step_val = nalarms+1; cyg_alarm_initialize(alarms[i], init_val, step_val); cyg_alarm_enable(alarms[i]); } for (i = 0; i < nalarms; i++) { HAL_CLOCK_READ(&alarm_ft[i].start); cyg_counter_tick(counters[0]); HAL_CLOCK_READ(&alarm_ft[i].end); } for (i = 0; i < nalarms; i++) { cyg_alarm_delete(alarms[i]); } show_times(alarm_ft, nalarms, "Tick & fire counters [>1 separately]"); 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_cb2, 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 latency [0 threads]"); // Set my priority higher than any I plan to create cyg_thread_set_priority(cyg_thread_self(), 2); for (i = 0; i < 2; i++) { cyg_thread_create(10, // Priority - just a number alarm_test, // entry i, // index thread_name("thread", i), // Name &stacks[i][0], // Stack STACK_SIZE, // Size &threads[i], // Handle &test_threads[i] // Thread data structure ); cyg_thread_resume(threads[i]); } 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_cb2, 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 latency [2 threads]"); for (i = 0; i < 2; i++) { 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); for (i = 0; i < ntest_threads; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -