예제 #1
0
void POSCALL nosInit(POSTASKFUNC_t firstfunc, void *funcarg, VAR_t priority,
                     UINT_t taskStackSize, UINT_t idleStackSize)
{
#if POSCFG_TASKSTACKTYPE == 0
  void *stk_task1, *stk_idle;
#endif

  taskparams_g.func = firstfunc;
  taskparams_g.arg  = funcarg;

#if (NOSCFG_FEATURE_MEMALLOC != 0) && (NOSCFG_MEM_MANAGER_TYPE == 1)
  nos_initMem();
#endif

#if POSCFG_TASKSTACKTYPE == 0

  if (taskStackSize == 0)
    taskStackSize = NOSCFG_DEFAULT_STACKSIZE;
  if (idleStackSize == 0)
    idleStackSize = NOSCFG_DEFAULT_STACKSIZE;
  stk_task1 = NOS_MEM_ALLOC(NOSCFG_STKMEM_RESERVE + taskStackSize);
  stk_idle  = NOS_MEM_ALLOC(NOSCFG_STKMEM_RESERVE + idleStackSize);
  if ((stk_task1 != NULL) && (stk_idle != NULL))
  {
#if NOSCFG_STACK_GROWS_UP == 0
    posInit(nano_init, stk_task1, priority,
            (void*) (((MEMPTR_t)stk_task1) + taskStackSize -
                     (NOSCFG_STKMEM_RESERVE + 1)),
            (void*) (((MEMPTR_t)stk_idle) + idleStackSize -
                     (NOSCFG_STKMEM_RESERVE + 1)) );
#else
    posInit(nano_init, stk_task1, priority,
            (void*) (((MEMPTR_t)stk_task1) + NOSCFG_STKMEM_RESERVE),
            (void*) (((MEMPTR_t)stk_idle) + NOSCFG_STKMEM_RESERVE) );
#endif
  }

#elif POSCFG_TASKSTACKTYPE == 1

  if (taskStackSize == 0)
    taskStackSize = NOSCFG_DEFAULT_STACKSIZE;
  if (idleStackSize == 0)
    idleStackSize = NOSCFG_DEFAULT_STACKSIZE;
  posInit(nano_init, NULL, priority, taskStackSize, idleStackSize);

#elif POSCFG_TASKSTACKTYPE == 2

  (void) taskStackSize;
  (void) idleStackSize;
  posInit(nano_init, NULL, priority);

#endif
}
예제 #2
0
int main(void)
{
    PRINTSTR("\n" POS_STARTUPSTRING "\n\n");

    /* start multitasking and execute first task (task1) */
#if (POSCFG_TASKSTACKTYPE == 0)
    posInit(task1, NULL, 1, allocstack(0x0600), allocstack(0x0200));
#elif (POSCFG_TASKSTACKTYPE == 1)
    posInit(task1, NULL, 1, 0x0600, 0x0200);
#elif (POSCFG_TASKSTACKTYPE == 2)
    posInit(task1, NULL, 1);
#endif

    /* we will never get here */
    return 0;
}
예제 #3
0
파일: rectangle.c 프로젝트: AriZuu/picoos
int main(void) {

    DDRB = 0x01;

    posInit(initialTask, NULL, 2);

    return 0;
}
예제 #4
0
파일: ex_init3.c 프로젝트: AriZuu/picoos
/* Program main function.
 * This function starts pico]OS by initializing the pico layer.
 */
int main(void)
{
  /* initialize pico]OS (pico layer only) */
  posInit(firsttask, /* ptr to function: first task that is executed */
          NULL,      /* optional argument, not used here             */
          1);        /* priority of the first task                   */

  /* Note: The call to posInit() will never return */

  return 0;
}
예제 #5
0
파일: main.c 프로젝트: espitall/old_eurobot
int main(void) 
{
  //RTOS initialization
  halInit();
  chSysInit();

  palSetPad(GPIOG, GPIOG_LED4_RED);

  //modules and peripherals initialization
  dcmInit();
  pcm9685Init();
  max11628Init();
  max7317Init();
  lcdInit();
  fieldInit();
  posInit(position_computed_hook);
  trajectoryInit();
  asservInit();
  mecaInit();
  //stepInit();
  //usirInit();
  pathfinderInit();
  //gyroInit();
  stratInit();

  lcdPrintln(LCD_WARNING, "Start: robot principal");

  while(0)
  {
    while((max7317Read() & (1 << IO_SWITCH_BACK_LEFT)))
    {
      chThdSleepMilliseconds(100);
    }
    lcdPrintln(LCD_INFO, "Click !");
    stepAction(STEP_ACTION_TAKE_RIGHT);
    stepWait();
    lcdPrintln(LCD_INFO, "Done !");

    while(!(max7317Read() & (1 << IO_SWITCH_BACK_LEFT)))
    {
      chThdSleepMilliseconds(100);
    }
  }

  
  lcdPrintln(LCD_INFO, "Attente tirette (mise en place)");
  while(!(max7317Read() & (1 << IO_SWITCH_STARTUP)))
  {
    chThdSleepMilliseconds(100);
  }

  lcdPrintln(LCD_INFO, "Attente du depart");

  while(max7317Read() & (1 << IO_SWITCH_STARTUP))
  {
    chThdSleepMilliseconds(100);
  }

  stratStart();


  //chThdSleepMilliseconds(3000);
  //  dcmSetWidth(0, 500);
  //  dcmSetWidth(1, -500);
  //while (true)
  //{
  //  lcdPrintln(LCD_INFO,"l %ld, r %ld", posGetLeftTick(), posGetRightTick());
  //  chThdSleepMilliseconds(500);
  //}

 
  //int i = 0;
  //int d = 400;
  //while (true)
  //{
  //  lcdPrintln(LCD_INFO, "tour: %d", i);
  //  i += 1;
  //  TRAJECTORY_XY_MM(d, 0);
  //  TRAJECTORY_XY_MM(d, d);
  //  TRAJECTORY_XY_MM(0, d);
  //  TRAJECTORY_XY_MM(0, 0);
  //  trajectoryWait();
  //}

  while(true)
  {
    chThdSleepMilliseconds(3000);
  }
}
예제 #6
0
파일: mutex_summe.c 프로젝트: AriZuu/picoos
int main(void) {

    posInit(initialTask, NULL, 2);

    return 0;
}