📄 task1.c
字号:
/* * COPYRIGHT (c) 1989-1999. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * $Id: task1.c,v 1.3.2.1 2003/09/04 18:46:38 joel Exp $ */#include <stdio.h>#include <rtems.h>#include <rtems/error.h>static rtems_id taskId1;static rtems_id taskId2;rtems_interval ticksPerSecond;#include "system.h"static intisSuspended (rtems_id tid){ rtems_status_code sc; sc = rtems_task_is_suspended (tid); if (sc == RTEMS_ALREADY_SUSPENDED) return 1; if (sc != RTEMS_SUCCESSFUL) printf ("rtems_task_is_suspended: %s\n", rtems_status_text (sc)); return 0;}static voidsubTask1 (rtems_task_argument arg){ rtems_status_code sc; rtems_task_wake_after (ticksPerSecond * 3); sc = rtems_event_send (taskId2, 1); if (sc != RTEMS_SUCCESSFUL) { printf ("subTask1 - Can't send event (%d)\n", sc); rtems_task_suspend (RTEMS_SELF); } rtems_task_wake_after (ticksPerSecond * 3); printf ("subTask1 - Event sent\n"); rtems_task_suspend (RTEMS_SELF); printf ("subTask1 - Back to task 1\n"); rtems_task_wake_after (ticksPerSecond * 3); rtems_task_suspend (RTEMS_SELF);}static voidsubTask2 (rtems_task_argument arg){ rtems_status_code sc; rtems_event_set ev; rtems_task_wake_after (ticksPerSecond * 1); sc = rtems_event_receive (1, RTEMS_WAIT|RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &ev); if (sc != RTEMS_SUCCESSFUL) { printf ("subTask2 - Can't receive event (%d)\n", sc); rtems_task_suspend (RTEMS_SELF); } printf ("subTask2 - Task 1 suspended? - should be 0: %d\n", isSuspended (taskId1)); rtems_task_wake_after (ticksPerSecond * 4); printf ("subTask2 - Task 1 suspended? - should be 1: %d\n", isSuspended (taskId1)); rtems_task_resume (taskId1); printf ("subTask2 - Task 1 suspended? - should be 0: %d\n", isSuspended (taskId1)); rtems_task_wake_after (ticksPerSecond * 4); printf ("subTask2 - Task 1 suspended? - should be 1: %d\n", isSuspended (taskId1)); puts( "*** END OF TEST 26 ***" ); rtems_test_exit( 0 );}static voidcreateTask (char c, rtems_id *tid){ rtems_status_code sc; sc = rtems_task_create (rtems_build_name('S','u','b',c), 100, RTEMS_MINIMUM_STACK_SIZE * 4, RTEMS_PREEMPT|RTEMS_NO_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0), RTEMS_NO_FLOATING_POINT|RTEMS_LOCAL, tid); if (sc != RTEMS_SUCCESSFUL) { printf ("Can't create task (%d)\n", sc); rtems_task_suspend (RTEMS_SELF); }}static voidstartTask (rtems_id tid, rtems_task_entry entry_point){ rtems_status_code sc; sc = rtems_task_start (tid, entry_point, 0); if (sc != RTEMS_SUCCESSFUL) { printf ("Can't start task (%d)\n", sc); rtems_task_suspend (RTEMS_SELF); }}voidtask1 (void){ rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond); createTask ('1', &taskId1); createTask ('2', &taskId2); startTask (taskId1, subTask1); startTask (taskId2, subTask2); rtems_task_suspend (RTEMS_SELF);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -