Esempio n. 1
0
/**
 *
 * @param timer_task_stack
 * @param timer_task_stack_size
 * @param idle_task_stack
 * @param idle_task_stack_size
 * @param app_in_cb
 * @param cpu_int_en
 * @param idle_user_cb
 */
void TN_NORETURN tnec_start_system(TN_UWORD  *timer_task_stack,
                                   TN_UWORD   timer_task_stack_size,
                                   TN_UWORD  *idle_task_stack,
                                   TN_UWORD   idle_task_stack_size,
                                   void     (*app_in_cb)(void),
                                   void     (*cpu_int_en)(void),
                                   void     (*idle_user_cb)(void)
                                  )
{
    TN_WORD i;

    /* ToDo - initialize the sys log (if enabled) */

    for (i = 0; i < TN_NUM_PRIORITY; i++)
    {
        queue_reset(&(tn_ready_list[i]));
        tn_tslice_ticks[i] = NO_TIME_SLICE;
    }

    queue_reset(&tn_create_queue);
    tn_created_tasks_qty      = 0;

    tn_system_state           = TN_ST_STATE_NOT_RUN;

    tn_enable_switch_context  = TN_TRUE;
    tn_ready_to_run_bmp       = 0;

    tn_context_switch_request = TN_FALSE;
    tn_sys_context            = TN_CONTEXT_TASK;

    tn_next_task_to_run       = TN_NULL;
    tn_curr_run_task          = TN_NULL;

    queue_reset(&tn_locked_mutexes_list);
    queue_reset(&tn_blocked_tasks_list);
    queue_reset(&tn_wait_timeout_list);

    tnec_task_create((TN_TCB_S*)&tn_timer_task,
                     tn_timer_task_func,
                     0,
                     timer_task_stack,
                     timer_task_stack_size,
                     TN_NULL,
                     TN_TASK_TIMER
                    );

    tnec_task_create((TN_TCB_S*)&tn_idle_task,
                     tn_idle_task_func,
                     (TN_NUM_PRIORITY - 1),
                     idle_task_stack,
                     idle_task_stack_size,
                     TN_NULL,
                     TN_TASK_IDLE
                    );

    task_to_runnable(&tn_idle_task);
    task_to_runnable(&tn_timer_task);

    tn_curr_run_task            = &tn_idle_task;

    appl_init_callback          = app_in_cb;
    cpu_interrupt_enbl_callback = cpu_int_en;
    idle_user_func_callback     = idle_user_cb;

    tn_start_exe();

    for(;;);

/*    for (;;);*/
}
Esempio n. 2
0
File: tn.c Progetto: ADTL/AFGUI
//----------------------------------------------------------------------------
// TN main function (never return)
//----------------------------------------------------------------------------
void tn_start_system(void)
{
   int i;

   //-- Clear/set all globals (vars, lists, etc)

   for(i=0;i < TN_NUM_PRIORITY;i++)
   {
      queue_reset(&(tn_ready_list[i]));
      tn_tslice_ticks[i] = NO_TIME_SLICE;
   }

   queue_reset(&tn_create_queue);
   tn_created_tasks_qty = 0;

   tn_system_state = TN_ST_STATE_NOT_RUN;

   tn_ready_to_run_bmp = 0;

   tn_idle_count       = 0;
   tn_curr_performance = 0;

   tn_next_task_to_run = NULL;
   tn_curr_run_task    = NULL;

  //-- System tasks

   queue_reset(&tn_wait_timeout_list);

   //--- Timer task

   tn_task_create((TN_TCB*)&tn_timer_task,        //-- task TCB
                  tn_timer_task_func,             //-- task function
                  0,                              //-- task priority
                  &(tn_timer_task_stack           //-- task stack first addr in memory
                      [TN_TIMER_STACK_SIZE-1]),
                  TN_TIMER_STACK_SIZE,            //-- task stack size (in int,not bytes)
                  NULL,                           //-- task function parameter
                  TN_TASK_TIMER);                 //-- Creation option

   //--- Idle task

   tn_task_create((TN_TCB*)&tn_idle_task,         //-- task TCB
                  tn_idle_task_func,              //-- task function
                  TN_NUM_PRIORITY-1,              //-- task priority
                  &(tn_idle_task_stack            //-- task stack first addr in memory
                      [TN_IDLE_STACK_SIZE-1]),
                  TN_IDLE_STACK_SIZE,             //-- task stack size (in int,not bytes)
                  NULL,                           //-- task function parameter
                  TN_TASK_IDLE);                  //-- Creation option

    //-- Activate timer & idle tasks

   tn_next_task_to_run = &tn_idle_task; //-- Just for the task_to_runnable() proper op

   task_to_runnable(&tn_idle_task);
   task_to_runnable(&tn_timer_task);

   tn_curr_run_task = &tn_idle_task;  //-- otherwise it is NULL

   //-- Run OS - first context switch

   tn_start_exe();
}