execute multiple tasks

Mick Davis mickd at goanna.iinet.net.au
Fri May 11 07:54:43 UTC 2012


I think your tasks need to delete themselves.

rtems_task task1(rtems_task_argument ignored)
{
     printf("Task 1 printing\n\r");
     rtems_task_delete( RTEMS_SELF );
}



On 11/05/12 15:50, Luca Cinquepalmi wrote:
> Hi all,
> I've developed the following C code with two tasks which execute a
> simple printf, but
> only the first printf is executed, and I don't understand why... Is
> there an error in my code?
> Thanks a lot.
>
> Luca
>
> /*
>   * multiTask.c
>   *
>   *  Created on: May 10, 2012
>   *      Author: Luca Cinquepalmi
> */
>
>
> #include <rtems.h>
>
> #define CONFIGURE_INIT
>
> #include <bsp.h>
>
> rtems_task Init (rtems_task_argument argument);
> rtems_task task1 (rtems_task_argument argument);
> rtems_task task2 (rtems_task_argument argument);
>
> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
>
> #define CONFIGURE_MAXIMUM_TASKS             4
>
> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>
> #define CONFIGURE_EXTRA_TASK_STACKS         (3 * RTEMS_MINIMUM_STACK_SIZE)
>
> #include <rtems/confdefs.h>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include "leon.h"
> #include "define.h"
>
> rtems_id tid[3];
> rtems_name name[3];
>
> rtems_task Init(rtems_task_argument ignored)
> {
>
>      rtems_status_code status;
>
>      name[1] = rtems_build_name('A','P','P','1');
>      name[2] = rtems_build_name('A','P','P','2');
>
>      status = rtems_task_create(
>              name[1], 1, RTEMS_MINIMUM_STACK_SIZE,
>              RTEMS_DEFAULT_MODES,
>              RTEMS_DEFAULT_ATTRIBUTES, &tid[1]);
>      if ( status != RTEMS_SUCCESSFUL ) {
>            printf( "rtems_task_create 1 failed with status of %d.\n\r",
> status);
>            exit(1);
>      }
>      else
>          printf("task 1 create OK\n\r");
>
>      status = rtems_task_create(
>              name[2], 1, RTEMS_MINIMUM_STACK_SIZE,
>              RTEMS_DEFAULT_MODES,
>              RTEMS_DEFAULT_ATTRIBUTES, &tid[2]);
>      if ( status != RTEMS_SUCCESSFUL ) {
>          printf( "rtems_task_create 2 failed with status of %d.\n\r",
> status);
>          exit(1);
>      }
>      else
>          printf("task 2 create OK\n\r");
>
>      printf("Print of Init task!\n\r");
>
>        status = rtems_task_start( tid[1], task1, 1 );
>        if ( status != RTEMS_SUCCESSFUL ) {
>               printf( "rtems_task_start 1 failed with status of
> %d.\n\r", status);
>               exit(1);
>         }
>        else
>            printf("task 1 start OK\n\r");
>
>         status = rtems_task_start( tid[2], task2, 2 );
>        if ( status != RTEMS_SUCCESSFUL ) {
>             printf( "rtems_task_start 2 failed with status of %d.\n\r",
> status);
>             exit(1);
>        }
>        else
>              printf("task 2 start OK\n\r");
>
>        status = rtems_task_delete( RTEMS_SELF );
>        exit(1);
> }
>
> rtems_task task1(rtems_task_argument ignored)
> {
>      printf("Task 1 printing\n\r");
> }
>
> rtems_task task2(rtems_task_argument ignored)
> {
>      printf("Task 2 printing\n\r");
> }
>
>
>
>
> _______________________________________________
> rtems-users mailing list
> rtems-users at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-users

-- 

Mick Davis
Goanna Technologies Pty Ltd
+61 8 9444 2634



More information about the users mailing list