/* Init * * This routine is the initialization task for this test program. * It is called from init_exec and has the responsibility for creating * and starting the tasks that make up the test. If the time of day * clock is required for the test, it should also be set to a known * value by this function. * * Input parameters: NONE * * Output parameters: NONE * * 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. * * init.c,v 1.12.4.1 2003/09/04 18:46:30 joel Exp */ #define CONFIGURE_INIT #include "system.h" #include #include rtems_id sem1, sem2, sem3; rtems_id msgq1, msgq2; rtems_task semtask1 (rtems_task_argument arg) { rtems_status_code result; rtems_name name1, name2, name3; name1 = rtems_build_name('S', 'E', 'M', '1'); name2 = rtems_build_name('S', 'E', 'M', '2'); name3 = rtems_build_name('S', 'E', 'M', '3'); result = rtems_semaphore_create (name1, 1, RTEMS_COUNTING_SEMAPHORE, 1, &sem1); result = rtems_semaphore_create (name2, 1, RTEMS_BINARY_SEMAPHORE, 1, &sem2); result = rtems_semaphore_create (name3, 1, RTEMS_SIMPLE_BINARY_SEMAPHORE, 1, &sem3); result = rtems_semaphore_obtain (sem1, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem1, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem2, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem2, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem3, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem3, RTEMS_WAIT, RTEMS_NO_TIMEOUT); rtems_task_suspend(RTEMS_SELF); } rtems_task semtask2 (rtems_task_argument arg) { rtems_status_code result; result = rtems_semaphore_obtain (sem1, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem2, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_semaphore_obtain (sem3, RTEMS_WAIT, RTEMS_NO_TIMEOUT); rtems_task_suspend(RTEMS_SELF); } rtems_task semtask3 (rtems_task_argument arg) { rtems_status_code result; result = rtems_semaphore_release (sem1); result = rtems_semaphore_release (sem1); result = rtems_semaphore_release (sem2); result = rtems_semaphore_release (sem2); result = rtems_semaphore_release (sem3); result = rtems_semaphore_release (sem3); rtems_task_suspend(RTEMS_SELF); } rtems_task msgqtask1 (rtems_task_argument arg) { rtems_status_code result; rtems_name name1, name2; rtems_unsigned32 size; char buffer[32]; name1 = rtems_build_name('M', 'S', 'Q', '1'); name2 = rtems_build_name('M', 'S', 'Q', '2'); result = rtems_message_queue_create (name1, 2, 16, RTEMS_PRIORITY, &msgq1); result = rtems_message_queue_create (name2, 2, 16, RTEMS_PRIORITY, &msgq2); result = rtems_message_queue_send (msgq1, "MESSAGE1", 9); result = rtems_message_queue_send (msgq1, "MESSAGE2", 9); result = rtems_message_queue_send (msgq1, "MESSAGE3", 9); result = rtems_message_queue_receive (msgq2, buffer, &size, RTEMS_WAIT, RTEMS_NO_TIMEOUT); rtems_task_suspend(RTEMS_SELF); } rtems_task msgqtask2 (rtems_task_argument arg) { rtems_status_code result; rtems_unsigned32 size; char buffer[32]; result = rtems_message_queue_receive (msgq1, buffer, &size, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_message_queue_receive (msgq1, buffer, &size, RTEMS_WAIT, RTEMS_NO_TIMEOUT); result = rtems_message_queue_send (msgq2, "RETMESSAGE1", 12); rtems_task_suspend(RTEMS_SELF); } rtems_task Init (rtems_task_argument ignored) { rtems_status_code result; rtems_name name1, name2, name3; rtems_id tsk1, tsk2, tsk3; name1 = rtems_build_name('S', 'T', '1', 0); name2 = rtems_build_name('S', 'T', '2', 0); name3 = rtems_build_name('S', 'T', '3', 0); result = rtems_task_create(name1, 2, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &tsk1); result = rtems_task_create(name2, 3, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &tsk2); result = rtems_task_create(name3, 4, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &tsk3); result = rtems_task_start (tsk1, semtask1, 1); result = rtems_task_start (tsk2, semtask2, 2); result = rtems_task_start (tsk3, semtask3, 3); name1 = rtems_build_name('M', 'Q', 'T', '1'); name2 = rtems_build_name('M', 'Q', 'T', '2'); result = rtems_task_create(name1, 5, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &tsk1); result = rtems_task_create(name2, 6, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &tsk2); result = rtems_task_start (tsk1, msgqtask1, 4); result = rtems_task_start (tsk2, msgqtask2, 5); rtems_task_suspend(RTEMS_SELF); exit( 0 ); }