/* * Example initialization file - spawns 2 native FPU tasks * */ #define CONFIGURE_INIT #define TASKS 2 #include "system.h" #include rtems_task Init(rtems_task_argument argument) { rtems_status_code status; rtems_name Task_name[TASKS]; /* task names */ rtems_id Task_id[TASKS]; /* task ids */ int i; for(i = 0; i < TASKS; i++) { // Initialize Task name Task_name[i] = rtems_build_name('T', 'T', "0" + i / 10, "0" + i % 10); // Create Task status = rtems_task_create( Task_name[i], (rtems_task_priority) 2, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, // use RTEMS_DEFAULT_MODES | RTEMS_TIMESLICE for Linux/Windows like // handling of tasks with same priority (i.e. pre-emption) i == 0 ? RTEMS_FLOATING_POINT : RTEMS_DEFAULT_ATTRIBUTES, &Task_id[i]); if (status != RTEMS_SUCCESSFUL) { printf("Failed to rtems_task_create... status:%0x\n", status); rtems_task_delete(RTEMS_SELF); } // Start Task status = rtems_task_start( Task_id[i], i == 0 ? Task1_EntryPoint : Task2_EntryPoint, i); } printf("Parent task sleeps for a second...\n"); rtems_task_wake_after(100); printf("Parent task bids adieu...\n"); rtems_task_delete(RTEMS_SELF); }