⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 task1.cc

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 CC
📖 第 1 页 / 共 2 页
字号:
    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 + -