コード例 #1
0
ファイル: main.c プロジェクト: morriemajor/mariokart
int main(void)
{
    unsigned int switchPressed;

    debug_init(SOFTWARE_NAME);

    PIO_InitializeInterrupts(AT91C_AIC_PRIOR_LOWEST);
    switches_init();
    char_display_init();
    LED_Configure(0);
    LED_Configure(1);

    if (! BCAN_Init(1000, 0, NULL)) {
        printf("INIT FAIL");
        LED_Set(1);
        return 1;
    }

    printf("INIT OK\n\r");
    LED_Set(0);

    BCAN_InitMailboxRegisters( 0, 1, 0x0, (0x5AC << 18), AT91C_CAN_MOT_TX, 0x0);

    while(1) {
        DisplayMenu();

        switchPressed = -1;
        while (switchPressed == -1) {
            if (switches_pressed(0)) {
                TRACE_INFO("Switch 0 is pressed\n\r");
                switchPressed = 0;
            } else if (switches_pressed(1)) {
                TRACE_INFO("Switch 1 is pressed\n\r");
                switchPressed = 1;
            } else if (switches_pressed(2)) {
                TRACE_INFO("Switch 2 is pressed\n\r");
                switchPressed = 2;
            } else if (switches_pressed(3)) {
                TRACE_INFO("Switch 3 is pressed\n\r");
                switchPressed = 3;
            } else {
                //TRACE_INFO("No Switch is pressed\n\r");
            }
            char_display_tick();
            for (volatile unsigned int i = 0xFF; i > 0; i--) ;
        }

        unsigned int result = -1;
        while (result != CAN_STATUS_SUCCESS) {
            result = BCAN_Write(0, 1, 0, switchPressed, 0x1);
        }
        char_display_number(switchPressed);
    }

    return 0;
}
コード例 #2
0
void DYNAMIC_UTI(void* pdata)
{
  INT8U err_tmr, err_tmr_start, i, err;
  int j, switch_status;

  Sem_DYNAMIC_UTI = OSSemCreate(0);
  
  printf("DYNAMIC_UTI Task created!\n");
  
  SWTimer_DYNAMIC_UTI = OSTmrCreate(0, DYNAMIC_UTI_PERIOD, OS_TMR_OPT_PERIODIC , Tmr_Callback_DYNAMIC_UTI_Task, (void *)0,"DYNAMIC_UTI",&err_tmr);   
   
    if(err_tmr == OS_ERR_NONE){
        OSTmrStart(SWTimer_DYNAMIC_UTI, &err_tmr_start);
        
        if(DEBUG)
        printf("Timer for DYNAMIC_UTI is created and Started \n");        
      }
      else {
      printf("Error while creating DYNAMIC_UTI task timer \n");     
      }

  while(1)
    {
      
       switch_status = switches_pressed();
       switch_status = switch_status & 1008; // Mask for SW4 - SW9
       
       switch_status = switch_status >> 4;
       printf("Before loop : Time : %d, SwitchStatus : %d \n", alt_timestamp() / (alt_timestamp_freq()/1000), switch_status);
        //printf("switch_status : %d\n",switch_status);
        
       if(switch_status > 50)
       switch_status = 50;
       
       // Loop running for 6 unit of time
       // for Optimization Level Os : j = 4600000 ; 
       // for No Optimization : j = 3444
       for(i=0; i<switch_status; i++){
        for(j=0; j<4600000; j++){
        }
       }

       printf("After loop : Time : %d \n", alt_timestamp() / (alt_timestamp_freq()/1000));
       OSSemPend(Sem_DYNAMIC_UTI, 0, &err);
       
       if(err == OS_ERR_NONE)
       {
       }
       else {
        printf("Sem_DYNAMIC_UTI Pend Error ------ \n");
       }
    }
}
コード例 #3
0
void SwitchIO(void* pdata)
{
  INT8U err_tmr, err_tmr_start, err_sem, switch_status;

  Sem_SwitchIO = OSSemCreate(0);
  Sem_SwitchIO_IP = OSSemCreate(0); // For getting user input
  
  printf("SwitchIO Task created!\n");
  
  SWTimer_SwitchIO = OSTmrCreate(0, SwitchIO_PERIOD, OS_TMR_OPT_PERIODIC , Tmr_Callback_SwitchIO_Task, (void *)0,"SwitchIO",&err_tmr);   
   
    if(err_tmr == OS_ERR_NONE){
        OSTmrStart(SWTimer_SwitchIO, &err_tmr_start);
        
        if(DEBUG)
        printf("Timer for SwitchIO is created and Started \n");        
      }
      else {
      printf("Error while creating SwitchIO task timer \n");     
     
      if(err_tmr == OS_ERR_TMR_NAME_TOO_LONG)
      printf(" OS_ERR_TMR_NAME_TOO_LONG : SwitchIO TASK \n");
          
      }

  while(1)
    {
      if(DEBUG)
      printf("SwitchIO task \n");
      
       switch_status = switches_pressed();
       
       if(DEBUG)
       printf("Switch Status : %d \n", switch_status);
       
       if(switch_status & 1) // Engine pressed
       {
            engine = on;
       }
       else if(CUR_VELOCITY == 0){
            engine = off;
       }
       
       if(switch_status & 2) // Top Gear pressed
       {
            top_gear = on;
       }
       else {
            top_gear = off;
            cruise_control = off;
       }
       
       OSSemPost(Sem_SwitchIO_IP);
       
        if(DEBUG)
        printf("SEM ACCESS SwitchIO TASK\n\n");
        
        OSSemPend(Sem_SwitchIO, 0, &err_sem);        
         
        if(DEBUG)
        printf("SwitchIO Task in Loop\n");       
    }
}