📄 task1.cc
字号:
printf("%s - set preemption state to RTEMS_PREEMPT - ", self.name_string()); task_mode.set_preemption_state(RTEMS_PREEMPT); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); printf("%s - set preemption state to RTEMS_NO_PREEMPT - ", self.name_string()); task_mode.set_preemption_state(RTEMS_NO_PREEMPT); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); // TIMESLICE mode control printf("%s - get timeslice state - ", self.name_string()); task_mode.get_timeslice_state(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_TIMESLICE_MASK); printf("\n"); printf("%s - set timeslice state to RTEMS_TIMESLICE - ", self.name_string()); task_mode.set_timeslice_state(RTEMS_TIMESLICE); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); printf("%s - set timeslice state to RTEMS_NO_TIMESLICE - ", self.name_string()); task_mode.set_timeslice_state(RTEMS_NO_TIMESLICE); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); // ASR mode control printf("%s - get asr state - ", self.name_string()); task_mode.get_asr_state(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ASR_MASK); printf("\n"); printf("%s - set asr state to RTEMS_ASR - ", self.name_string()); task_mode.set_asr_state(RTEMS_ASR); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); printf("%s - set asr state to RTEMS_NO_ASR - ", self.name_string()); task_mode.set_asr_state(RTEMS_NO_ASR); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); // interrupt level control rtems_interrupt_level current_level; rtems_interrupt_level level; printf("%s - get current interrupt level - ", self.name_string()); task_mode.get_interrupt_level(current_level); printf("%s, level is %i\n", task_mode.last_status_string(), current_level); printf("%s - set interrupt level to 102 - ", self.name_string()); task_mode.set_interrupt_level(102); printf("%s\n", task_mode.last_status_string()); printf("%s - set interrupt level to original level - ", self.name_string()); task_mode.set_interrupt_level(current_level, level); printf("%s, level was %i\n", task_mode.last_status_string(), level); printf("%s - set mode to original mode - ", self.name_string()); task_mode.set_mode(current_mode, RTEMS_PREEMPT_MASK | RTEMS_TIMESLICE_MASK | RTEMS_ASR_MASK | RTEMS_INTERRUPT_MASK); task_mode.get_mode(mode); printf("%s,\n\t mode is 0x%08X, ", task_mode.last_status_string(), mode); print_mode(mode, RTEMS_ALL_MODES); printf("\n"); printf(" * END TaskMode Class test *\n"); }void Task1::screen4(void){ printf(" * START Event Class test *\n"); printf("%s - create task 2 - ", name_string()); Task2 task_2("TA2", (rtems_task_priority) 9, RTEMS_MINIMUM_STACK_SIZE * 6); printf("%s\n", task_2.last_status_string()); printf("%s - start task 2 - ", name_string()); task_2.start(0); printf("%s\n", task_2.last_status_string()); printf("%s - construct event connecting to task 2 - ", name_string()); rtemsEvent event_2("TA2 "); printf("%s\n", event_2.last_status_string()); // wait for task 2 to complete its timeout tests wake_after(7000000); printf("%s - send event signal 0 using the task id - ", name_string()); event_2.send(task_2.id_is(), RTEMS_SIGNAL_0); printf("%s\n", event_2.last_status_string()); wake_after(1000000); printf("%s - send event signal 0 using the task object reference - ", name_string()); event_2.send(task_2, RTEMS_SIGNAL_0); printf("%s\n", event_2.last_status_string()); wake_after(1000000); printf("%s - send event signal 31 using connected id - ", name_string()); event_2.send(RTEMS_SIGNAL_31); printf("%s\n", event_2.last_status_string()); wake_after(1000000); rtemsEvent event_2_2; event_2_2.connect("TA2"); printf("%s - send event signal 0 and 31 - ", name_string()); event_2_2.send(task_2, RTEMS_SIGNAL_0 | RTEMS_SIGNAL_31); printf("%s\n", event_2_2.last_status_string()); printf("%s - waiting 5 secs for TA2 to finish\n", name_string()); wake_after(500000); printf(" * END Event Class test *\n"); }void Task1::screen5(void){ printf(" * START Interrupt Class test *\n"); printf(" do not know a portable BSP type interrupt test\n"); printf(" * END Interrupt Class test *\n"); }void Task1::screen6(void){ printf(" * START MessageQueue Class test *\n"); printf("%s - construct message queue 1 with no memory error - ", name_string()); rtemsMessageQueue mq_1("MQ1", 1000000, 1000); printf("%s\n", mq_1.last_status_string()); printf("%s - construct/create message queue 2 - ", name_string()); rtemsMessageQueue mq_2("MQ2", 4, 50); printf("%s\n", mq_2.last_status_string()); char *u1 = "normal send"; char *u2 = "urgent send"; char in[100]; rtems_unsigned32 size; printf("%s - send u1 to mq_2 - ", name_string()); mq_2.send(u1, strlen(u1) + 1); printf("%s\n", mq_2.last_status_string()); printf("%s - urgent send u2 to mq_2 - ", name_string()); mq_2.urgent(u2, strlen(u2) + 1); printf("%s\n", mq_2.last_status_string()); printf("%s - create task 3_1 - ", name_string()); Task3 task_3_1("TA31", 9, RTEMS_MINIMUM_STACK_SIZE * 6); printf("%s\n", task_3_1.last_status_string()); printf("%s - start task 3_1 - ", name_string()); task_3_1.start(0); printf("%s\n", task_3_1.last_status_string()); printf("%s - create task 3_2 - ", name_string()); Task3 task_3_2("TA32", 9, RTEMS_MINIMUM_STACK_SIZE * 6); printf("%s\n", task_3_2.last_status_string()); printf("%s - start task 3_2 - ", name_string()); task_3_2.start(0); printf("%s\n", task_3_1.last_status_string()); wake_after(1000000); printf("%s - receive u2 on mq_2 ...\n", name_string()); fflush(stdout); mq_2.receive(in, size, 5000000); printf("%s - %s\n", name_string(), mq_2.last_status_string()); if (size == (strlen(u2) + 5)) { if ((strncmp(in, task_3_1.name_string(), 4) == 0) && (strcmp(in + 4, u2) == 0)) { printf("%s - message u2 received correctly\n", name_string()); } else { printf("%s - message u2 received incorrectly, message='%s', size=%i\n", name_string(), in, size); } } else printf("%s - message u2 size incorrect, size=%i\n", name_string(), size); printf("%s - receive u1 on mq_2 ...\n", name_string()); fflush(stdout); mq_2.receive(in, size, 5000000); printf("%s - %s\n", name_string(), mq_2.last_status_string()); if (size == (strlen(u1) + 5)) { if ((strncmp(in, task_3_2.name_string(), 4) == 0) && (strcmp(in + 4, u1) == 0)) { printf("%s - message u1 received correctly\n", name_string()); } else { printf("%s - message u1 received incorrectly, message='%s', size=%i\n", name_string(), in, size); } } else printf("%s - message u1 size incorrect, size=%i\n", name_string(), size); wake_after(3000000); char *b1 = "broadcast message"; rtems_unsigned32 count; printf("%s - broadcast send b1 ...\n", name_string()); mq_2.broadcast(b1, strlen(b1) + 1, count); printf("%s - mq_2 broadcast send - %s, count=%i\n", name_string(), mq_2.last_status_string(), count); wake_after(1000000); printf("%s - receive message b1 on mq_2 from %s...\n", name_string(), task_3_1.name_string()); fflush(stdout); mq_2.receive(in, size, 5000000); printf("%s - %s\n", name_string(), mq_2.last_status_string()); if (size == (strlen(b1) + 5)) { if ((strncmp(in, task_3_1.name_string(), 4) == 0) && (strcmp(in + 4, b1) == 0)) { printf("%s - message b1 received correctly\n", name_string()); } else { printf("%s - message b1 received incorrectly, message='%s'\n", name_string(), in); } } else printf("%s - message b1 size incorrect, size=%i\n", name_string(), size); printf("%s - receive message b1 on mq_2 from %s...\n", name_string(), task_3_1.name_string()); fflush(stdout); mq_2.receive(in, size, 5000000); printf("%s - %s\n", name_string(), mq_2.last_status_string()); if (size == (strlen(b1) + 5)) { if ((strncmp(in, task_3_2.name_string(), 4) == 0) && (strcmp(in + 4, b1) == 0)) { printf("%s - message b1 received correctly\n", name_string()); } else { printf("%s - message b1 received incorrectly, message='%s', size=%i\n", name_string(), in, size); } } else printf("%s - message b1 size incorrect, size=%i\n", name_string(), size); // wait for task 3_1, and 3_2 to complete their timeout tests, will // start these after getting the broadcast message wake_after(7000000); char *f1 = "flush message"; printf("%s - send f1 to mq_2 - ", name_string()); mq_2.send(f1, strlen(f1) + 1); printf("%s\n", mq_2.last_status_string()); printf("%s - send f1 to mq_2 - ", name_string()); mq_2.send(f1, strlen(f1) + 1); printf("%s\n", mq_2.last_status_string()); printf("%s - send f1 to mq_2 - ", name_string()); mq_2.send(f1, strlen(f1) + 1); printf("%s\n", mq_2.last_status_string()); printf("%s - flush mq_2 - ", name_string()); mq_2.flush(size); printf("%s, flushed=%i\n", mq_2.last_status_string(), size); printf(" * END MessageQueue Class test *\n"); }void Task1::print_mode(rtems_mode mode, rtems_mode mask){ rtemsTaskMode task_mode; if (mask & RTEMS_PREEMPT_MASK) printf("RTEMS_%sPREEMPT ", task_mode.preemption_set(mode) ? "" : "NO_"); if (mask & RTEMS_TIMESLICE_MASK) printf("RTEMS_%sTIMESLICE ", task_mode.preemption_set(mode) ? "" : "NO_"); if (mask & RTEMS_ASR_MASK) printf("RTEMS_%sASR ", task_mode.asr_set(mode) ? "" : "NO_"); if (mask & RTEMS_INTERRUPT_MASK) printf("INTMASK=%i", mode & RTEMS_INTERRUPT_MASK);}EndTask::EndTask(const char* name, const rtems_task_priority initial_priority, const rtems_unsigned32 stack_size) : rtemsTask(name, initial_priority, stack_size, RTEMS_NO_PREEMPT){} void EndTask::body(rtems_task_argument){ printf("*** END OF RTEMS++ TEST ***\n"); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -